From fef365b2947e4464508f223e215643ad8cf4cdd2 Mon Sep 17 00:00:00 2001 From: Stephen Schiffli Date: Wed, 2 May 2018 16:22:08 -0700 Subject: [PATCH] Initial commit of V3 API based on the CPP SDK --- .gitmodules | 3 + .travis.yml | 23 - Docs/.gitignore | 2 - Docs/Makefile | 223 - Docs/gen_api_reference.sh | 5 - Docs/source/_templates/layout.html | 15 - Docs/source/accelerometer.rst | 61 - Docs/source/accelerometerbmi160.rst | 86 - Docs/source/accelerometermma8452q.rst | 59 - Docs/source/advanced_features.rst | 55 - Docs/source/ambient_light.rst | 18 - Docs/source/ambientlightltr329.rst | 24 - Docs/source/ancs.rst | 37 - Docs/source/barometer.rst | 40 - Docs/source/barometerbmp280.rst | 29 - Docs/source/color_sensor.rst | 18 - Docs/source/color_sensor_tcs3472.rst | 37 - Docs/source/conf.py | 287 - Docs/source/core_modules.rst | 13 - Docs/source/data.rst | 51 - Docs/source/data_processor.rst | 216 - Docs/source/events.rst | 89 - Docs/source/gen_api_reference.sh | 5 - Docs/source/gpio.rst | 84 - Docs/source/gyro.rst | 45 - Docs/source/gyrobmi160.rst | 15 - Docs/source/haptic.rst | 24 - Docs/source/humidity.rst | 18 - Docs/source/humidity_bme280.rst | 28 - Docs/source/ibeacon.rst | 27 - Docs/source/index.rst | 31 - Docs/source/led.rst | 39 - Docs/source/magnetometer.rst | 19 - Docs/source/magnetometerbmm150.rst | 19 - Docs/source/metawear_manager.rst | 94 - Docs/source/metawearboard.rst | 146 - Docs/source/neopixel.rst | 52 - Docs/source/peripherals.rst | 14 - Docs/source/project_setup.rst | 44 - Docs/source/proximity.rst | 20 - Docs/source/proximity_tsl2671.rst | 38 - Docs/source/pushbutton.rst | 31 - Docs/source/sensor_fusion.rst | 84 - Docs/source/sensors.rst | 28 - Docs/source/serial_passthrough.rst | 45 - Docs/source/settings.rst | 112 - Docs/source/temperature.rst | 85 - Docs/source/timer.rst | 18 - LICENSE | 2 +- MetaWear.podspec | 52 +- .../AsyncUtils/MblMwDataSignal+Async.swift | 83 + .../MblMwEvent+Async.swift} | 39 +- MetaWear/AsyncUtils/MetaWear+Async.swift | 92 + MetaWear/AsyncUtils/MetaWear+LED.swift | 95 + .../Classes/Categories/BFTask+MBLExtensions.h | 93 - .../Classes/Categories/BFTask+MBLExtensions.m | 95 - MetaWear/Classes/Core/MBLAnonymousEvent.m | 99 - MetaWear/Classes/Core/MBLConstants.h | 210 - MetaWear/Classes/Core/MBLConstants.m | 282 - MetaWear/Classes/Core/MBLData.h | 87 - MetaWear/Classes/Core/MBLData.m | 151 - MetaWear/Classes/Core/MBLDataSample.h | 61 - MetaWear/Classes/Core/MBLDataSample.m | 82 - MetaWear/Classes/Core/MBLDataSwitch.h | 58 - MetaWear/Classes/Core/MBLDataSwitch.m | 54 - MetaWear/Classes/Core/MBLDeviceInfo.h | 68 - MetaWear/Classes/Core/MBLDeviceInfo.m | 40 - MetaWear/Classes/Core/MBLEntityEvent.h | 43 - MetaWear/Classes/Core/MBLEntityEvent.m | 120 - MetaWear/Classes/Core/MBLEntityModule.h | 43 - MetaWear/Classes/Core/MBLEntityModule.m | 222 - MetaWear/Classes/Core/MBLEvent.h | 428 - MetaWear/Classes/Core/MBLEvent.m | 977 -- MetaWear/Classes/Core/MBLFilter.h | 60 - MetaWear/Classes/Core/MBLFilter.m | 185 - MetaWear/Classes/Core/MBLFirmwareUpdateInfo.h | 54 - MetaWear/Classes/Core/MBLFirmwareUpdateInfo.m | 59 - MetaWear/Classes/Core/MBLMetaWear.h | 437 - MetaWear/Classes/Core/MBLMetaWear.m | 1889 ---- MetaWear/Classes/Core/MBLMetaWearManager.h | 152 - MetaWear/Classes/Core/MBLMetaWearManager.m | 655 -- MetaWear/Classes/Core/MBLModule.h | 43 - MetaWear/Classes/Core/MBLModule.m | 272 - MetaWear/Classes/Core/MBLNumericData.h | 52 - MetaWear/Classes/Core/MBLNumericData.m | 65 - MetaWear/Classes/Core/MBLRegister.h | 43 - MetaWear/Classes/Core/MBLRegister.m | 597 -- MetaWear/Classes/Core/MBLStringData.h | 52 - MetaWear/Classes/Core/MBLStringData.m | 64 - MetaWear/Classes/MetaWear.h | 107 - MetaWear/Classes/Modules/ANCS/MBLANCS.h | 141 - MetaWear/Classes/Modules/ANCS/MBLANCS.m | 155 - .../Classes/Modules/ANCS/MBLANCSEventData.h | 65 - .../Classes/Modules/ANCS/MBLANCSEventData.m | 196 - .../MBLAccelerometerBMA255.h | 54 - .../MBLAccelerometerBMA255.m | 101 - .../MBLAccelerometerBMA255MotionEvent.h | 86 - .../MBLAccelerometerBMA255MotionEvent.m | 180 - .../MBLAccelerometerBMI160.h | 87 - .../MBLAccelerometerBMI160.m | 131 - .../MBLAccelerometerBMI160MotionEvent.h | 98 - .../MBLAccelerometerBMI160MotionEvent.m | 207 - .../MBLAccelerometerBosch.h | 98 - .../MBLAccelerometerBosch.m | 95 - .../MBLAccelerometerBoschFlatData.m | 86 - .../MBLAccelerometerBoschFlatEvent.h | 69 - .../MBLAccelerometerBoschFlatEvent.m | 93 - .../MBLAccelerometerBoschLowOrHighGEvent.h | 92 - .../MBLAccelerometerBoschLowOrHighGEvent.m | 162 - .../MBLAccelerometerBoschTapEvent.h | 100 - .../MBLAccelerometerBoschTapEvent.m | 126 - .../Modules/Accelerometer/MBLAccelerometer.h | 123 - .../Modules/Accelerometer/MBLAccelerometer.m | 83 - .../Accelerometer/MBLAccelerometerData.h | 83 - .../Accelerometer/MBLAccelerometerData.m | 93 - .../Accelerometer/MBLOrientationData.h | 69 - .../Accelerometer/MBLOrientationData.m | 101 - .../Accelerometer/MBLRMSAccelerometerData.h | 50 - .../Accelerometer/MBLRMSAccelerometerData.m | 64 - .../MMA8452Q/MBLAccelerometerMMA8452Q.h | 193 - .../MMA8452Q/MBLAccelerometerMMA8452Q.m | 262 - .../MBLAmbientLightLTR329.h | 108 - .../MBLAmbientLightLTR329.m | 104 - .../Modules/AmbientLight/MBLAmbientLight.h | 60 - .../Modules/AmbientLight/MBLAmbientLight.m | 53 - .../BarometerBME280/MBLBarometerBME280.h | 67 - .../BarometerBME280/MBLBarometerBME280.m | 78 - .../BarometerBMP280/MBLBarometerBMP280.h | 67 - .../BarometerBMP280/MBLBarometerBMP280.m | 78 - .../BarometerBosch/MBLBarometerBosch.h | 95 - .../BarometerBosch/MBLBarometerBosch.m | 69 - .../Classes/Modules/Barometer/MBLBarometer.h | 66 - .../Classes/Modules/Barometer/MBLBarometer.m | 64 - .../Modules/Conductance/MBLConductance.h | 108 - .../Modules/Conductance/MBLConductance.m | 111 - MetaWear/Classes/Modules/GPIO/MBLGPIO.h | 60 - MetaWear/Classes/Modules/GPIO/MBLGPIO.m | 211 - MetaWear/Classes/Modules/GPIO/MBLGPIOPin.h | 178 - MetaWear/Classes/Modules/GPIO/MBLGPIOPin.m | 139 - .../Modules/Gyro/GyroBMI160/MBLGyroBMI160.h | 70 - .../Modules/Gyro/GyroBMI160/MBLGyroBMI160.m | 122 - .../Classes/Modules/Gyro/GyroBMI160/bmi160.h | 1302 --- MetaWear/Classes/Modules/Gyro/MBLGyro.h | 104 - MetaWear/Classes/Modules/Gyro/MBLGyro.m | 66 - MetaWear/Classes/Modules/Gyro/MBLGyroData.h | 83 - MetaWear/Classes/Modules/Gyro/MBLGyroData.m | 89 - .../Modules/HapticBuzzer/MBLHapticBuzzer.h | 64 - .../Modules/HapticBuzzer/MBLHapticBuzzer.m | 88 - .../HygrometerBME280/MBLHygrometerBME280.h | 73 - .../HygrometerBME280/MBLHygrometerBME280.m | 72 - .../Modules/Hygrometer/MBLHygrometer.h | 59 - .../Modules/Hygrometer/MBLHygrometer.m | 53 - MetaWear/Classes/Modules/I2C/MBLI2C.h | 59 - MetaWear/Classes/Modules/I2C/MBLI2C.m | 57 - MetaWear/Classes/Modules/LED/MBLLED.h | 141 - MetaWear/Classes/Modules/LED/MBLLED.m | 270 - .../Modules/Magnetometer/MBLMagnetometer.h | 59 - .../Modules/Magnetometer/MBLMagnetometer.m | 59 - .../Magnetometer/MBLMagnetometerData.h | 74 - .../Magnetometer/MBLMagnetometerData.m | 89 - .../MBLMagnetometerBMM150.h | 76 - .../MBLMagnetometerBMM150.m | 170 - .../MechanicalSwitch/MBLMechanicalSwitch.h | 64 - .../MechanicalSwitch/MBLMechanicalSwitch.m | 62 - .../Classes/Modules/Neopixel/MBLNeopixel.h | 88 - .../Classes/Modules/Neopixel/MBLNeopixel.m | 177 - .../Modules/Neopixel/MBLNeopixelStrand.h | 104 - .../Modules/Neopixel/MBLNeopixelStrand.m | 169 - .../Modules/Photometer/MBLPhotometer.h | 80 - .../Modules/Photometer/MBLPhotometer.m | 56 - .../Classes/Modules/Photometer/MBLRGBData.h | 65 - .../Classes/Modules/Photometer/MBLRGBData.m | 70 - .../PhotometerTCS3472/MBLPhotometerTCS3472.h | 71 - .../PhotometerTCS3472/MBLPhotometerTCS3472.m | 100 - .../Classes/Modules/Proximity/MBLProximity.h | 58 - .../Classes/Modules/Proximity/MBLProximity.m | 52 - .../ProximityTSL2671/MBLProximityTSL2671.h | 72 - .../ProximityTSL2671/MBLProximityTSL2671.m | 108 - .../Modules/SensorFusion/MBLEulerAngleData.h | 64 - .../Modules/SensorFusion/MBLEulerAngleData.m | 70 - .../Modules/SensorFusion/MBLQuaternionData.h | 53 - .../Modules/SensorFusion/MBLQuaternionData.m | 70 - .../Modules/SensorFusion/MBLSensorFusion.h | 112 - .../Modules/SensorFusion/MBLSensorFusion.m | 344 - MetaWear/Classes/Modules/Serial/MBLI2CData.h | 71 - MetaWear/Classes/Modules/Serial/MBLI2CData.m | 151 - MetaWear/Classes/Modules/Serial/MBLSPIData.h | 77 - MetaWear/Classes/Modules/Serial/MBLSPIData.m | 230 - MetaWear/Classes/Modules/Serial/MBLSerial.h | 102 - MetaWear/Classes/Modules/Serial/MBLSerial.m | 166 - .../Classes/Modules/Settings/MBLSettings.h | 188 - .../Classes/Modules/Settings/MBLSettings.m | 338 - .../Temperature/MBLExternalThermistor.h | 63 - .../Temperature/MBLExternalThermistor.m | 40 - .../Modules/Temperature/MBLTemperature.h | 89 - .../Modules/Temperature/MBLTemperature.m | 68 - MetaWear/Classes/Modules/Timer/MBLTimer.h | 89 - MetaWear/Classes/Modules/Timer/MBLTimer.m | 156 - .../Classes/Modules/Timer/MBLTimerEvent.h | 57 - .../Classes/Modules/Timer/MBLTimerEvent.m | 78 - MetaWear/Classes/Modules/iBeacon/MBLiBeacon.h | 109 - MetaWear/Classes/Modules/iBeacon/MBLiBeacon.m | 198 - MetaWear/{Assets => Core}/.gitkeep | 0 .../Bridging.swift} | 33 +- .../CBUUID.swift} | 32 +- .../DeviceInformation.swift} | 41 +- .../MBLLogger.m => Core/FirmwareBuild.swift} | 72 +- MetaWear/Core/FirmwareServer.swift | 157 + .../LogDelegate.swift} | 59 +- .../MblMwGattChar.swift} | 71 +- .../MetaBootFinder.swift} | 107 +- MetaWear/Core/MetaWear.swift | 491 + MetaWear/Core/MetaWearData.swift | 103 + MetaWear/Core/MetaWearScanner.swift | 245 + MetaWear/Core/String+VersionCompare.swift | 66 + .../Internal/Categories/BFTask+MBLPrivate.h | 71 - .../Internal/Categories/BFTask+MBLPrivate.m | 119 - .../Internal/Categories/MBLCategoryLoader.h | 42 - .../Internal/Categories/MBLCategoryLoader.m | 50 - MetaWear/Internal/Core/MBLAnalytics.h | 47 - MetaWear/Internal/Core/MBLAnalytics.m | 119 - MetaWear/Internal/Core/MBLConstants+Private.h | 65 - MetaWear/Internal/Core/MBLConversion.h | 86 - MetaWear/Internal/Core/MBLConversion.m | 107 - MetaWear/Internal/Core/MBLData+Private.h | 54 - .../Internal/Core/MBLDataSample+Private.h | 44 - MetaWear/Internal/Core/MBLDependentData.h | 44 - MetaWear/Internal/Core/MBLDependentData.m | 74 - MetaWear/Internal/Core/MBLDispatchQueue.h | 55 - MetaWear/Internal/Core/MBLDownloadOnlyEvent.h | 44 - MetaWear/Internal/Core/MBLDownloadOnlyEvent.m | 62 - .../Internal/Core/MBLEntityEvent+Private.h | 53 - .../Internal/Core/MBLEntityModule+Private.h | 74 - MetaWear/Internal/Core/MBLEvent+Private.h | 56 - MetaWear/Internal/Core/MBLFilter+Private.h | 56 - MetaWear/Internal/Core/MBLFirmwareBuild.h | 75 - MetaWear/Internal/Core/MBLFirmwareBuild.m | 163 - MetaWear/Internal/Core/MBLFormat.h | 75 - MetaWear/Internal/Core/MBLFormat.m | 109 - MetaWear/Internal/Core/MBLLogger.h | 38 - MetaWear/Internal/Core/MBLMacAddressFormat.h | 48 - MetaWear/Internal/Core/MBLMacAddressFormat.m | 76 - MetaWear/Internal/Core/MBLMetaWear+Private.h | 125 - .../Core/MBLMetaWearManager+Private.h | 62 - MetaWear/Internal/Core/MBLModule+Private.h | 174 - MetaWear/Internal/Core/MBLModuleInfo.h | 64 - MetaWear/Internal/Core/MBLMovingAverage.h | 55 - MetaWear/Internal/Core/MBLMovingAverage.m | 80 - MetaWear/Internal/Core/MBLNonVolatileState.h | 48 - MetaWear/Internal/Core/MBLNonVolatileState.m | 53 - .../Internal/Core/MBLNumericData+Private.h | 47 - MetaWear/Internal/Core/MBLNumericFormatter.h | 50 - MetaWear/Internal/Core/MBLNumericFormatter.m | 134 - MetaWear/Internal/Core/MBLRegister+Private.h | 107 - .../Internal/Core/MBLStringData+Private.h | 46 - MetaWear/Internal/Core/MBLTriggeredRead.h | 51 - MetaWear/Internal/Core/MBLTriggeredRead.m | 117 - .../Internal/DFU/MBLFirmwareUpdateManager.h | 70 - .../Internal/DFU/MBLFirmwareUpdateManager.m | 354 - MetaWear/Internal/Mocks/MBLBluetoothCentral.h | 88 - .../Internal/Mocks/MBLBluetoothCentralMock.h | 48 - .../Internal/Mocks/MBLBluetoothCentralMock.m | 152 - .../Internal/Mocks/MBLBluetoothPeripheral.h | 80 - .../Mocks/MBLBluetoothPeripheralMock.h | 68 - .../Mocks/MBLBluetoothPeripheralMock.m | 467 - MetaWear/Internal/Mocks/MBLDeviceLookup.h | 46 - MetaWear/Internal/Mocks/MBLDeviceLookup.m | 165 - .../Internal/Mocks/MBLMockPeripheralFactory.h | 44 - .../Internal/Mocks/MBLMockPeripheralFactory.m | 39 - MetaWear/Internal/Mocks/MBLMockUtils.h | 41 - MetaWear/Internal/Mocks/MBLMockUtils.m | 64 - MetaWear/Internal/Mocks/MBLModuleMock.h | 62 - MetaWear/Internal/Mocks/MBLModuleMock.m | 518 - .../Modules/ANCS/MBLANCSEventData+Private.h | 48 - .../MBLAccelerometerBMA255+Private.h | 40 - ...BLAccelerometerBMA255MotionEvent+Private.h | 43 - .../MBLAccelerometerBMI160+Private.h | 46 - ...BLAccelerometerBMI160MotionEvent+Private.h | 45 - .../MBLAccelerometerBMI160StepEvent.h | 47 - .../MBLAccelerometerBMI160StepEvent.m | 87 - .../MBLAccelerometerBosch+Private.h | 42 - .../MBLAccelerometerBoschAxisReadyEvent.h | 45 - .../MBLAccelerometerBoschAxisReadyEvent.m | 95 - .../MBLAccelerometerBoschDataReadyEvent.h | 47 - .../MBLAccelerometerBoschDataReadyEvent.m | 78 - .../MBLAccelerometerBoschFlatEvent+Private.h | 47 - .../MBLAccelerometerBoschFlatFormat.h | 47 - .../MBLAccelerometerBoschFlatFormat.m | 77 - .../MBLAccelerometerBoschFormat.h | 50 - .../MBLAccelerometerBoschFormat.m | 144 - ...ccelerometerBoschLowOrHighGEvent+Private.h | 44 - .../MBLAccelerometerBoschOrientationEvent.h | 47 - .../MBLAccelerometerBoschOrientationEvent.m | 86 - .../MBLAccelerometerBoschOrientationFormat.h | 46 - .../MBLAccelerometerBoschOrientationFormat.m | 88 - ...BLAccelerometerBoschPackedDataReadyEvent.h | 44 - ...BLAccelerometerBoschPackedDataReadyEvent.m | 82 - .../MBLAccelerometerBoschRMSFormat.h | 48 - .../MBLAccelerometerBoschRMSFormat.m | 98 - .../MBLAccelerometerBoschTapEvent+Private.h | 47 - .../Accelerometer/MBLAccelerometer+Private.h | 57 - .../MBLAccelerometerData+Private.h | 52 - .../MBLOrientationData+Private.h | 51 - .../MBLRMSAccelerometerData+Private.h | 46 - .../MMA8452Q/MBLAccelerometerAxisReadyEvent.h | 45 - .../MMA8452Q/MBLAccelerometerAxisReadyEvent.m | 96 - .../MMA8452Q/MBLAccelerometerDataReadyEvent.h | 45 - .../MMA8452Q/MBLAccelerometerDataReadyEvent.m | 92 - .../MMA8452Q/MBLAccelerometerFreeFallEvent.h | 45 - .../MMA8452Q/MBLAccelerometerFreeFallEvent.m | 91 - .../MBLAccelerometerMMA8452Q+Private.h | 51 - .../MMA8452Q/MBLAccelerometerMMA8452QFormat.h | 49 - .../MMA8452Q/MBLAccelerometerMMA8452QFormat.m | 105 - ...BLAccelerometerMMA8452QOrientationFormat.h | 46 - ...BLAccelerometerMMA8452QOrientationFormat.m | 54 - .../MBLAccelerometerMMA8452QRMSFormat.h | 48 - .../MBLAccelerometerOrientationEvent.h | 45 - .../MBLAccelerometerOrientationEvent.m | 86 - .../MBLAccelerometerPackedDataReadyEvent.h | 45 - .../MBLAccelerometerPackedDataReadyEvent.m | 89 - .../MMA8452Q/MBLAccelerometerShakeEvent.h | 45 - .../MMA8452Q/MBLAccelerometerShakeEvent.m | 90 - .../MMA8452Q/MBLAccelerometerTapEvent.h | 45 - .../MMA8452Q/MBLAccelerometerTapEvent.m | 137 - .../Modules/Accelerometer/MMA8452Q/mma8452q.h | 424 - .../AmbientLight/MBLAmbientLight+Private.h | 48 - .../MBLBarometerBosch+Private.h | 45 - .../MBLBarometerBoschPeriodicAltitudeEvent.h | 47 - .../MBLBarometerBoschPeriodicAltitudeEvent.m | 72 - .../MBLBarometerBoschPeriodicPressureEvent.h | 47 - .../MBLBarometerBoschPeriodicPressureEvent.m | 71 - .../Modules/Barometer/MBLBarometer+Private.h | 53 - .../Internal/Modules/Command/MBLCommand.h | 65 - .../Internal/Modules/Command/MBLCommand.m | 197 - .../Modules/Conductance/MBLConductanceData.h | 46 - .../Modules/Conductance/MBLConductanceData.m | 47 - .../Modules/DataProcessor/MBLDataProcessor.h | 46 - .../Modules/DataProcessor/MBLDataProcessor.m | 95 - .../Internal/Modules/GPIO/MBLGPIO+Private.h | 62 - MetaWear/Internal/Modules/GPIO/MBLGPIOData.h | 55 - MetaWear/Internal/Modules/GPIO/MBLGPIOData.m | 134 - .../Modules/GPIO/MBLGPIOPin+Private.h | 50 - .../Modules/GPIO/MBLGPIOPinChangeEvent.h | 47 - .../Modules/GPIO/MBLGPIOPinChangeEvent.m | 85 - .../Gyro/GyroBMI160/MBLGyroBMI160+Private.h | 40 - .../GyroBMI160/MBLGyroBMI160AxisReadyEvent.h | 46 - .../GyroBMI160/MBLGyroBMI160AxisReadyEvent.m | 95 - .../GyroBMI160/MBLGyroBMI160DataReadyEvent.h | 50 - .../GyroBMI160/MBLGyroBMI160DataReadyEvent.m | 82 - .../Gyro/GyroBMI160/MBLGyroBMI160Format.h | 51 - .../Gyro/GyroBMI160/MBLGyroBMI160Format.m | 150 - .../MBLGyroBMI160PackedDataReadyEvent.h | 47 - .../MBLGyroBMI160PackedDataReadyEvent.m | 86 - .../Internal/Modules/Gyro/MBLGyro+Private.h | 55 - .../Modules/Gyro/MBLGyroData+Private.h | 46 - ...MBLHygrometerBME280PeriodicHumidityEvent.h | 47 - ...MBLHygrometerBME280PeriodicHumidityEvent.m | 71 - .../Hygrometer/MBLHygrometer+Private.h | 48 - .../Internal/Modules/LED/MBLLED+Private.h | 57 - .../Internal/Modules/Logging/MBLLogging.h | 150 - .../Internal/Modules/Logging/MBLLogging.m | 890 -- .../Internal/Modules/Logging/MBLLoggingV0.h | 40 - .../Internal/Modules/Logging/MBLLoggingV0.m | 76 - .../Internal/Modules/Logging/MBLLoggingV1.h | 40 - .../Internal/Modules/Logging/MBLLoggingV1.m | 76 - .../Internal/Modules/Logging/MBLLoggingV2.h | 40 - .../Internal/Modules/Logging/MBLLoggingV2.m | 197 - MetaWear/Internal/Modules/Macro/MBLMacro.h | 51 - MetaWear/Internal/Modules/Macro/MBLMacro.m | 188 - .../Magnetometer/MBLMagnetometer+Private.h | 46 - .../MBLMagnetometerData+Private.h | 42 - .../MBLMagnetometerBMM150+Private.h | 64 - .../MBLMagnetometerBMM150Format.h | 48 - .../MBLMagnetometerBMM150Format.m | 120 - ...erBMM150PackedPeriodicMagneticFieldEvent.h | 47 - ...erBMM150PackedPeriodicMagneticFieldEvent.m | 85 - ...etometerBMM150PeriodicMagneticFieldEvent.h | 47 - ...etometerBMM150PeriodicMagneticFieldEvent.m | 72 - .../Modules/Neopixel/MBLNeopixel+Private.h | 57 - .../Neopixel/MBLNeopixelStrand+Private.h | 52 - .../Photometer/MBLPhotometer+Private.h | 44 - .../Modules/Photometer/MBLRGBData+Private.h | 46 - .../MBLPhotometerTCS3472Format.h | 48 - .../MBLPhotometerTCS3472Format.m | 78 - .../Modules/Proximity/MBLProximity+Private.h | 40 - .../Modules/SensorFusion/MBLBitmaskEvent.h | 53 - .../Modules/SensorFusion/MBLBitmaskEvent.m | 91 - .../Modules/SensorFusion/MBLCorrectedFormat.h | 56 - .../Modules/SensorFusion/MBLCorrectedFormat.m | 84 - .../SensorFusion/MBLEulerAngleData+Private.h | 46 - .../Modules/SensorFusion/MBLEulerFormat.h | 44 - .../Modules/SensorFusion/MBLEulerFormat.m | 69 - .../Modules/SensorFusion/MBLGravityFormat.h | 44 - .../Modules/SensorFusion/MBLGravityFormat.m | 68 - .../SensorFusion/MBLQuaternionData+Private.h | 46 - .../SensorFusion/MBLQuaternionFormat.h | 44 - .../SensorFusion/MBLQuaternionFormat.m | 69 - .../SensorFusion/MBLSensorFusion+Private.h | 47 - .../Modules/Serial/MBLI2CData+Private.h | 55 - .../Modules/Serial/MBLSPIData+Private.h | 67 - .../Modules/Serial/MBLSerial+Private.h | 48 - .../Modules/Settings/MBLSettings+Private.h | 49 - .../Temperature/MBLExternalThermistor0.h | 47 - .../Temperature/MBLExternalThermistor0.m | 64 - .../Temperature/MBLExternalThermistor1.h | 47 - .../Temperature/MBLExternalThermistor1.m | 85 - .../Temperature/MBLOnDieTemperature0.h | 47 - .../Temperature/MBLTemperature+Private.h | 59 - .../Modules/Temperature/MBLTemperatureV0.h | 40 - .../Modules/Temperature/MBLTemperatureV0.m | 97 - .../Modules/Temperature/MBLTemperatureV1.h | 40 - .../Modules/Temperature/MBLTemperatureV1.m | 94 - .../Internal/Modules/TestDebug/MBLTestDebug.h | 112 - .../Internal/Modules/TestDebug/MBLTestDebug.m | 201 - .../Internal/Modules/Timer/MBLTimer+Private.h | 49 - .../Modules/Timer/MBLTimerEvent+Private.h | 52 - MetaWear/MetaWear-SDK-Cpp | 1 + MetaWear/MetaWear.xcodeproj/project.pbxproj | 918 +- .../xcschemes/MetaWearDFU.xcscheme | 4 +- .../MetaWearIntegrationTests-iOS.xcscheme | 4 +- .../MetaWearIntegrationTests-macOS.xcscheme | 4 +- .../MetaWearIntegrationTests-tvOS.xcscheme | 4 +- .../xcschemes/MetaWearR-CI.xcscheme | 4 +- .../xcschemes/MetaWearUnitTests-iOS.xcscheme | 8 +- .../MetaWearUnitTests-macOS.xcscheme | 4 +- .../xcschemes/MetaWearUnitTests-tvOS.xcscheme | 4 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + MetaWear/Mocks/MetaWear+Mock.swift | 90 + MetaWear/Podfile | 15 +- MetaWear/Podfile.lock | 42 +- MetaWear/Pods/{Bolts => Bolts-Swift}/LICENSE | 4 +- MetaWear/Pods/Bolts-Swift/README.md | 164 + .../Sources/BoltsSwift/Errors.swift | 34 + .../Sources/BoltsSwift/Executor.swift | 127 + .../BoltsSwift/Task+ContinueWith.swift | 222 + .../Sources/BoltsSwift/Task+Delay.swift | 32 + .../Sources/BoltsSwift/Task+WhenAll.swift | 105 + .../Sources/BoltsSwift/Task+WhenAny.swift | 58 + .../Bolts-Swift/Sources/BoltsSwift/Task.swift | 308 + .../BoltsSwift/TaskCompletionSource.swift | 120 + .../Bolts/Bolts/Common/BFCancellationToken.h | 42 - .../Bolts/Bolts/Common/BFCancellationToken.m | 144 - .../Common/BFCancellationTokenRegistration.h | 29 - .../Common/BFCancellationTokenRegistration.m | 79 - .../Bolts/Common/BFCancellationTokenSource.h | 60 - .../Bolts/Common/BFCancellationTokenSource.m | 64 - MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.h | 62 - MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.m | 136 - .../Bolts/Bolts/Common/BFTask+Exceptions.h | 32 - .../Bolts/Bolts/Common/BFTask+Exceptions.m | 24 - MetaWear/Pods/Bolts/Bolts/Common/BFTask.h | 293 - MetaWear/Pods/Bolts/Bolts/Common/BFTask.m | 563 - .../Bolts/Common/BFTaskCompletionSource.h | 95 - .../Bolts/Common/BFTaskCompletionSource.m | 91 - MetaWear/Pods/Bolts/Bolts/Common/Bolts.h | 39 - MetaWear/Pods/Bolts/Bolts/Common/Bolts.m | 17 - MetaWear/Pods/Bolts/README.md | 683 -- .../Pods/FastCoding/FastCoder/FastCoder.h | 56 - .../Pods/FastCoding/FastCoder/FastCoder.m | 2571 ----- MetaWear/Pods/FastCoding/LICENCE.md | 21 - MetaWear/Pods/FastCoding/README.md | 377 - .../Pods/Local Podspecs/MetaWear.podspec.json | 85 + .../MetaWearPrivate.podspec.json | 41 - MetaWear/Pods/Local Podspecs/Zip.podspec.json | 36 - MetaWear/Pods/Manifest.lock | 42 +- MetaWear/Pods/Pods.xcodeproj/project.pbxproj | 9209 +++++++---------- .../Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m | 5 + .../Bolts-Swift-iOS-prefix.pch} | 0 .../Bolts-Swift-iOS-umbrella.h | 4 + .../Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap | 6 + .../Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig | 9 + .../Info.plist | 2 +- .../Bolts-Swift-macOS-dummy.m | 5 + .../Bolts-Swift-macOS-prefix.pch} | 0 .../Bolts-Swift-macOS-umbrella.h} | 5 +- .../Bolts-Swift-macOS.modulemap | 6 + .../Bolts-Swift-macOS.xcconfig | 10 + .../Info.plist | 2 +- .../Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m | 5 + .../Bolts-Swift-tvOS-prefix.pch} | 0 .../Bolts-Swift-tvOS-umbrella.h | 16 + .../Bolts-Swift-tvOS.modulemap | 6 + .../Bolts-Swift-tvOS.xcconfig | 9 + .../Info.plist | 2 +- .../Bolts-Swift-watchOS-dummy.m | 5 + .../Bolts-Swift-watchOS-prefix.pch | 2 +- .../Bolts-Swift-watchOS-umbrella.h | 16 + .../Bolts-Swift-watchOS.modulemap | 6 + .../Bolts-Swift-watchOS.xcconfig | 9 + .../Info.plist | 2 +- .../Bolts-iOS/Bolts-iOS-dummy.m | 5 - .../Bolts-iOS/Bolts-iOS-umbrella.h | 24 - .../Bolts-iOS/Bolts-iOS.modulemap | 6 - .../Bolts-iOS/Bolts-iOS.xcconfig | 9 - .../Bolts-macOS/Bolts-macOS-dummy.m | 5 - .../Bolts-macOS/Bolts-macOS-umbrella.h | 24 - .../Bolts-macOS/Bolts-macOS.modulemap | 6 - .../Bolts-macOS/Bolts-macOS.xcconfig | 10 - .../Bolts-tvOS/Bolts-tvOS-dummy.m | 5 - .../Bolts-tvOS/Bolts-tvOS-umbrella.h | 24 - .../Bolts-tvOS/Bolts-tvOS.modulemap | 6 - .../Bolts-tvOS/Bolts-tvOS.xcconfig | 9 - .../FastCoding-iOS/FastCoding-iOS-dummy.m | 5 - .../FastCoding-iOS/FastCoding-iOS-umbrella.h | 17 - .../FastCoding-iOS/FastCoding-iOS.modulemap | 6 - .../FastCoding-iOS/FastCoding-iOS.xcconfig | 9 - .../FastCoding-macOS/FastCoding-macOS-dummy.m | 5 - .../FastCoding-macOS.modulemap | 6 - .../FastCoding-macOS.xcconfig | 10 - .../FastCoding-macOS/Info.plist | 26 - .../FastCoding-tvOS/FastCoding-tvOS-dummy.m | 5 - .../FastCoding-tvOS-umbrella.h | 17 - .../FastCoding-tvOS/FastCoding-tvOS.modulemap | 6 - .../FastCoding-tvOS/FastCoding-tvOS.xcconfig | 9 - .../FastCoding-tvOS/Info.plist | 26 - .../MetaWear-iOS/Info.plist | 26 + .../MetaWear-iOS/MetaWear-iOS-dummy.m | 5 + .../MetaWear-iOS-prefix.pch} | 0 .../MetaWear-iOS/MetaWear-iOS-umbrella.h | 4 + .../MetaWear-iOS.modulemap} | 2 +- .../MetaWear-iOS/MetaWear-iOS.xcconfig | 14 + .../MetaWear-macOS/Info.plist | 26 + .../MetaWear-macOS/MetaWear-macOS-dummy.m | 5 + .../MetaWear-macOS-prefix.pch} | 0 .../MetaWear-macOS/MetaWear-macOS-umbrella.h | 4 + .../MetaWear-macOS.modulemap} | 2 +- .../MetaWear-macOS/MetaWear-macOS.xcconfig | 15 + .../MetaWear-tvOS/Info.plist | 26 + .../MetaWear-tvOS/MetaWear-tvOS-dummy.m | 5 + .../MetaWear-tvOS-prefix.pch} | 0 .../MetaWear-tvOS/MetaWear-tvOS-umbrella.h | 4 + .../MetaWear-tvOS.modulemap} | 2 +- .../MetaWear-tvOS/MetaWear-tvOS.xcconfig | 14 + .../MetaWear-watchOS/Info.plist | 26 + .../MetaWear-watchOS/MetaWear-watchOS-dummy.m | 5 + .../MetaWear-watchOS-prefix.pch | 2 +- .../MetaWear-watchOS-umbrella.h | 16 + .../MetaWear-watchOS.modulemap | 6 + .../MetaWear-watchOS.xcconfig | 14 + .../MetaWearPrivate-iOS/Info.plist | 26 - .../MetaWearPrivate-iOS-dummy.m | 5 - .../MetaWearPrivate-iOS-umbrella.h | 226 - .../MetaWearPrivate-iOS.xcconfig | 11 - .../MetaWearPrivate-macOS/Info.plist | 26 - .../MetaWearPrivate-macOS-dummy.m | 5 - .../MetaWearPrivate-macOS-umbrella.h | 226 - .../MetaWearPrivate-macOS.xcconfig | 12 - .../MetaWearPrivate-tvOS/Info.plist | 26 - .../MetaWearPrivate-tvOS-dummy.m | 5 - .../MetaWearPrivate-tvOS-umbrella.h | 226 - .../MetaWearPrivate-tvOS.xcconfig | 11 - ...tionTestHost-iOS-acknowledgements.markdown | 32 +- ...grationTestHost-iOS-acknowledgements.plist | 38 +- ...aWearIntegrationTestHost-iOS-frameworks.sh | 67 +- ...taWearIntegrationTestHost-iOS-resources.sh | 18 +- ...WearIntegrationTestHost-iOS.debug.xcconfig | 12 +- ...arIntegrationTestHost-iOS.release.xcconfig | 12 +- ...earUnitTests-iOS-acknowledgements.markdown | 32 +- ...taWearUnitTests-iOS-acknowledgements.plist | 38 +- ...ar-iOS-MetaWearUnitTests-iOS-frameworks.sh | 67 +- ...ear-iOS-MetaWearUnitTests-iOS-resources.sh | 18 +- ...r-iOS-MetaWearUnitTests-iOS.debug.xcconfig | 12 +- ...iOS-MetaWearUnitTests-iOS.release.xcconfig | 12 +- ...onTestHost-macOS-acknowledgements.markdown | 32 +- ...ationTestHost-macOS-acknowledgements.plist | 38 +- ...earIntegrationTestHost-macOS-frameworks.sh | 67 +- ...WearIntegrationTestHost-macOS-resources.sh | 18 +- ...arIntegrationTestHost-macOS.debug.xcconfig | 12 +- ...IntegrationTestHost-macOS.release.xcconfig | 12 +- ...rUnitTests-macOS-acknowledgements.markdown | 32 +- ...WearUnitTests-macOS-acknowledgements.plist | 38 +- ...acOS-MetaWearUnitTests-macOS-frameworks.sh | 67 +- ...macOS-MetaWearUnitTests-macOS-resources.sh | 18 +- ...cOS-MetaWearUnitTests-macOS.debug.xcconfig | 12 +- ...S-MetaWearUnitTests-macOS.release.xcconfig | 12 +- ...ionTestHost-tvOS-acknowledgements.markdown | 32 +- ...rationTestHost-tvOS-acknowledgements.plist | 38 +- ...WearIntegrationTestHost-tvOS-frameworks.sh | 67 +- ...aWearIntegrationTestHost-tvOS-resources.sh | 18 +- ...earIntegrationTestHost-tvOS.debug.xcconfig | 12 +- ...rIntegrationTestHost-tvOS.release.xcconfig | 12 +- ...arUnitTests-tvOS-acknowledgements.markdown | 32 +- ...aWearUnitTests-tvOS-acknowledgements.plist | 38 +- ...-tvOS-MetaWearUnitTests-tvOS-frameworks.sh | 67 +- ...r-tvOS-MetaWearUnitTests-tvOS-resources.sh | 18 +- ...tvOS-MetaWearUnitTests-tvOS.debug.xcconfig | 12 +- ...OS-MetaWearUnitTests-tvOS.release.xcconfig | 12 +- .../Info.plist | 26 + ...atchOS Extension-acknowledgements.markdown | 40 + ...t-watchOS Extension-acknowledgements.plist | 78 + ...egrationTestHost-watchOS Extension-dummy.m | 5 + ...onTestHost-watchOS Extension-frameworks.sh | 155 + ...ionTestHost-watchOS Extension-resources.sh | 118 + ...ationTestHost-watchOS Extension-umbrella.h | 16 + ...nTestHost-watchOS Extension.debug.xcconfig | 11 + ...rationTestHost-watchOS Extension.modulemap | 6 + ...estHost-watchOS Extension.release.xcconfig | 11 + ...MetaWearIntegrationTests-iOS-frameworks.sh | 57 +- ...-MetaWearIntegrationTests-iOS-resources.sh | 18 +- ...etaWearIntegrationTests-iOS.debug.xcconfig | 10 +- ...aWearIntegrationTests-iOS.release.xcconfig | 10 +- ...taWearIntegrationTests-macOS-frameworks.sh | 57 +- ...etaWearIntegrationTests-macOS-resources.sh | 18 +- ...aWearIntegrationTests-macOS.debug.xcconfig | 10 +- ...earIntegrationTests-macOS.release.xcconfig | 10 +- ...etaWearIntegrationTests-tvOS-frameworks.sh | 57 +- ...MetaWearIntegrationTests-tvOS-resources.sh | 18 +- ...taWearIntegrationTests-tvOS.debug.xcconfig | 8 +- ...WearIntegrationTests-tvOS.release.xcconfig | 8 +- .../Zip-iOS/Zip-iOS.xcconfig | 9 +- .../Zip-macOS/Zip-macOS.xcconfig | 9 +- .../iOSDFULibrary-iOS/Info.plist | 2 +- .../iOSDFULibrary-iOS.xcconfig | 9 +- .../iOSDFULibrary-macOS/Info.plist | 2 +- .../iOSDFULibrary-macOS.xcconfig | 9 +- MetaWear/Pods/iOSDFULibrary/README.md | 7 + .../Implementation/DFUServiceDelegate.swift | 4 +- .../Implementation/Firmware/DFUFirmware.swift | 3 +- .../GenericDFU/DFUExecutor.swift | 8 +- .../GenericDFU/DFUPeripheral.swift | 31 +- .../GenericDFU/DFUPeripheralDelegate.swift | 13 +- .../Characteristics/DFUControlPoint.swift | 15 +- .../LegacyDFU/DFU/LegacyDFUExecutor.swift | 2 + .../Peripherals/LegacyDFUPeripheral.swift | 21 +- .../LegacyDFU/Services/LegacyDFUService.swift | 32 +- .../SecureDFUControlPoint.swift | 13 +- .../SecureDFU/DFU/SecureDFUExecutor.swift | 1 + .../DFUPackage/Manifest/Manifest.swift | 1 + .../Manifest/ManifestFirmwareInfo.swift | 1 + .../Manifest/SoftdeviceBootloaderInfo.swift | 1 + .../Classes/Utilities/Data.swift | 1 + .../Classes/Utilities/Double.swift | 1 + .../Utilities/Logging/LoggerDelegate.swift | 1 + .../Utilities/Logging/LoggerHelper.swift | 1 + .../Classes/Utilities/Streams/DFUStream.swift | 7 +- .../Utilities/Streams/DFUStreamBin.swift | 1 + .../Utilities/Streams/DFUStreamHex.swift | 1 + .../Utilities/Streams/DFUStreamZip.swift | 1 + MetaWear/Tests/Integration/ANCSTests.m | 158 - MetaWear/Tests/Integration/AccelConfig.h | 50 - MetaWear/Tests/Integration/AccelConfig.m | 82 - .../Tests/Integration/AccelerometerTests.m | 163 - MetaWear/Tests/Integration/AutomaticTests.m | 2115 ---- MetaWear/Tests/Integration/BMA255Tests.m | 127 - MetaWear/Tests/Integration/BMI160Tests.m | 300 - MetaWear/Tests/Integration/ButtonConfig.h | 48 - MetaWear/Tests/Integration/ButtonConfig.m | 75 - MetaWear/Tests/Integration/DFUTests.m | 181 - MetaWear/Tests/Integration/EnablingTests.m | 53 - .../Integration/IncrementingEventConfig.h | 49 - .../Integration/IncrementingEventConfig.m | 55 - MetaWear/Tests/Integration/MMA8452QTests.m | 257 - .../Tests/Integration/MagnetometerTests.m | 55 - .../Integration/ManualTests.swift} | 47 +- .../Integration/MetaWearSyntaxFriendly.h | 51 - MetaWear/Tests/Integration/MetaWearTest.h | 60 - MetaWear/Tests/Integration/MetaWearTest.m | 309 - MetaWear/Tests/Integration/SendBytesTest.m | 160 - .../Integration/TempLoggerConfiguration.h | 49 - .../Integration/TempLoggerConfiguration.m | 55 - MetaWear/Tests/Integration/Tests.swift | 121 + .../AppDelegate.m | 7 - .../Base.lproj/Main.storyboard | 24 +- .../ViewController.h | 13 - .../ViewController.m | 24 - .../Circular.imageset/Contents.json | 18 + .../Contents.json | 28 + .../Extra Large.imageset/Contents.json | 18 + .../Modular.imageset/Contents.json | 18 + .../Utilitarian.imageset/Contents.json | 18 + .../Assets.xcassets/Contents.json | 6 + .../ExtensionDelegate.swift | 50 + .../Info.plist | 36 + .../InterfaceController.swift | 31 + .../AppIcon.appiconset/Contents.json | 62 + .../Assets.xcassets/Contents.json | 6 + .../Base.lproj/Interface.storyboard | 15 + .../Info.plist | 33 + MetaWear/Tests/Unit/FirmwareTests.swift | 78 + MetaWear/Tests/Unit/MBLAutomaticTests.m | 362 - MetaWear/Tests/Unit/MBLConnectionTests.m | 247 - MetaWear/Tests/Unit/MBLConverstionTests.m | 124 - MetaWear/Tests/Unit/MBLEnabling.m | 400 - MetaWear/Tests/Unit/MBLLogDatabase.m | 175 - MetaWear/Tests/Unit/MBLMetaBootTests.m | 105 - MetaWear/Tests/Unit/MBLMetaWearTests.m | 66 - MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.h | 51 - MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.m | 122 - MetaWear/Tests/Unit/MBLRegisterTests.m | 461 - MetaWear/Tests/Unit/MetaWearSyntaxFriendly.h | 48 - MetaWear/UI/ScannerModel.swift | 171 + MetaWearPrivate.podspec | 33 - README.md | 60 +- StarterProject/Podfile | 6 +- StarterProject/Podfile.lock | 32 +- .../Pods/{Bolts => Bolts-Swift}/LICENSE | 4 +- StarterProject/Pods/Bolts-Swift/README.md | 164 + .../Sources/BoltsSwift/Errors.swift | 34 + .../Sources/BoltsSwift/Executor.swift | 127 + .../BoltsSwift/Task+ContinueWith.swift | 222 + .../Sources/BoltsSwift/Task+Delay.swift | 32 + .../Sources/BoltsSwift/Task+WhenAll.swift | 105 + .../Sources/BoltsSwift/Task+WhenAny.swift | 58 + .../Bolts-Swift/Sources/BoltsSwift/Task.swift | 308 + .../BoltsSwift/TaskCompletionSource.swift | 120 + .../Bolts/Bolts/Common/BFCancellationToken.h | 42 - .../Bolts/Bolts/Common/BFCancellationToken.m | 144 - .../Common/BFCancellationTokenRegistration.h | 29 - .../Common/BFCancellationTokenRegistration.m | 79 - .../Bolts/Common/BFCancellationTokenSource.h | 60 - .../Bolts/Common/BFCancellationTokenSource.m | 64 - .../Pods/Bolts/Bolts/Common/BFExecutor.h | 62 - .../Pods/Bolts/Bolts/Common/BFExecutor.m | 136 - .../Bolts/Bolts/Common/BFTask+Exceptions.h | 32 - .../Bolts/Bolts/Common/BFTask+Exceptions.m | 24 - .../Pods/Bolts/Bolts/Common/BFTask.h | 293 - .../Pods/Bolts/Bolts/Common/BFTask.m | 563 - .../Bolts/Common/BFTaskCompletionSource.h | 95 - .../Bolts/Common/BFTaskCompletionSource.m | 91 - .../Pods/Bolts/Bolts/Common/Bolts.h | 39 - .../Pods/Bolts/Bolts/Common/Bolts.m | 17 - StarterProject/Pods/Bolts/README.md | 683 -- .../Pods/FastCoding/FastCoder/FastCoder.h | 56 - .../Pods/FastCoding/FastCoder/FastCoder.m | 2571 ----- StarterProject/Pods/FastCoding/LICENCE.md | 21 - StarterProject/Pods/FastCoding/README.md | 377 - .../Pods/Local Podspecs/MetaWear.podspec.json | 87 +- StarterProject/Pods/Manifest.lock | 32 +- .../Pods/Pods.xcodeproj/project.pbxproj | 6824 +++--------- .../Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m | 5 + .../Bolts-Swift-iOS-prefix.pch | 0 .../Bolts-Swift-iOS-umbrella.h | 16 + .../Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap | 6 + .../Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig | 9 + .../Bolts-Swift-iOS/Info.plist | 26 + .../Bolts-Swift-macOS-dummy.m | 5 + .../Bolts-Swift-macOS-prefix.pch | 0 .../Bolts-Swift-macOS-umbrella.h} | 5 +- .../Bolts-Swift-macOS.modulemap | 6 + .../Bolts-Swift-macOS.xcconfig | 10 + .../Bolts-Swift-macOS/Info.plist | 26 + .../Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m | 5 + .../Bolts-Swift-tvOS-prefix.pch | 0 .../Bolts-Swift-tvOS-umbrella.h | 16 + .../Bolts-Swift-tvOS.modulemap | 6 + .../Bolts-Swift-tvOS.xcconfig | 9 + .../Bolts-Swift-tvOS/Info.plist | 26 + .../Bolts-iOS/Bolts-iOS-dummy.m | 5 - .../Bolts-iOS/Bolts-iOS-umbrella.h | 24 - .../Bolts-iOS/Bolts-iOS.modulemap | 6 - .../Bolts-iOS/Bolts-iOS.xcconfig | 9 - .../Target Support Files/Bolts-iOS/Info.plist | 26 - .../Bolts-macOS/Bolts-macOS-dummy.m | 5 - .../Bolts-macOS/Bolts-macOS-umbrella.h | 24 - .../Bolts-macOS/Bolts-macOS.modulemap | 6 - .../Bolts-macOS/Bolts-macOS.xcconfig | 10 - .../Bolts-macOS/Info.plist | 26 - .../Bolts-tvOS/Bolts-tvOS-dummy.m | 5 - .../Bolts-tvOS/Bolts-tvOS-umbrella.h | 24 - .../Bolts-tvOS/Bolts-tvOS.modulemap | 6 - .../Bolts-tvOS/Bolts-tvOS.xcconfig | 9 - .../Bolts-tvOS/Info.plist | 26 - .../FastCoding-iOS/FastCoding-iOS-dummy.m | 5 - .../FastCoding-iOS/FastCoding-iOS-umbrella.h | 17 - .../FastCoding-iOS/FastCoding-iOS.modulemap | 6 - .../FastCoding-iOS/FastCoding-iOS.xcconfig | 9 - .../FastCoding-iOS/Info.plist | 26 - .../FastCoding-macOS/FastCoding-macOS-dummy.m | 5 - .../FastCoding-macOS.modulemap | 6 - .../FastCoding-macOS.xcconfig | 10 - .../FastCoding-macOS/Info.plist | 26 - .../FastCoding-tvOS/FastCoding-tvOS-dummy.m | 5 - .../FastCoding-tvOS-umbrella.h | 17 - .../FastCoding-tvOS/FastCoding-tvOS.modulemap | 6 - .../FastCoding-tvOS/FastCoding-tvOS.xcconfig | 9 - .../FastCoding-tvOS/Info.plist | 26 - .../MBProgressHUD-iOS.xcconfig | 7 +- .../MBProgressHUD-tvOS.xcconfig | 7 +- .../MetaWear-iOS/Info.plist | 2 +- .../MetaWear-iOS/MetaWear-iOS-umbrella.h | 76 - .../MetaWear-iOS/MetaWear-iOS.xcconfig | 15 +- .../MetaWear-macOS/Info.plist | 2 +- .../MetaWear-macOS/MetaWear-macOS-umbrella.h | 76 - .../MetaWear-macOS/MetaWear-macOS.xcconfig | 15 +- .../MetaWear-tvOS/Info.plist | 2 +- .../MetaWear-tvOS/MetaWear-tvOS-umbrella.h | 76 - .../MetaWear-tvOS/MetaWear-tvOS.xcconfig | 15 +- ...Pods-Starter-iOS-acknowledgements.markdown | 30 +- .../Pods-Starter-iOS-acknowledgements.plist | 36 +- .../Pods-Starter-iOS-frameworks.sh | 63 +- .../Pods-Starter-iOS-resources.sh | 18 +- .../Pods-Starter-iOS.debug.xcconfig | 12 +- .../Pods-Starter-iOS.release.xcconfig | 12 +- ...ds-Starter-macOS-acknowledgements.markdown | 30 +- .../Pods-Starter-macOS-acknowledgements.plist | 36 +- .../Pods-Starter-macOS-frameworks.sh | 63 +- .../Pods-Starter-macOS-resources.sh | 18 +- .../Pods-Starter-macOS.debug.xcconfig | 12 +- .../Pods-Starter-macOS.release.xcconfig | 12 +- ...ods-Starter-tvOS-acknowledgements.markdown | 30 +- .../Pods-Starter-tvOS-acknowledgements.plist | 36 +- .../Pods-Starter-tvOS-frameworks.sh | 63 +- .../Pods-Starter-tvOS-resources.sh | 18 +- .../Pods-Starter-tvOS.debug.xcconfig | 12 +- .../Pods-Starter-tvOS.release.xcconfig | 12 +- StarterProject/Shared/AppDelegate.swift | 3 + .../Shared/DeviceConfiguration.swift | 21 - StarterProject/Shared/DeviceState.swift | 92 + .../Shared/DeviceViewController.swift | 90 +- .../Shared/MainTableViewController.swift | 68 +- .../Shared/ScanTableViewController.swift | 173 +- .../StarterProject.xcodeproj/project.pbxproj | 112 +- .../xcshareddata/IDEWorkspaceChecks.plist | 8 + StarterProject/macOS/AppDelegate.swift | 6 - StarterProject/macOS/ScanViewController.swift | 92 +- 815 files changed, 13352 insertions(+), 71860 deletions(-) create mode 100644 .gitmodules delete mode 100644 .travis.yml delete mode 100644 Docs/.gitignore delete mode 100644 Docs/Makefile delete mode 100755 Docs/gen_api_reference.sh delete mode 100644 Docs/source/_templates/layout.html delete mode 100644 Docs/source/accelerometer.rst delete mode 100644 Docs/source/accelerometerbmi160.rst delete mode 100644 Docs/source/accelerometermma8452q.rst delete mode 100755 Docs/source/advanced_features.rst delete mode 100644 Docs/source/ambient_light.rst delete mode 100644 Docs/source/ambientlightltr329.rst delete mode 100644 Docs/source/ancs.rst delete mode 100644 Docs/source/barometer.rst delete mode 100644 Docs/source/barometerbmp280.rst delete mode 100644 Docs/source/color_sensor.rst delete mode 100644 Docs/source/color_sensor_tcs3472.rst delete mode 100644 Docs/source/conf.py delete mode 100755 Docs/source/core_modules.rst delete mode 100644 Docs/source/data.rst delete mode 100644 Docs/source/data_processor.rst delete mode 100644 Docs/source/events.rst delete mode 100755 Docs/source/gen_api_reference.sh delete mode 100644 Docs/source/gpio.rst delete mode 100644 Docs/source/gyro.rst delete mode 100644 Docs/source/gyrobmi160.rst delete mode 100644 Docs/source/haptic.rst delete mode 100644 Docs/source/humidity.rst delete mode 100644 Docs/source/humidity_bme280.rst delete mode 100644 Docs/source/ibeacon.rst delete mode 100644 Docs/source/index.rst delete mode 100644 Docs/source/led.rst delete mode 100644 Docs/source/magnetometer.rst delete mode 100644 Docs/source/magnetometerbmm150.rst delete mode 100644 Docs/source/metawear_manager.rst delete mode 100755 Docs/source/metawearboard.rst delete mode 100644 Docs/source/neopixel.rst delete mode 100755 Docs/source/peripherals.rst delete mode 100755 Docs/source/project_setup.rst delete mode 100644 Docs/source/proximity.rst delete mode 100644 Docs/source/proximity_tsl2671.rst delete mode 100644 Docs/source/pushbutton.rst delete mode 100644 Docs/source/sensor_fusion.rst delete mode 100755 Docs/source/sensors.rst delete mode 100644 Docs/source/serial_passthrough.rst delete mode 100644 Docs/source/settings.rst delete mode 100644 Docs/source/temperature.rst delete mode 100644 Docs/source/timer.rst create mode 100644 MetaWear/AsyncUtils/MblMwDataSignal+Async.swift rename MetaWear/{Internal/Core/MBLModuleInfo.m => AsyncUtils/MblMwEvent+Async.swift} (70%) create mode 100644 MetaWear/AsyncUtils/MetaWear+Async.swift create mode 100644 MetaWear/AsyncUtils/MetaWear+LED.swift delete mode 100644 MetaWear/Classes/Categories/BFTask+MBLExtensions.h delete mode 100644 MetaWear/Classes/Categories/BFTask+MBLExtensions.m delete mode 100644 MetaWear/Classes/Core/MBLAnonymousEvent.m delete mode 100644 MetaWear/Classes/Core/MBLConstants.h delete mode 100644 MetaWear/Classes/Core/MBLConstants.m delete mode 100644 MetaWear/Classes/Core/MBLData.h delete mode 100644 MetaWear/Classes/Core/MBLData.m delete mode 100644 MetaWear/Classes/Core/MBLDataSample.h delete mode 100644 MetaWear/Classes/Core/MBLDataSample.m delete mode 100644 MetaWear/Classes/Core/MBLDataSwitch.h delete mode 100644 MetaWear/Classes/Core/MBLDataSwitch.m delete mode 100644 MetaWear/Classes/Core/MBLDeviceInfo.h delete mode 100644 MetaWear/Classes/Core/MBLDeviceInfo.m delete mode 100644 MetaWear/Classes/Core/MBLEntityEvent.h delete mode 100644 MetaWear/Classes/Core/MBLEntityEvent.m delete mode 100644 MetaWear/Classes/Core/MBLEntityModule.h delete mode 100644 MetaWear/Classes/Core/MBLEntityModule.m delete mode 100644 MetaWear/Classes/Core/MBLEvent.h delete mode 100644 MetaWear/Classes/Core/MBLEvent.m delete mode 100644 MetaWear/Classes/Core/MBLFilter.h delete mode 100644 MetaWear/Classes/Core/MBLFilter.m delete mode 100644 MetaWear/Classes/Core/MBLFirmwareUpdateInfo.h delete mode 100644 MetaWear/Classes/Core/MBLFirmwareUpdateInfo.m delete mode 100644 MetaWear/Classes/Core/MBLMetaWear.h delete mode 100644 MetaWear/Classes/Core/MBLMetaWear.m delete mode 100644 MetaWear/Classes/Core/MBLMetaWearManager.h delete mode 100644 MetaWear/Classes/Core/MBLMetaWearManager.m delete mode 100644 MetaWear/Classes/Core/MBLModule.h delete mode 100644 MetaWear/Classes/Core/MBLModule.m delete mode 100644 MetaWear/Classes/Core/MBLNumericData.h delete mode 100644 MetaWear/Classes/Core/MBLNumericData.m delete mode 100644 MetaWear/Classes/Core/MBLRegister.h delete mode 100644 MetaWear/Classes/Core/MBLRegister.m delete mode 100644 MetaWear/Classes/Core/MBLStringData.h delete mode 100644 MetaWear/Classes/Core/MBLStringData.m delete mode 100755 MetaWear/Classes/MetaWear.h delete mode 100644 MetaWear/Classes/Modules/ANCS/MBLANCS.h delete mode 100644 MetaWear/Classes/Modules/ANCS/MBLANCS.m delete mode 100644 MetaWear/Classes/Modules/ANCS/MBLANCSEventData.h delete mode 100644 MetaWear/Classes/Modules/ANCS/MBLANCSEventData.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MBLAccelerometerData.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MBLAccelerometerData.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MBLOrientationData.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MBLOrientationData.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MBLRMSAccelerometerData.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MBLRMSAccelerometerData.m delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.h delete mode 100644 MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.m delete mode 100644 MetaWear/Classes/Modules/AmbientLight/AmbientLightLTR329/MBLAmbientLightLTR329.h delete mode 100644 MetaWear/Classes/Modules/AmbientLight/AmbientLightLTR329/MBLAmbientLightLTR329.m delete mode 100644 MetaWear/Classes/Modules/AmbientLight/MBLAmbientLight.h delete mode 100644 MetaWear/Classes/Modules/AmbientLight/MBLAmbientLight.m delete mode 100644 MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBME280/MBLBarometerBME280.h delete mode 100644 MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBME280/MBLBarometerBME280.m delete mode 100644 MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBMP280/MBLBarometerBMP280.h delete mode 100644 MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBMP280/MBLBarometerBMP280.m delete mode 100644 MetaWear/Classes/Modules/Barometer/BarometerBosch/MBLBarometerBosch.h delete mode 100644 MetaWear/Classes/Modules/Barometer/BarometerBosch/MBLBarometerBosch.m delete mode 100644 MetaWear/Classes/Modules/Barometer/MBLBarometer.h delete mode 100644 MetaWear/Classes/Modules/Barometer/MBLBarometer.m delete mode 100644 MetaWear/Classes/Modules/Conductance/MBLConductance.h delete mode 100644 MetaWear/Classes/Modules/Conductance/MBLConductance.m delete mode 100644 MetaWear/Classes/Modules/GPIO/MBLGPIO.h delete mode 100644 MetaWear/Classes/Modules/GPIO/MBLGPIO.m delete mode 100644 MetaWear/Classes/Modules/GPIO/MBLGPIOPin.h delete mode 100644 MetaWear/Classes/Modules/GPIO/MBLGPIOPin.m delete mode 100644 MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.h delete mode 100644 MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.m delete mode 100644 MetaWear/Classes/Modules/Gyro/GyroBMI160/bmi160.h delete mode 100644 MetaWear/Classes/Modules/Gyro/MBLGyro.h delete mode 100644 MetaWear/Classes/Modules/Gyro/MBLGyro.m delete mode 100644 MetaWear/Classes/Modules/Gyro/MBLGyroData.h delete mode 100644 MetaWear/Classes/Modules/Gyro/MBLGyroData.m delete mode 100644 MetaWear/Classes/Modules/HapticBuzzer/MBLHapticBuzzer.h delete mode 100644 MetaWear/Classes/Modules/HapticBuzzer/MBLHapticBuzzer.m delete mode 100644 MetaWear/Classes/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280.h delete mode 100644 MetaWear/Classes/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280.m delete mode 100644 MetaWear/Classes/Modules/Hygrometer/MBLHygrometer.h delete mode 100644 MetaWear/Classes/Modules/Hygrometer/MBLHygrometer.m delete mode 100644 MetaWear/Classes/Modules/I2C/MBLI2C.h delete mode 100644 MetaWear/Classes/Modules/I2C/MBLI2C.m delete mode 100644 MetaWear/Classes/Modules/LED/MBLLED.h delete mode 100644 MetaWear/Classes/Modules/LED/MBLLED.m delete mode 100644 MetaWear/Classes/Modules/Magnetometer/MBLMagnetometer.h delete mode 100644 MetaWear/Classes/Modules/Magnetometer/MBLMagnetometer.m delete mode 100644 MetaWear/Classes/Modules/Magnetometer/MBLMagnetometerData.h delete mode 100644 MetaWear/Classes/Modules/Magnetometer/MBLMagnetometerData.m delete mode 100644 MetaWear/Classes/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150.h delete mode 100644 MetaWear/Classes/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150.m delete mode 100644 MetaWear/Classes/Modules/MechanicalSwitch/MBLMechanicalSwitch.h delete mode 100644 MetaWear/Classes/Modules/MechanicalSwitch/MBLMechanicalSwitch.m delete mode 100644 MetaWear/Classes/Modules/Neopixel/MBLNeopixel.h delete mode 100644 MetaWear/Classes/Modules/Neopixel/MBLNeopixel.m delete mode 100644 MetaWear/Classes/Modules/Neopixel/MBLNeopixelStrand.h delete mode 100644 MetaWear/Classes/Modules/Neopixel/MBLNeopixelStrand.m delete mode 100644 MetaWear/Classes/Modules/Photometer/MBLPhotometer.h delete mode 100644 MetaWear/Classes/Modules/Photometer/MBLPhotometer.m delete mode 100644 MetaWear/Classes/Modules/Photometer/MBLRGBData.h delete mode 100644 MetaWear/Classes/Modules/Photometer/MBLRGBData.m delete mode 100644 MetaWear/Classes/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472.h delete mode 100644 MetaWear/Classes/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472.m delete mode 100644 MetaWear/Classes/Modules/Proximity/MBLProximity.h delete mode 100644 MetaWear/Classes/Modules/Proximity/MBLProximity.m delete mode 100644 MetaWear/Classes/Modules/Proximity/ProximityTSL2671/MBLProximityTSL2671.h delete mode 100644 MetaWear/Classes/Modules/Proximity/ProximityTSL2671/MBLProximityTSL2671.m delete mode 100644 MetaWear/Classes/Modules/SensorFusion/MBLEulerAngleData.h delete mode 100644 MetaWear/Classes/Modules/SensorFusion/MBLEulerAngleData.m delete mode 100644 MetaWear/Classes/Modules/SensorFusion/MBLQuaternionData.h delete mode 100644 MetaWear/Classes/Modules/SensorFusion/MBLQuaternionData.m delete mode 100644 MetaWear/Classes/Modules/SensorFusion/MBLSensorFusion.h delete mode 100644 MetaWear/Classes/Modules/SensorFusion/MBLSensorFusion.m delete mode 100644 MetaWear/Classes/Modules/Serial/MBLI2CData.h delete mode 100644 MetaWear/Classes/Modules/Serial/MBLI2CData.m delete mode 100644 MetaWear/Classes/Modules/Serial/MBLSPIData.h delete mode 100644 MetaWear/Classes/Modules/Serial/MBLSPIData.m delete mode 100644 MetaWear/Classes/Modules/Serial/MBLSerial.h delete mode 100644 MetaWear/Classes/Modules/Serial/MBLSerial.m delete mode 100644 MetaWear/Classes/Modules/Settings/MBLSettings.h delete mode 100644 MetaWear/Classes/Modules/Settings/MBLSettings.m delete mode 100644 MetaWear/Classes/Modules/Temperature/MBLExternalThermistor.h delete mode 100644 MetaWear/Classes/Modules/Temperature/MBLExternalThermistor.m delete mode 100644 MetaWear/Classes/Modules/Temperature/MBLTemperature.h delete mode 100644 MetaWear/Classes/Modules/Temperature/MBLTemperature.m delete mode 100644 MetaWear/Classes/Modules/Timer/MBLTimer.h delete mode 100644 MetaWear/Classes/Modules/Timer/MBLTimer.m delete mode 100644 MetaWear/Classes/Modules/Timer/MBLTimerEvent.h delete mode 100644 MetaWear/Classes/Modules/Timer/MBLTimerEvent.m delete mode 100644 MetaWear/Classes/Modules/iBeacon/MBLiBeacon.h delete mode 100644 MetaWear/Classes/Modules/iBeacon/MBLiBeacon.m rename MetaWear/{Assets => Core}/.gitkeep (100%) rename MetaWear/{Internal/Core/MBLAnonymousEvent+Private.h => Core/Bridging.swift} (69%) rename MetaWear/{Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData+Private.h => Core/CBUUID.swift} (64%) rename MetaWear/{Internal/Modules/Temperature/MBLOnDieTemperature0.m => Core/DeviceInformation.swift} (67%) rename MetaWear/{Internal/Core/MBLLogger.m => Core/FirmwareBuild.swift} (54%) create mode 100644 MetaWear/Core/FirmwareServer.swift rename MetaWear/{Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData.h => Core/LogDelegate.swift} (67%) rename MetaWear/{Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QRMSFormat.m => Core/MblMwGattChar.swift} (56%) rename MetaWear/{Internal/Core/MBLDispatchQueue.m => Core/MetaBootFinder.swift} (52%) create mode 100644 MetaWear/Core/MetaWear.swift create mode 100644 MetaWear/Core/MetaWearData.swift create mode 100644 MetaWear/Core/MetaWearScanner.swift create mode 100644 MetaWear/Core/String+VersionCompare.swift delete mode 100644 MetaWear/Internal/Categories/BFTask+MBLPrivate.h delete mode 100644 MetaWear/Internal/Categories/BFTask+MBLPrivate.m delete mode 100644 MetaWear/Internal/Categories/MBLCategoryLoader.h delete mode 100644 MetaWear/Internal/Categories/MBLCategoryLoader.m delete mode 100644 MetaWear/Internal/Core/MBLAnalytics.h delete mode 100644 MetaWear/Internal/Core/MBLAnalytics.m delete mode 100644 MetaWear/Internal/Core/MBLConstants+Private.h delete mode 100644 MetaWear/Internal/Core/MBLConversion.h delete mode 100644 MetaWear/Internal/Core/MBLConversion.m delete mode 100644 MetaWear/Internal/Core/MBLData+Private.h delete mode 100644 MetaWear/Internal/Core/MBLDataSample+Private.h delete mode 100644 MetaWear/Internal/Core/MBLDependentData.h delete mode 100644 MetaWear/Internal/Core/MBLDependentData.m delete mode 100644 MetaWear/Internal/Core/MBLDispatchQueue.h delete mode 100644 MetaWear/Internal/Core/MBLDownloadOnlyEvent.h delete mode 100644 MetaWear/Internal/Core/MBLDownloadOnlyEvent.m delete mode 100644 MetaWear/Internal/Core/MBLEntityEvent+Private.h delete mode 100644 MetaWear/Internal/Core/MBLEntityModule+Private.h delete mode 100644 MetaWear/Internal/Core/MBLEvent+Private.h delete mode 100644 MetaWear/Internal/Core/MBLFilter+Private.h delete mode 100644 MetaWear/Internal/Core/MBLFirmwareBuild.h delete mode 100644 MetaWear/Internal/Core/MBLFirmwareBuild.m delete mode 100644 MetaWear/Internal/Core/MBLFormat.h delete mode 100644 MetaWear/Internal/Core/MBLFormat.m delete mode 100644 MetaWear/Internal/Core/MBLLogger.h delete mode 100644 MetaWear/Internal/Core/MBLMacAddressFormat.h delete mode 100644 MetaWear/Internal/Core/MBLMacAddressFormat.m delete mode 100644 MetaWear/Internal/Core/MBLMetaWear+Private.h delete mode 100644 MetaWear/Internal/Core/MBLMetaWearManager+Private.h delete mode 100644 MetaWear/Internal/Core/MBLModule+Private.h delete mode 100644 MetaWear/Internal/Core/MBLModuleInfo.h delete mode 100755 MetaWear/Internal/Core/MBLMovingAverage.h delete mode 100755 MetaWear/Internal/Core/MBLMovingAverage.m delete mode 100644 MetaWear/Internal/Core/MBLNonVolatileState.h delete mode 100644 MetaWear/Internal/Core/MBLNonVolatileState.m delete mode 100644 MetaWear/Internal/Core/MBLNumericData+Private.h delete mode 100644 MetaWear/Internal/Core/MBLNumericFormatter.h delete mode 100644 MetaWear/Internal/Core/MBLNumericFormatter.m delete mode 100644 MetaWear/Internal/Core/MBLRegister+Private.h delete mode 100644 MetaWear/Internal/Core/MBLStringData+Private.h delete mode 100644 MetaWear/Internal/Core/MBLTriggeredRead.h delete mode 100644 MetaWear/Internal/Core/MBLTriggeredRead.m delete mode 100644 MetaWear/Internal/DFU/MBLFirmwareUpdateManager.h delete mode 100644 MetaWear/Internal/DFU/MBLFirmwareUpdateManager.m delete mode 100644 MetaWear/Internal/Mocks/MBLBluetoothCentral.h delete mode 100644 MetaWear/Internal/Mocks/MBLBluetoothCentralMock.h delete mode 100644 MetaWear/Internal/Mocks/MBLBluetoothCentralMock.m delete mode 100644 MetaWear/Internal/Mocks/MBLBluetoothPeripheral.h delete mode 100644 MetaWear/Internal/Mocks/MBLBluetoothPeripheralMock.h delete mode 100644 MetaWear/Internal/Mocks/MBLBluetoothPeripheralMock.m delete mode 100644 MetaWear/Internal/Mocks/MBLDeviceLookup.h delete mode 100644 MetaWear/Internal/Mocks/MBLDeviceLookup.m delete mode 100644 MetaWear/Internal/Mocks/MBLMockPeripheralFactory.h delete mode 100644 MetaWear/Internal/Mocks/MBLMockPeripheralFactory.m delete mode 100644 MetaWear/Internal/Mocks/MBLMockUtils.h delete mode 100644 MetaWear/Internal/Mocks/MBLMockUtils.m delete mode 100644 MetaWear/Internal/Mocks/MBLModuleMock.h delete mode 100644 MetaWear/Internal/Mocks/MBLModuleMock.m delete mode 100644 MetaWear/Internal/Modules/ANCS/MBLANCSEventData+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160StepEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160StepEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschAxisReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschAxisReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatFormat.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatFormat.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFormat.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFormat.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationFormat.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationFormat.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschRMSFormat.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschRMSFormat.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MBLAccelerometer+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MBLAccelerometerData+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MBLOrientationData+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MBLRMSAccelerometerData+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerAxisReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerAxisReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerFreeFallEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerFreeFallEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q+Private.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QFormat.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QFormat.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QOrientationFormat.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QOrientationFormat.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QRMSFormat.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerOrientationEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerOrientationEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerShakeEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerShakeEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerTapEvent.h delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerTapEvent.m delete mode 100644 MetaWear/Internal/Modules/Accelerometer/MMA8452Q/mma8452q.h delete mode 100644 MetaWear/Internal/Modules/AmbientLight/MBLAmbientLight+Private.h delete mode 100644 MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBosch+Private.h delete mode 100644 MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicAltitudeEvent.h delete mode 100644 MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicAltitudeEvent.m delete mode 100644 MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicPressureEvent.h delete mode 100644 MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicPressureEvent.m delete mode 100644 MetaWear/Internal/Modules/Barometer/MBLBarometer+Private.h delete mode 100644 MetaWear/Internal/Modules/Command/MBLCommand.h delete mode 100644 MetaWear/Internal/Modules/Command/MBLCommand.m delete mode 100644 MetaWear/Internal/Modules/Conductance/MBLConductanceData.h delete mode 100644 MetaWear/Internal/Modules/Conductance/MBLConductanceData.m delete mode 100644 MetaWear/Internal/Modules/DataProcessor/MBLDataProcessor.h delete mode 100644 MetaWear/Internal/Modules/DataProcessor/MBLDataProcessor.m delete mode 100644 MetaWear/Internal/Modules/GPIO/MBLGPIO+Private.h delete mode 100644 MetaWear/Internal/Modules/GPIO/MBLGPIOData.h delete mode 100644 MetaWear/Internal/Modules/GPIO/MBLGPIOData.m delete mode 100644 MetaWear/Internal/Modules/GPIO/MBLGPIOPin+Private.h delete mode 100644 MetaWear/Internal/Modules/GPIO/MBLGPIOPinChangeEvent.h delete mode 100644 MetaWear/Internal/Modules/GPIO/MBLGPIOPinChangeEvent.m delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160+Private.h delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160AxisReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160AxisReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160Format.h delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160Format.m delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.h delete mode 100644 MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.m delete mode 100644 MetaWear/Internal/Modules/Gyro/MBLGyro+Private.h delete mode 100644 MetaWear/Internal/Modules/Gyro/MBLGyroData+Private.h delete mode 100644 MetaWear/Internal/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280PeriodicHumidityEvent.h delete mode 100644 MetaWear/Internal/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280PeriodicHumidityEvent.m delete mode 100644 MetaWear/Internal/Modules/Hygrometer/MBLHygrometer+Private.h delete mode 100644 MetaWear/Internal/Modules/LED/MBLLED+Private.h delete mode 100644 MetaWear/Internal/Modules/Logging/MBLLogging.h delete mode 100644 MetaWear/Internal/Modules/Logging/MBLLogging.m delete mode 100644 MetaWear/Internal/Modules/Logging/MBLLoggingV0.h delete mode 100644 MetaWear/Internal/Modules/Logging/MBLLoggingV0.m delete mode 100644 MetaWear/Internal/Modules/Logging/MBLLoggingV1.h delete mode 100644 MetaWear/Internal/Modules/Logging/MBLLoggingV1.m delete mode 100644 MetaWear/Internal/Modules/Logging/MBLLoggingV2.h delete mode 100644 MetaWear/Internal/Modules/Logging/MBLLoggingV2.m delete mode 100644 MetaWear/Internal/Modules/Macro/MBLMacro.h delete mode 100644 MetaWear/Internal/Modules/Macro/MBLMacro.m delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MBLMagnetometer+Private.h delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MBLMagnetometerData+Private.h delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150+Private.h delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150Format.h delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150Format.m delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h delete mode 100644 MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m delete mode 100644 MetaWear/Internal/Modules/Neopixel/MBLNeopixel+Private.h delete mode 100644 MetaWear/Internal/Modules/Neopixel/MBLNeopixelStrand+Private.h delete mode 100644 MetaWear/Internal/Modules/Photometer/MBLPhotometer+Private.h delete mode 100644 MetaWear/Internal/Modules/Photometer/MBLRGBData+Private.h delete mode 100644 MetaWear/Internal/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472Format.h delete mode 100644 MetaWear/Internal/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472Format.m delete mode 100644 MetaWear/Internal/Modules/Proximity/MBLProximity+Private.h delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLBitmaskEvent.h delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLBitmaskEvent.m delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLCorrectedFormat.h delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLCorrectedFormat.m delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLEulerAngleData+Private.h delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLEulerFormat.h delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLEulerFormat.m delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLGravityFormat.h delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLGravityFormat.m delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLQuaternionData+Private.h delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLQuaternionFormat.h delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLQuaternionFormat.m delete mode 100644 MetaWear/Internal/Modules/SensorFusion/MBLSensorFusion+Private.h delete mode 100644 MetaWear/Internal/Modules/Serial/MBLI2CData+Private.h delete mode 100644 MetaWear/Internal/Modules/Serial/MBLSPIData+Private.h delete mode 100644 MetaWear/Internal/Modules/Serial/MBLSerial+Private.h delete mode 100644 MetaWear/Internal/Modules/Settings/MBLSettings+Private.h delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLExternalThermistor0.h delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLExternalThermistor0.m delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLExternalThermistor1.h delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLExternalThermistor1.m delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLOnDieTemperature0.h delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLTemperature+Private.h delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLTemperatureV0.h delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLTemperatureV0.m delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLTemperatureV1.h delete mode 100644 MetaWear/Internal/Modules/Temperature/MBLTemperatureV1.m delete mode 100644 MetaWear/Internal/Modules/TestDebug/MBLTestDebug.h delete mode 100644 MetaWear/Internal/Modules/TestDebug/MBLTestDebug.m delete mode 100644 MetaWear/Internal/Modules/Timer/MBLTimer+Private.h delete mode 100644 MetaWear/Internal/Modules/Timer/MBLTimerEvent+Private.h create mode 160000 MetaWear/MetaWear-SDK-Cpp create mode 100644 MetaWear/MetaWear.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 MetaWear/Mocks/MetaWear+Mock.swift rename MetaWear/Pods/{Bolts => Bolts-Swift}/LICENSE (94%) create mode 100644 MetaWear/Pods/Bolts-Swift/README.md create mode 100644 MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Errors.swift create mode 100644 MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Executor.swift create mode 100644 MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+ContinueWith.swift create mode 100644 MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+Delay.swift create mode 100644 MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAll.swift create mode 100644 MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAny.swift create mode 100644 MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task.swift create mode 100644 MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/TaskCompletionSource.swift delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFCancellationToken.h delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFCancellationToken.m delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.h delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.m delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFTask+Exceptions.h delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFTask+Exceptions.m delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFTask.h delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFTask.m delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/Bolts.h delete mode 100644 MetaWear/Pods/Bolts/Bolts/Common/Bolts.m delete mode 100644 MetaWear/Pods/Bolts/README.md delete mode 100644 MetaWear/Pods/FastCoding/FastCoder/FastCoder.h delete mode 100755 MetaWear/Pods/FastCoding/FastCoder/FastCoder.m delete mode 100755 MetaWear/Pods/FastCoding/LICENCE.md delete mode 100644 MetaWear/Pods/FastCoding/README.md create mode 100644 MetaWear/Pods/Local Podspecs/MetaWear.podspec.json delete mode 100644 MetaWear/Pods/Local Podspecs/MetaWearPrivate.podspec.json delete mode 100644 MetaWear/Pods/Local Podspecs/Zip.podspec.json create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m rename MetaWear/Pods/Target Support Files/{Bolts-iOS/Bolts-iOS-prefix.pch => Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch} (100%) rename StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch => MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-umbrella.h (62%) create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig rename MetaWear/Pods/Target Support Files/{FastCoding-iOS => Bolts-Swift-iOS}/Info.plist (96%) create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m rename MetaWear/Pods/Target Support Files/{Bolts-macOS/Bolts-macOS-prefix.pch => Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch} (100%) rename MetaWear/Pods/Target Support Files/{FastCoding-macOS/FastCoding-macOS-umbrella.h => Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h} (59%) create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig rename MetaWear/Pods/Target Support Files/{Bolts-iOS => Bolts-Swift-macOS}/Info.plist (96%) create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m rename MetaWear/Pods/Target Support Files/{Bolts-tvOS/Bolts-tvOS-prefix.pch => Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch} (100%) create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig rename MetaWear/Pods/Target Support Files/{Bolts-macOS => Bolts-Swift-tvOS}/Info.plist (96%) create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-dummy.m rename StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch => MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-prefix.pch (83%) create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-umbrella.h create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.modulemap create mode 100644 MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.xcconfig rename MetaWear/Pods/Target Support Files/{Bolts-tvOS => Bolts-Swift-watchOS}/Info.plist (96%) delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-umbrella.h delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.modulemap delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-umbrella.h delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.modulemap delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-umbrella.h delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap delete mode 100644 MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-umbrella.h delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-macOS/Info.plist delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-umbrella.h delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/FastCoding-tvOS/Info.plist create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-iOS/Info.plist create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-dummy.m rename MetaWear/Pods/Target Support Files/{FastCoding-iOS/FastCoding-iOS-prefix.pch => MetaWear-iOS/MetaWear-iOS-prefix.pch} (100%) rename StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch => MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-umbrella.h (63%) rename MetaWear/Pods/Target Support Files/{MetaWearPrivate-iOS/MetaWearPrivate-iOS.modulemap => MetaWear-iOS/MetaWear-iOS.modulemap} (56%) create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.xcconfig create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-macOS/Info.plist create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-dummy.m rename MetaWear/Pods/Target Support Files/{FastCoding-macOS/FastCoding-macOS-prefix.pch => MetaWear-macOS/MetaWear-macOS-prefix.pch} (100%) rename StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch => MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-umbrella.h (63%) rename MetaWear/Pods/Target Support Files/{MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.modulemap => MetaWear-macOS/MetaWear-macOS.modulemap} (55%) create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.xcconfig create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-tvOS/Info.plist create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-dummy.m rename MetaWear/Pods/Target Support Files/{FastCoding-tvOS/FastCoding-tvOS-prefix.pch => MetaWear-tvOS/MetaWear-tvOS-prefix.pch} (100%) rename StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch => MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-umbrella.h (63%) rename MetaWear/Pods/Target Support Files/{MetaWearPrivate-macOS/MetaWearPrivate-macOS.modulemap => MetaWear-tvOS/MetaWear-tvOS.modulemap} (55%) create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.xcconfig create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-watchOS/Info.plist create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-dummy.m rename StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch => MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-prefix.pch (83%) create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-umbrella.h create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS.modulemap create mode 100644 MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/Info.plist delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-umbrella.h delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/Info.plist delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-umbrella.h delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.xcconfig delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/Info.plist delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-dummy.m delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-umbrella.h delete mode 100644 MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.xcconfig create mode 100644 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Info.plist create mode 100644 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.markdown create mode 100644 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.plist create mode 100644 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m create mode 100755 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh create mode 100755 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-resources.sh create mode 100644 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h create mode 100644 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig create mode 100644 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap create mode 100644 MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig delete mode 100644 MetaWear/Tests/Integration/ANCSTests.m delete mode 100644 MetaWear/Tests/Integration/AccelConfig.h delete mode 100644 MetaWear/Tests/Integration/AccelConfig.m delete mode 100644 MetaWear/Tests/Integration/AccelerometerTests.m delete mode 100644 MetaWear/Tests/Integration/AutomaticTests.m delete mode 100644 MetaWear/Tests/Integration/BMA255Tests.m delete mode 100644 MetaWear/Tests/Integration/BMI160Tests.m delete mode 100644 MetaWear/Tests/Integration/ButtonConfig.h delete mode 100644 MetaWear/Tests/Integration/ButtonConfig.m delete mode 100644 MetaWear/Tests/Integration/DFUTests.m delete mode 100644 MetaWear/Tests/Integration/EnablingTests.m delete mode 100644 MetaWear/Tests/Integration/IncrementingEventConfig.h delete mode 100644 MetaWear/Tests/Integration/IncrementingEventConfig.m delete mode 100644 MetaWear/Tests/Integration/MMA8452QTests.m delete mode 100644 MetaWear/Tests/Integration/MagnetometerTests.m rename MetaWear/{Classes/Core/MBLAnonymousEvent.h => Tests/Integration/ManualTests.swift} (61%) delete mode 100644 MetaWear/Tests/Integration/MetaWearSyntaxFriendly.h delete mode 100644 MetaWear/Tests/Integration/MetaWearTest.h delete mode 100644 MetaWear/Tests/Integration/MetaWearTest.m delete mode 100644 MetaWear/Tests/Integration/SendBytesTest.m delete mode 100644 MetaWear/Tests/Integration/TempLoggerConfiguration.h delete mode 100644 MetaWear/Tests/Integration/TempLoggerConfiguration.m create mode 100644 MetaWear/Tests/Integration/Tests.swift delete mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-iOS/ViewController.h delete mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-iOS/ViewController.m create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Contents.json create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Contents.json create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/ExtensionDelegate.swift create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Info.plist create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/InterfaceController.swift create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Assets.xcassets/Contents.json create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Base.lproj/Interface.storyboard create mode 100644 MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Info.plist create mode 100644 MetaWear/Tests/Unit/FirmwareTests.swift delete mode 100644 MetaWear/Tests/Unit/MBLAutomaticTests.m delete mode 100644 MetaWear/Tests/Unit/MBLConnectionTests.m delete mode 100644 MetaWear/Tests/Unit/MBLConverstionTests.m delete mode 100644 MetaWear/Tests/Unit/MBLEnabling.m delete mode 100644 MetaWear/Tests/Unit/MBLLogDatabase.m delete mode 100644 MetaWear/Tests/Unit/MBLMetaBootTests.m delete mode 100644 MetaWear/Tests/Unit/MBLMetaWearTests.m delete mode 100644 MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.h delete mode 100644 MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.m delete mode 100644 MetaWear/Tests/Unit/MBLRegisterTests.m delete mode 100644 MetaWear/Tests/Unit/MetaWearSyntaxFriendly.h create mode 100644 MetaWear/UI/ScannerModel.swift delete mode 100644 MetaWearPrivate.podspec rename StarterProject/Pods/{Bolts => Bolts-Swift}/LICENSE (94%) create mode 100644 StarterProject/Pods/Bolts-Swift/README.md create mode 100644 StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Errors.swift create mode 100644 StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Executor.swift create mode 100644 StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+ContinueWith.swift create mode 100644 StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+Delay.swift create mode 100644 StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAll.swift create mode 100644 StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAny.swift create mode 100644 StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task.swift create mode 100644 StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/TaskCompletionSource.swift delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFCancellationToken.h delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFCancellationToken.m delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFExecutor.h delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFExecutor.m delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFTask+Exceptions.h delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFTask+Exceptions.m delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFTask.h delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFTask.m delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/Bolts.h delete mode 100644 StarterProject/Pods/Bolts/Bolts/Common/Bolts.m delete mode 100644 StarterProject/Pods/Bolts/README.md delete mode 100644 StarterProject/Pods/FastCoding/FastCoder/FastCoder.h delete mode 100755 StarterProject/Pods/FastCoding/FastCoder/FastCoder.m delete mode 100755 StarterProject/Pods/FastCoding/LICENCE.md delete mode 100644 StarterProject/Pods/FastCoding/README.md create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m rename MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-prefix.pch => StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch (100%) create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-umbrella.h create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Info.plist create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m rename MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-prefix.pch => StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch (100%) rename StarterProject/Pods/Target Support Files/{FastCoding-macOS/FastCoding-macOS-umbrella.h => Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h} (59%) create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Info.plist create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m rename MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-prefix.pch => StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch (100%) create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig create mode 100644 StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Info.plist delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-dummy.m delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-umbrella.h delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.modulemap delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.xcconfig delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-iOS/Info.plist delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-dummy.m delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-umbrella.h delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.modulemap delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.xcconfig delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-macOS/Info.plist delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-dummy.m delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-umbrella.h delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.xcconfig delete mode 100644 StarterProject/Pods/Target Support Files/Bolts-tvOS/Info.plist delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-dummy.m delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-umbrella.h delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.xcconfig delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-iOS/Info.plist delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-dummy.m delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.xcconfig delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-macOS/Info.plist delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-dummy.m delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-umbrella.h delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.xcconfig delete mode 100644 StarterProject/Pods/Target Support Files/FastCoding-tvOS/Info.plist delete mode 100644 StarterProject/Shared/DeviceConfiguration.swift create mode 100644 StarterProject/Shared/DeviceState.swift create mode 100644 StarterProject/StarterProject.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..72416bc --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "MetaWear/MetaWear-SDK-Cpp"] + path = MetaWear/MetaWear-SDK-Cpp + url = git@github.com:mbientlab/MetaWear-SDK-Cpp.git diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index b9bb676..0000000 --- a/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ -osx_image: xcode8 -language: objective-c - -before_install: - - gem update fastlane --no-ri --no-rdoc --no-document - -env: - global: - - WORKSPACE="MetaWear/MetaWear.xcworkspace" - - DERIVED_DATA_PATH="./MetaWear/Build" - - matrix: - - DESTINATION="platform=iOS Simulator,name=iPhone 5s,OS=10.0" SCHEME="MetaWearUnitTests-iOS" RUN_COVERAGE="YES" - - DESTINATION="platform=macOS,arch=x86_64" SCHEME="MetaWearUnitTests-macOS" RUN_COVERAGE="NO" - - DESTINATION="platform=tvOS Simulator,name=Apple TV 1080p" SCHEME="MetaWearUnitTests-tvOS" RUN_COVERAGE="NO" - -script: - - scan --workspace "$WORKSPACE" --scheme "$SCHEME" --destination "$DESTINATION" --skip_build --derived_data_path "$DERIVED_DATA_PATH" --code_coverage "$RUN_COVERAGE" - -after_success: - - if [ $RUN_COVERAGE == "YES" ]; then - bash <(curl -s https://codecov.io/bash) -J '^MetaWear$' -D "$DERIVED_DATA_PATH"; - fi diff --git a/Docs/.gitignore b/Docs/.gitignore deleted file mode 100644 index e5020d8..0000000 --- a/Docs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build/ -/html/ diff --git a/Docs/Makefile b/Docs/Makefile deleted file mode 100644 index 009ceca..0000000 --- a/Docs/Makefile +++ /dev/null @@ -1,223 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) - $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don\'t have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " epub3 to make an epub3" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -.PHONY: dirhtml -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/MetaWeariOSAPI.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/MetaWeariOSAPI.qhc" - -.PHONY: applehelp -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/MetaWeariOSAPI" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/MetaWeariOSAPI" - @echo "# devhelp" - -.PHONY: epub -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: epub3 -epub3: - $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 - @echo - @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." - -.PHONY: latex -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/Docs/gen_api_reference.sh b/Docs/gen_api_reference.sh deleted file mode 100755 index 99ada0b..0000000 --- a/Docs/gen_api_reference.sh +++ /dev/null @@ -1,5 +0,0 @@ -appledoc -p "MetaWear iOS/macOS/tvOS API 2.10.0" --project-version "2.10.0" -c "MBIENTLAB INC" --company-id com.mbientlab --no-create-docset --no-repeat-first-par --ignore .m -o . ../MetaWear/Classes -open html/index.html - -make html -open build/html/index.html diff --git a/Docs/source/_templates/layout.html b/Docs/source/_templates/layout.html deleted file mode 100644 index 1356878..0000000 --- a/Docs/source/_templates/layout.html +++ /dev/null @@ -1,15 +0,0 @@ -{% extends "!layout.html" %} - -{%- block extrahead %} - - - - -{% endblock %} diff --git a/Docs/source/accelerometer.rst b/Docs/source/accelerometer.rst deleted file mode 100644 index 4f50f7e..0000000 --- a/Docs/source/accelerometer.rst +++ /dev/null @@ -1,61 +0,0 @@ -.. highlight:: swift - -Accelerometer -============= - -The MetaWear board comes with a builtin accelerometer. It's configured via properties on the `MBLAccelerometer `_ class. - -To meet specific needs, different MetaWear models have different accelerometer sensors, so the ``MBLAccelerometer`` class is actually a generic abstraction of all accelerometers. You can up-cast to one of our derived accelerometer objects in order to access advanced features. - -Raw Data --------- - -One thing common to all accelerometers is the ability to access raw x, y, and z axis data - -:: - - device.accelerometer?.sampleFrequency = 100 - device.accelerometer?.dataReadyEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("X = \(obj.x), Y = \(obj.y), Z = \(obj.z)") - } - }) - -Raw RMS Data ------------- - -You can also access the root mean square (RMS) of the accelerometer data - -:: - - device.accelerometer?.rmsDataReadyEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("RMS = \(obj.rms)") - } - }) - -Single Axis Data ----------------- - -You can also access a single axis of accelerometer data. - -:: - - device.accelerometer?.xAxisReadyEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("x-axis = \(obj.value)") - } - }) - -Cast to Derived Class ---------------------- - -To use advanced accelerometer features it's necessary to figure out exactly what accelerometer your MetaWear has. - -:: - - if let accelerometerMMA8452Q = device.accelerometer as? MBLAccelerometerMMA8452Q { - - } else if let accelerometerBMI160 = device.accelerometer as? MBLAccelerometerBMI160 { - - } diff --git a/Docs/source/accelerometerbmi160.rst b/Docs/source/accelerometerbmi160.rst deleted file mode 100644 index c2864da..0000000 --- a/Docs/source/accelerometerbmi160.rst +++ /dev/null @@ -1,86 +0,0 @@ -.. highlight:: swift - -AccelerometerBMI160 -=================== - -This specific accelerometer is configured via properties on the `MBLAccelerometerBMI160 `_ class. This section shows how to use its advanced features. - -Notify on Tap -------------- - -Events can be generated for a single or double tap along any of the axis'. - -:: - - accelerometerBMI160.tapEvent.type = .single - accelerometerBMI160.tapEvent.startNotificationsAsync(handler: { (obj, error) in - print("Tapped Me!") - }) - -Notify on Orientation Change ----------------------------- - -Events can be generated when an orientation change of the MetaWear occurs. - -:: - - accelerometerBMI160.orientationEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Flipped Me: \(obj)") - } - }) - -Notify when Placed Flat ------------------------ - -Events can be generated when the MetaWear is set down on a flat surface, or removed. - -:: - - accelerometerBMI160.flatEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print(obj.isFlat ? "Flat" : "Not Flat") - } - }) - -Notify on Step --------------- - -Events can be generated when a step pattern is detected. - -:: - - accelerometerBMI160.stepEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Nice Step!") - } - }) - -Notify on Freefall ------------------- - -Events can be generated when free-fall is detected. - -:: - - accelerometerBMI160.lowOrHighGEvent.highGEnabledAxis = .X - accelerometerBMI160.lowOrHighGEvent.lowGEnabled = true; - accelerometerBMI160.lowOrHighGEvent.startNotificationsAsync(handler: { (obj, error) in - print("Dropped Me!") - }) - -Notify on Shock ---------------- - -Events can be generated when high acceleration (shock) is detected. - -:: - - accelerometerBMI160.fullScaleRange = .range16G; - - accelerometerBMI160.lowOrHighGEvent.lowGEnabled = false; - accelerometerBMI160.lowOrHighGEvent.highGThreshold = 8.0; - accelerometerBMI160.lowOrHighGEvent.highGEnabledAxis = .X; - accelerometerBMI160.lowOrHighGEvent.startNotificationsAsync(handler: { (obj, error) in - print("8G Shock in X-Axis!") - }) diff --git a/Docs/source/accelerometermma8452q.rst b/Docs/source/accelerometermma8452q.rst deleted file mode 100644 index cc0e891..0000000 --- a/Docs/source/accelerometermma8452q.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. highlight:: swift - -AccelerometerMMA8452Q -===================== - -This specific accelerometer is configured via properties on the `MBLAccelerometerMMA8452Q `_ class. This section shows how to use its advanced features. - -Notify on Tap -------------- - -Events can be generated for a single or double tap along any of the axis'. - -:: - - accelerometerMMA8452Q.tapDetectionAxis = .X - accelerometerMMA8452Q.tapType = .single - accelerometerMMA8452Q.tapEvent.startNotificationsAsync(handler: { (obj, error) in - print("Tapped Me!") - }) - -Notify on Orientation Change ----------------------------- - -Events can be generated when an orientation change of the MetaWear occurs. - -:: - - accelerometerMMA8452Q.orientationEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Flipped Me: \(obj)") - } - }) - -Notify on Free Fall -------------------- - -Events can be generated when the MetaWear goes into free fall. - -:: - - accelerometerMMA8452Q.freeFallEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Dropped Me!") - } - }) - -Notify on Shake ---------------- - -Events can be generated when you shake the MetaWear. - -:: - - accelerometerMMA8452Q.shakeEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Yeah YOU! Shook me all night long") - } - }) - diff --git a/Docs/source/advanced_features.rst b/Docs/source/advanced_features.rst deleted file mode 100755 index fa8d41f..0000000 --- a/Docs/source/advanced_features.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. highlight:: swift - -Advanced Features -================= - -High Frequency Streaming ------------------------- - -Some developers may want to stream data from multiple motion sensors simultaneously or individually at frequencies higher than 100Hz. To accommodate this use case, accelerometer and gyro have a packed output mode that combines 3 data samples into 1 ble packet increasing the data throughput by 3x. Simply enable notifications on the ``packedDataReadEvent`` to use this feature. - -Persistent Configuration ------------------------- - -``MBLRestorable`` object containing custom settings and events that are programmed to the MetaWear and preserved between disconnects and app termination. - -Use ``setConfigurationAsync`` to assign a new configuration object to this MetaWear. This only needs to be called once, likely after you confirm the device from a scanning screen or such. Upon calling it will erase all non-volatile memory the device (which requires disconnect), then perform reset, once its comes back online we will connect and invoke the runOnDeviceBoot method. All calls in that method are persisted device side so after any future reset these settings will be applied automatically. - -The properties of the configuration objected are automatically persisted to disk after interactions with the board. If, however, you make changes to various module setting without acutally interacting, then it may be useful to call ``synchronizeAsync`` to force a save to disk. - -:: - - device.setConfigurationAsync(DeviceConfiguration()).success { _ in - print("Settings successfully applied") - }.failure { error in - print("Something went wrong, we should try again: \(error)") - } - -Updating Firmware ------------------ - -The firmware running on the MetaWear is periodically updated by MbientLab with additional features and bug-fixes. To update, you first call a MetaWear API which puts the device in a special bootloader mode, then use the Nordic Semiconductor `IOS-DFU-Librarly `_ to upload the new firmware. We recommend looking at our `Sample App `_ for an example on how to integrate. - -This is one API you can call WITHOUT being connected, there are some cases where you can't connect because the firmware is too old, but you still need to be able to update it! - -:: - - device.prepareForFirmwareUpdateAsync().success { result in - var selectedFirmware: DFUFirmware? - if result.firmwareUrl.pathExtension.caseInsensitiveCompare("zip") == .orderedSame { - selectedFirmware = DFUFirmware(urlToZipFile: result.firmwareUrl) - } else { - selectedFirmware = DFUFirmware(urlToBinOrHexFile: result.firmwareUrl, urlToDatFile: nil, type: .application) - } - self.initiator = DFUServiceInitiator(centralManager: result.centralManager, target: result.target) - let _ = self.initiator?.with(firmware: selectedFirmware!) - self.initiator?.forceDfu = true // We also have the DIS which confuses the DFU library - self.initiator?.logger = self // - to get log info - self.initiator?.delegate = self // - to be informed about current state and errors - self.initiator?.peripheralSelector = self - self.initiator?.progressDelegate = self // - to show progress bar - - self.dfuController = self.initiator?.start() - }.failure { error in - print("Something went wrong, we should try again in 60 seconds: \(error)") - } diff --git a/Docs/source/ambient_light.rst b/Docs/source/ambient_light.rst deleted file mode 100644 index 15c0f65..0000000 --- a/Docs/source/ambient_light.rst +++ /dev/null @@ -1,18 +0,0 @@ -.. highlight:: swift - -Ambient Light -============= - -Some MetaWear boards comes with a builtin ambient light sensor. It's configured via properties on the `MBLAmbientLight `_ class. - -To meet specific needs, different MetaWear models have different ambient light sensors, so the ``MBLAmbientLight`` class is actually a generic abstraction of all ambient light sensors. You can up-cast to one of our derived ambient light sensor objects in order to access advanced features. - -Cast to Derived Class ---------------------- - -There is currently nothing in the generic ``MBLAmbientLight`` class, so you need to use the `MBLAmbientLightLTR329 `_ derived class. - -:: - - if let ambientLightLTR329 = device.ambientLight as? MBLAmbientLightLTR329 { - } diff --git a/Docs/source/ambientlightltr329.rst b/Docs/source/ambientlightltr329.rst deleted file mode 100644 index e978e93..0000000 --- a/Docs/source/ambientlightltr329.rst +++ /dev/null @@ -1,24 +0,0 @@ -.. highlight:: swift - -AmbientLightLTR329 -================== - -This specific ambient light sensor is configured via properties on the `MBLAmbientLightLTR329 `_ class. This section shows how to use its advanced features. - -Periodic Readings ------------------ - -This ambient light sensor has a built in timer, so you can program it directly to return periodic data. - -:: - - ambientLightLTR329.gain = .gain1X; - // Have the sensor measure over 100ms - ambientLightLTR329.integrationTime = .integration100ms; - // Perform a new measurement each second - ambientLightLTR329.measurementRate = .rate1000ms; - ambientLightLTR329.periodicIlluminance.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("ambient light: \(obj.value.doubleValue) lux") - } - }) diff --git a/Docs/source/ancs.rst b/Docs/source/ancs.rst deleted file mode 100644 index 22ef7af..0000000 --- a/Docs/source/ancs.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. highlight:: swift - -ANCS -==== - -Apple Notification Center Service (ANCS) gives MetaWear a simple and convenient way to access many kinds of notifications that are generated on iOS devices. See the `Apple Documentation `_ for more information. - -NOTE: The first time you invoke one of these functions, the iOS device will ask the user to Pair with the MetaWear board, Pairing is required for ANCS to work. After Pairing, the iOS device will always keep an active connection to the MetaWear when in range to ensure prompt delievery of ANCS messages. - -Notification Events -------------------- - -It's simple to have the MetaWear flash when a notification comes in. - -:: - - let ancs = device.ancs?.event(withCategoryIds: .any) - ancs?.programCommandsToRunOnEventAsync { - device.led?.flashColorAsync(.red, withIntensity: 1.0) - } - -Filter Notification Events --------------------------- - -You may want to be notified when you get a message from a special someone: - -:: - - let ancs = device.ancs?.event(withCategoryIds: .any, - eventIds: .notificationAdded, - eventFlags: .init(rawValue: 0), - attributeId: .title, - attributeData: "John Doe") - ancs?.programCommandsToRunOnEventAsync { - device.led?.flashColorAsync(.green, withIntensity: 1.0, numberOfFlashes: 5) - device.hapticBuzzer?.startHapticAsync(dutyCycle: 255, pulseWidth: 500, completion: nil) - } diff --git a/Docs/source/barometer.rst b/Docs/source/barometer.rst deleted file mode 100644 index 44fc235..0000000 --- a/Docs/source/barometer.rst +++ /dev/null @@ -1,40 +0,0 @@ -.. highlight:: swift - -Barometer -========= - -Some MetaWear boards comes with a builtin barometer. It's configured via properties on the `MBLBarometer `_ class. - -To meet specific needs, different MetaWear models have different barometers, so the ``MBLBarometer`` class is actually a generic abstraction of all barometers. You can up-cast to one of our derived barometer objects in order to access advanced features. - -Pressure Reading ----------------- - -One thing common to all ambient light sensors is the ability to measure the ambient air pressure. - -:: - - device.barometer?.pressure.readAsync().success { result in - print("pressure: \(result.value.doubleValue) pascals") - } - -Altitude Reading ----------------- - -Often times what you really want is an estimation of current altitude above sea level. Since it's a complex non-linear function to get altitude from pressure, we have it built right in. - -:: - - device.barometer?.altitude.readAsync().success { result in - print("altitude: \(result.value.doubleValue) meters") - } - -Cast to Derived Class ---------------------- - -To use advanced barometer features it's necessary to figure out exactly what barometer your MetaWear has. - -:: - - if let barometerBMP280 = device.barometer as? MBLBarometerBMP280 { - } diff --git a/Docs/source/barometerbmp280.rst b/Docs/source/barometerbmp280.rst deleted file mode 100644 index 5a75ed0..0000000 --- a/Docs/source/barometerbmp280.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. highlight:: swift - -BarometerBMP280 -=============== - -This specific barometer is configured via properties on the `MBLBarometerBMP280 `_ class. This section shows how to use its advanced features. - -Periodic Readings ------------------ - -This barometer has a built in timer, so you can program it to directly perform periodic reads. - -:: - - // Use the oversampling mode to balance power vs performance - barometerBMP280.pressureOversampling = .ultraHighResolution; - // Use the builtin average filter to eliminate short term noise - barometerBMP280.hardwareAverageFilter = .average16; - // This determines how long the device will sleep between samples, - // so it's not directly the period, since the sample itself can - // take several ms to complete. - barometerBMP280.standbyTime = .standby0_5; - - // Or you can use periodicPressure below - barometerBMP280.periodicAltitude.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("altitude: \(obj.value.doubleValue) meters") - } - }) diff --git a/Docs/source/color_sensor.rst b/Docs/source/color_sensor.rst deleted file mode 100644 index 730073a..0000000 --- a/Docs/source/color_sensor.rst +++ /dev/null @@ -1,18 +0,0 @@ -.. highlight:: swift - -Color Sensor -============ - -Similiar to :doc:`ambient light sensors `, color sensors are responsive to light, however they are typically manufactured to only capture red, green, and blue light though some models are responsive to all visible light. MetaEnvironment boards come equipped with a builtin photometer (color sensor). It's configured via properties on the `MBLPhotometer `_ class. - -To meet specific needs, different MetaWear models may have different photometers, so the ``MBLPhotometer`` class is actually a generic abstraction of all photometers. You can up-cast to one of our derived photometers objects in order to access advanced features. - - -Cast to Derived Class ---------------------- - -There is currently nothing in the generic ``MBLPhotometer`` class, so you need to use the `MBLPhotometerTCS3472 `_ derived class. -:: - - if let photometerTCS3472 = device.photometer as? MBLPhotometerTCS3472 { - } diff --git a/Docs/source/color_sensor_tcs3472.rst b/Docs/source/color_sensor_tcs3472.rst deleted file mode 100644 index e658287..0000000 --- a/Docs/source/color_sensor_tcs3472.rst +++ /dev/null @@ -1,37 +0,0 @@ -.. highlight:: swift - -Color Sensor TCS3472 -==================== - -This specific color sensor is configured via properties on the `MBLPhotometerTCS3472 `_ class. This section shows how to use its advanced features. - - -Configuration -------------- -The color sensor has 2 configurable parameters that affect the data range, resultion, and sensitivity. - -================ ============================================ -Parameter Description -================ ============================================ -Gain Analog signal scale -Integration Time Amount of time spent to aggregate adc values -================ ============================================ - -There is also a white illuminator LED next to the sensor that can be used to provide additional light if the surrounding area is too dark. - -:: - - // set gain to 4x, integration time to 4.8ms, - // keep illuminator led off - photometerTCS3472.gain = .gain4X - photometerTCS3472.integrationTime = 4.8 - -ADC Values ----------- -The red, green, blue, and clear ADC values measured by the TCS3472 device are represented by the `MBLRGBData `_ class. - -:: - - photometerTCS3472.color?.readAsync().success { result in - print("color adc = \(result)") - } diff --git a/Docs/source/conf.py b/Docs/source/conf.py deleted file mode 100644 index cf4dd63..0000000 --- a/Docs/source/conf.py +++ /dev/null @@ -1,287 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# MetaWear iOS API documentation build configuration file, created by -# sphinx-quickstart on Sat Apr 16 02:20:42 2016. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = ['sphinx.ext.autosectionlabel'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = 'MetaWear iOS/macOS/tvOS API' -copyright = '2017, MbientLab' -author = 'MbientLab' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '2.10.0' -# The full version, including alpha/beta/rc tags. -release = '2.10.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'sphinx_rtd_theme' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. -# " v documentation" by default. -#html_title = 'MetaWear iOS API v2.3.2' - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (relative to this directory) to use as a favicon of -# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not None, a 'Last updated on:' timestamp is inserted at every page -# bottom, using the given strftime format. -# The empty string is equivalent to '%b %d, %Y'. -#html_last_updated_fmt = None - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr', 'zh' -#html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# 'ja' uses this config value. -# 'zh' user can custom change `jieba` dictionary path. -#html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -#html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'MetaWeariOSAPIdoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', - -# Latex figure (float) alignment -#'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'MetaWeariOSAPI.tex', 'MetaWear iOS/macOS/tvOS API Documentation', - 'MbientLab', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'metaweariosapi', 'MetaWear iOS/macOS/tvOS API Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'MetaWeariOSAPI', 'MetaWear iOS/macOS/tvOS API Documentation', - author, 'MetaWeariOSAPI', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False diff --git a/Docs/source/core_modules.rst b/Docs/source/core_modules.rst deleted file mode 100755 index bc66489..0000000 --- a/Docs/source/core_modules.rst +++ /dev/null @@ -1,13 +0,0 @@ -Core Modules -============ -The MetaWear firmware comes with several powerful features that enable developers to fine-tune their board configuration for specific use cases. -Outside of the :doc:`sensor_fusion` module (MetaMotion only), all of these features are available on every board. - -.. toctree:: - :hidden: - :maxdepth: 1 - - data_processor - sensor_fusion - settings - timer diff --git a/Docs/source/data.rst b/Docs/source/data.rst deleted file mode 100644 index 72e9ad2..0000000 --- a/Docs/source/data.rst +++ /dev/null @@ -1,51 +0,0 @@ -.. highlight:: swift - -Data -==== - -Synchronous data from MetaWear modules are exposed as `MBLData `_ objects. You can think of these objects as a piece data sitting on the MetaWear that can be read whenever you want. These objects have abstractions for performing one time or periodic reads. - -In this section we will explain the generic features available to all data objects by going over a couple of useful examples. Note that detailed documentation for each module's events can be found in the individual module sections below. - -Read ----- - -One of the most basic use cases is to simply receive the data on your Apple device. - -:: - - if let pin0 = device.gpio?.pins.first { - pin0.digitalValue?.readAsync().success { result in - print("Pin Value: \(result)") - } - } - -Periodic Reads --------------- - -By periodically reading data, you conceptually turn it into an asynchronous event. The periodic read function allows you to create `MBLEvent `_ from `MBLData `_. This helps to explain the fundamental difference between event and data objects: events tell you when they have data (asynchronous), whereas data objects wait to be read (synchronous). - -:: - - if let pin0 = device.gpio?.pins.first { - let periodicPinValue = pin0.analogAbsolute?.periodicRead(withPeriod: 100) - periodicPinValue?.startNotificationsAsync(handler: { (obj, error) in - print("Analog Value: \(obj)") - }) - } - -Triggered Reads ---------------- - -Another interesting feature is the ability to have an ``MBLEvent`` trigger a read of data. This allows you to do things like read data on button press. - -:: - - // NOTE: This i2c register is just an example, it might not return anything on your exact board - if let whoami = device.serial?.data(atDeviceAddress: 0x1C, registerAddress: 0x0D, length: 1) as? MBLData { - let event = device.mechanicalSwitch?.switchUpdateEvent.readData(onEvent: whoami) - event?.startNotificationsAsync(handler: { (obj, error) in - print("\(obj)") - }) - } - diff --git a/Docs/source/data_processor.rst b/Docs/source/data_processor.rst deleted file mode 100644 index d41c20f..0000000 --- a/Docs/source/data_processor.rst +++ /dev/null @@ -1,216 +0,0 @@ -.. highlight:: swift - -Data Processor -============== - -Filtered data is represented by the `MBLFilter `_ class. You create filter objects by calling one of the filters methods on the `MBLEvent `_ object (which serves as the input). - -Since `MBLFilter `_ derives from `MBLEvent `_, all of the features available to events are available to filters, and filters can be chained together to perform complex processing. - -Summation (accumulator) ------------------------ - -One simple filter is the accumulator, which simply adds together all the input values. - -:: - - let switchPressCount = device.mechanicalSwitch?.switchUpdateEvent.summationOfEvent() - switchPressCount?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Switch Change Count: \(obj)") - } - }) - -Average -------- - -A very useful DSP technique for filtering out noise is averaging. This is how use the averaging filter: - -The depth parameter determines how many pervious samples get averaged together. This means the first output won't occur until N input events occur. - -NOTE: This uses a recursive average technique so the answers are approximate. -NOTE: This works fastest when depth is a power of 2 - -:: - - if let pin0 = device.gpio?.pins.first { - let periodicPinValue = pin0.analogAbsolute?.periodicRead(withPeriod: 100) - let averagePinValue = periodicPinValue?.averageOfEvent(withDepth: 8) - averagePinValue?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Analog Value: \(obj)") - } - }) - } - -Comparison ----------- - -You may want to conditionally ignore some values coming from sensors. Here is an example: - -:: - - if let pin0 = device.gpio?.pins.first { - let periodicPinValue = pin0.analogAbsolute?.periodicRead(withPeriod: 100) - let filteredPinValue = periodicPinValue?.compare(using: .greaterThan, data: [1.0], output: .value) - filteredPinValue?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Pin Value Over 1.0V: \(obj)") - } - }) - } - -Or you may want to quickly see what range a sensor value is in. Here is an example: - -:: - - if let pin0 = device.gpio?.pins.first { - let periodicPinValue = pin0.analogAbsolute?.periodicRead(withPeriod: 100) - let filteredPinValue = periodicPinValue?.compare(using: .lessThan, data: [0.5, 1.0, 2.0], output: .zone) - filteredPinValue?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - // Zone Map - // 0 == [0, 0.5) - // 1 == [0.5, 1.0) - // 2 == [1.0, 2.0) - // 3 == [2.0, inf) - print("Pin in zone: \(obj)") - } - }) - } - -Modify ------- - -You can apply basic math operations to data as well. We support add/subtract/multiply/divide, and the others listed in `MBLArithmeticOperation `_. Here are some examples of how you might initialize them: - -:: - - let temp = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) - let doubleTemp = temp?.modifyEvent(using: .multiply, withData: 2) - let halfTemp = temp?.modifyEvent(using: .divide, withData: 2) - let fiftyLessTemp = temp?.modifyEvent(using: .subtract, withData: 50.0) - let absTemp = fiftyLessTemp?.modifyEvent(using: .absoluteValue, withData: 0) - -Periodic Sampling ------------------ - -If you want control over the frequency an event occurs you can use a periodic sampling filter. It simply stores the most recent value from the input and passes it through at a predefined interval. This is useful for taking high frequency events, and logging them at a lower frequency. - -Here we accumulate RMS data from the accelerometer and log it every 20 seconds: - -:: - - // The rmsDataReadyEvent event will occur at the accelerometer sample frequency (i.e. every 10ms) - let runningRMS = device.accelerometer?.rmsDataReadyEvent.summationOfEvent() - // Since we don't need absolute precision, we can just log the value every 20 seconds - // and recreate an approximate graph later - let periodicRMS = runningRMS?.periodicSample(ofEvent: 20000) - periodicRMS?.startLoggingAsync() - -Differential Sampling ---------------------- - -Similar to Periodic Sampling, but instead of passing through the last value of the input directly, it reports the difference between the last value reported and the current value. - -:: - - // The rmsDataReadyEvent event will occur at the accelerometer sample frequency (i.e. every 10ms) - let runningRMS = device.accelerometer?.rmsDataReadyEvent.summationOfEvent() - // Since we don't need absolute precision, we can just log the differnce every 20 seconds - // and recreate an approximate graph later - let differentialRMS = runningRMS?.differentialSample(ofEvent: 20000) - differentialRMS?.startLoggingAsync() - -Delay ------ - -The delay filter buffers N samples of input, and after N input events are generated, the filter passes through the first input. - -:: - - let delayedSwitch = device.mechanicalSwitch?.switchUpdateEvent.delayOfEvent(withCount: 3) - delayedSwitch?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print(obj) - } - }) - -Pulse ------ - -The pulse filter detect pulses in the input signal. It works on a simple principal that a pulse occurs when a signal goes over a given threshold for N samples. - -:: - - let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) - let pulseEvent = temperatureEvent?.pulseDetectorOfEvent(withThreshold: 25.0, width: 10, output: .area) - pulseEvent?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Temp Pulsed!: \(obj)") - } - }) - -Conditional Data Switch ------------------------ - -This filter can pass data through or not, also you may programmatically activate or deactivate the switch. - -:: - - let presses = device.mechanicalSwitch?.switchUpdateEvent.conditionalDataSwitch(true) - presses?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print(obj) - } - }) - // Turn off the filter after 3 seconds - DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { - presses?.resetConditionalAsync(false) - } - -Counting Data Switch --------------------- - -This filter can pass N samples through, and all subsequent events are blocked. - -:: - - let twoPresses = device.mechanicalSwitch?.switchUpdateEvent.countingDataSwitch(2) - twoPresses?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print(obj) - } - }) - -Delta ------ - -This filter monitors a signal and notifies when the signal value changes by a given delta. - -:: - - let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) - // Get notifications when it changes by 2 degrees C - let deltaTemperatureEvent = temperatureEvent?.changeOfEvent(byDelta: 3.0, output: .absolute) - deltaTemperatureEvent?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Temp Changed!: \(obj)") - } - }) - -Threshold ---------- - -This filter monitors a signal and notifies when it crosses a given threshold. It also takes a hysteresis value to prevent multiple events if the signal oscillates right on the threshold. - -:: - - let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) - // Get notifications when it crosses 25 degrees C - let thresholdEvent = temperatureEvent?.change(ofEventAcrossThreshold: 25.0, hysteresis: 2.0, output: .absolute) - thresholdEvent?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Temp Crossed Threshold!: \(obj)") - } - }) diff --git a/Docs/source/events.rst b/Docs/source/events.rst deleted file mode 100644 index 622d176..0000000 --- a/Docs/source/events.rst +++ /dev/null @@ -1,89 +0,0 @@ -.. highlight:: swift - -Events -====== - -Asynchronous data from MetaWear modules are exposed via `MBLEvent `_ objects. Being asynchronous, event objects will tell you when their data is ready, so you subscribe and then sit back and wait for notifications to come in. These event objects could be generated from stimuli in the physical world or simply a periodic read: - -* A trigger based on when/if the device is dropped -* Reading a heart rate sensor through GPIO and triggering when the pin value changes -* Periodic reading of data (i.e. accelerometer sample every 5ms) - -In this section we will explain the generic features available to all events by going over a couple of useful examples. Note that detailed documentation for each module's events can be found in the individual module sections below. - -Notifications -------------- - -One of the most basic use cases is to simply receive the data on your Apple device. This is done via blocks within your app. When an event occurs you get a callback with an event specific object containing all relevant data. In this example, we setup a trigger that notifies us when there is a change detected in the value of GPIO pin 0 and logs a message upon receipt of that notification. - -Events will continue to stream in until the device is disconnected, or you call ``stopNotificationsAsync`` - -You can check if an event is currently streaming by checking the ``isNotifying`` property. - -:: - - if let pin0 = device.gpio?.pins.first { - pin0.changeEvent?.startNotificationsAsync(handler: { (obj, error) in - print("Cool, the pin changed: " + String(describing: obj)) - }) - } - -:: - - pin0.changeEvent?.stopNotificationsAsync() - pin0.changeEvent?.isNotifying() - -Command -------- - -In order to free the MetaWear from needing constant phone connection, we can program the device to perform certain actions when an event occurs. It's a basic "If then " paradigm. The magic being, all logic is stored on the MetaWear, so it works even with the Apple device disconnected. - -The device will continue to perform on until you either reset the device or call ``programCommandsToRunOnEventAsync`` - -You can check if an event is currently programmed by checking the ``hasCommands`` property. - -**WARNING** -There are some important details to consider when using this feature. At the lowest level all MetaWear API calls end up being a stream of bytes passed over the BLE connection. The command system works by executing the block provided to ``programCommandsToRunOnEventAsync`` right away, but instead of directly sending bytes they are encoded for execution later on. This means you can't use API's with callbacks inside the block since they are not really executed. - -:: - - // Flash the LED when you press the button - device.mechanicalSwitch?.switchUpdateEvent.programCommandsToRunOnEventAsync { - device.led?.flashColorAsync(.red, withIntensity: 1.0, numberOfFlashes: 3) - } - -:: - - device.mechanicalSwitch?.switchUpdateEvent.eraseCommandsToRunOnEventAsync() - device.mechanicalSwitch?.switchUpdateEvent.hasCommands() - -Logging -------- - -Another common use case is "offline" (aka Apple device not connected) logging of event data. It allows you put this data directly into the MetaWear flash memory. Since this memory is non-volatile your data is safe even if the MetaWear crashes or the battery dies. There is room for around 14,000 entries, just call ``startLoggingAsync`` on the event of interest. - -Once you start logging you can disconnect and even kill the app. Later on, re-connect and get the log by calling the download method. - -:: - - device.mechanicalSwitch?.switchUpdateEvent.startLoggingAsync() - -:: - - device.mechanicalSwitch?.switchUpdateEvent.downloadLogAndStopLoggingAsync(true, progressHandler: { number in - // Update progress bar, as this can take anywhere from one minute - // to a couple hours to download a full log - }).success({ result in - // array contains all the log entries - for entry in result { - print("Entry: " + String(describing: entry)) - } - }) - -Filters -------- - -Many of the events generated are raw sensor output, to help make sense of this data, MetaWear has several digital signal processing (DSP) functions builtin. To use filters you call one of the "create filter" functions on an event object and it will return a new event object! When you turn on notifications or logging of this new event, you will see the filtered data. - -Since the filters work at the firmware level, they too function when the device is disconnected. See the section on :doc:`data_processor` for details. - diff --git a/Docs/source/gen_api_reference.sh b/Docs/source/gen_api_reference.sh deleted file mode 100755 index 99ada0b..0000000 --- a/Docs/source/gen_api_reference.sh +++ /dev/null @@ -1,5 +0,0 @@ -appledoc -p "MetaWear iOS/macOS/tvOS API 2.10.0" --project-version "2.10.0" -c "MBIENTLAB INC" --company-id com.mbientlab --no-create-docset --no-repeat-first-par --ignore .m -o . ../MetaWear/Classes -open html/index.html - -make html -open build/html/index.html diff --git a/Docs/source/gpio.rst b/Docs/source/gpio.rst deleted file mode 100644 index f192219..0000000 --- a/Docs/source/gpio.rst +++ /dev/null @@ -1,84 +0,0 @@ -.. highlight:: swift - -GPIO -==== - -Using the general purpose input/output (GPIO) pins on the MeatWear, you can extend it in near endless ways. You can programmatically set or clear a pin's state, or reads its digital or analog value. - -The `MBLGPIO `_ module exposes a "pins" property which contains an array of `MBLGPIOPin `_ objects. The index into the array represents the logical pin number as found in the `MetaWear Product Spec `_. - -Read Digital ------------- - -To check the digital (0 or 1) value of a pin, just get a pointer to the corresponding `MBLGPIOPin `_ object and read its ``digitalValue`` property. - -:: - - if let pin0 = device.gpio?.pins.first { - pin0.digitalValue?.readAsync().success { result in - print("Pin State: \(result)") - } - } - -Read Analog ------------ - -To check the absolute analog value (in volts) of a pin (expect around 0 to 3.0 volts), just get a pointer to the corresponding `MBLGPIOPin `_ object and read its ``analogAbsolute`` property: - -To check the analog value relative to the supply voltage of a pin [0, 1.0], just get a pointer to the corresponding `MBLGPIOPin `_ object and read its ``analogRatio`` property: - -:: - - if let pin0 = device.gpio?.pins.first { - pin0.analogAbsolute?.readAsync().success { result in - print("Pin Voltage: \(result.value.doubleValue)") - } - } - -:: - - if let pin0 = device.gpio?.pins.first { - pin0.analogRatio?.readAsync().success { result in - print("Pin Ratio: \(result.value.doubleValue)") - } - } - -Set/Clear Pin -------------- - -To set the digital value of a pin: - -:: - - if let pin0 = device.gpio?.pins.first { - pin0.setToDigitalValueAsync(true) - } - -Notify on Pin Change --------------------- - -Events can be generated when the digital state of a pin changes: - -:: - - if let pin0 = device.gpio?.pins.first { - pin0.changeType = .rising - pin0.setConfiguration(.nopull) - pin0.changeEvent?.startNotificationsAsync(handler: { (obj, error) in - print("Cool, the pin changed: " + String(describing: obj)) - }) - } - -Enable Pin ----------- - -To save power, sensors connected to a GPIO pin may optionally have an "enable" switch connected to another pin. Pulling up or down this enable pin can programmatically turn off the sensor to save power. By setting this value we will automatically enable the sensor just long enought to get a sample. - -:: - - if let pin0 = device.gpio?.pins.first { - let analogRatio = pin0.analogRatio(withPullUp: nil, pullDown: 2, readDelay: 200) - analogRatio.readAsync().success { result in - print("With Enable: \(result.value)") - } - } diff --git a/Docs/source/gyro.rst b/Docs/source/gyro.rst deleted file mode 100644 index 48b468a..0000000 --- a/Docs/source/gyro.rst +++ /dev/null @@ -1,45 +0,0 @@ -.. highlight:: swift - -Gyro -==== - -Some MetaWear boards comes with a builtin gyroscope. It's configured via properties on the `MBLGyro `_ class. - -To meet specific needs, different MetaWear models have different gyroscope sensors, so the ``MBLGyro`` class is actually a generic abstraction of all gyroscopes. You can up-cast to one of our derived gyroscope objects in order to access advanced features. - -Raw Data --------- - -One thing common to all gyroscopes is the ability to access raw x, y, and z axis rotational data - -:: - - device.gyro?.sampleFrequency = 100.0 - device.gyro?.dataReadyEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("X = \(obj.x), Y = \(obj.y), Z = \(obj.z)") - } - }) - -Single Axis Data ----------------- - -You can also access a single axis of gyroscope data. - -:: - - device.gyro?.xAxisReadyEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("x-axis: \(obj.value.doubleValue)") - } - }) - -Cast to Derived Class ---------------------- - -To use advanced gyroscope features it's necessary to figure out exactly what gyroscope your MetaWear has. - -:: - - if let gyroBMI160 = device.gyro as? MBLGyroBMI160 { - } diff --git a/Docs/source/gyrobmi160.rst b/Docs/source/gyrobmi160.rst deleted file mode 100644 index c031f29..0000000 --- a/Docs/source/gyrobmi160.rst +++ /dev/null @@ -1,15 +0,0 @@ -.. highlight:: swift - -GyroBMI160 -========== - -This specific gyroscope is configured via properties on the `MBLGyroBMI160 `_ class. This section shows how to use its advanced features. - -Full Scale Range ----------------- - -You can adjust the sensitivity of the gyroscope based on your needs. - -:: - - gyroBMI160.fullScaleRange = .range125 diff --git a/Docs/source/haptic.rst b/Docs/source/haptic.rst deleted file mode 100644 index 720c9e1..0000000 --- a/Docs/source/haptic.rst +++ /dev/null @@ -1,24 +0,0 @@ -.. highlight:: swift - -Haptic -====== - -The MetaWear can be outfitted with either a haptic motor or a buzzer, encapsulated with the `MBLHapticBuzzer `_ object - -Start Haptic ------------- - -The haptic motor has 2 parameters. First, duty cycle [0, 255], which corresponds to strength of vibration. Second, pulse width, or how long to buzz (units in ms). - -:: - - device.hapticBuzzer?.startHapticAsync(dutyCycle: 255, pulseWidth: 500, completion: nil) - -Start Buzzer ------------- - -The buzzer has just a pulse width parameter, or how long to buzz (units in ms). - -:: - - device.hapticBuzzer?.startBuzzerAsync(pulseWidth: 500, completion: nil) diff --git a/Docs/source/humidity.rst b/Docs/source/humidity.rst deleted file mode 100644 index d00089a..0000000 --- a/Docs/source/humidity.rst +++ /dev/null @@ -1,18 +0,0 @@ -.. highlight:: swift - -Humidity -======== - -Electronic humidity sensors (hydrometer) measure humidity by measuring the capacitance or resistance of air samples. This sensor comes packaged with the `BME280 `_ integrated environmental unit, only available on MetaEnvironment boards, and is accessible through the `MBLHygrometerBME280 `_ interface. - -To meet specific needs, different MetaWear models may have different hydrometers, so the ``MBLHygrometer`` class is actually a generic abstraction of all hydrometers. You can up-cast to one of our derived hydrometer objects in order to access advanced features. - - -Cast to Derived Class ---------------------- - -There is currently nothing in the generic ``MBLHygrometer`` class, so you need to use the `MBLHygrometerBME280 `_ derived class. -:: - - if let hygrometerBME280 = device.hygrometer as? MBLHygrometerBME280 { - } diff --git a/Docs/source/humidity_bme280.rst b/Docs/source/humidity_bme280.rst deleted file mode 100644 index 3cdd5d6..0000000 --- a/Docs/source/humidity_bme280.rst +++ /dev/null @@ -1,28 +0,0 @@ -.. highlight:: swift - -Humidity BME280 -=============== - -This specific color sensor is configured via properties on the `MBLHygrometerBME280 `_ class. This section shows how to use its advanced features. - - -Configuration -------------- -For humidity measurements, oversampling can be used to reduce the noise. Oversampling modes are set with `humidityOversampling `_ property. - -:: - - // set oversampling to 16x - hygrometerBME280.humidityOversampling = .oversample16X - -Humidity Data -------------- -Relative humidity data is a float value from 0 to 100 percent. - -:: - - hygrometerBME280.periodicHumidity.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Humidity: \(obj.value.doubleValue)") - } - }) diff --git a/Docs/source/ibeacon.rst b/Docs/source/ibeacon.rst deleted file mode 100644 index fe35432..0000000 --- a/Docs/source/ibeacon.rst +++ /dev/null @@ -1,27 +0,0 @@ -.. highlight:: swift - -iBeacon -======= - -iBeacon is an indoor positioning system that uses a particular Bluetooth low-energy payload to make your device visible to the Apple CoreLocation framework. See the `Apple Documentation `_ for more information. Functionality is encapsulated in the `MBLiBeacon `_ class. - -Start iBeacon -------------- - -To start using iBeacon set up the different properties and call setBeaconOnAsync(true) - -:: - - // Easily create your own uuid by running 'uuidgen' in the terminal - device.iBeacon?.setUuid(CBUUID(string: "A1589B8C-3E02-4112-AA3C-54850F5C970A")) - device.iBeacon?.setMajor(10) - device.iBeacon?.setMinor(20) - device.iBeacon?.setCalibratedReceiverPower(-55) - device.iBeacon?.setTransmitPower(.power0dBm) - device.iBeacon?.setFrequency(100) - device.iBeacon?.setBeaconOnAsync(true) - - // YOU MUST DISCONNECT BEFORE IT WILL BECOME A VISIBLE BEACON - device.disconnectAsync().success { _ in - print("It's Beacon Time!") - } diff --git a/Docs/source/index.rst b/Docs/source/index.rst deleted file mode 100644 index 654f381..0000000 --- a/Docs/source/index.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. MetaWear iOS/macOS/tvOS API documentation master file, created by - sphinx-quickstart on Sat Apr 16 02:20:42 2016. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -MetaWear iOS/macOS/tvOS API -=========================== - -The MetaWear iOS/macOS/tvOS API provides a simple way to communicate with your MetaWear boards using Apple devices. This guide will cover the functionality of the API. If you are interested in the finer details of the library, the source code is available on our `GitHub page `_ and API documentation is on our `website `_. - - -Getting Started ---------------- - -This guide assumes you have fundamental knowledge of iOS, macOS, or tvOS programming especially `Swift `_ and `Closures `_. - -If you are not developing for the Apple ecosystem, we also offer an `Android API `_ and `C++ API `_. - -.. toctree:: - :hidden: - :maxdepth: 1 - - project_setup - metawearboard - metawear_manager - data - events - core_modules - sensors - peripherals - advanced_features diff --git a/Docs/source/led.rst b/Docs/source/led.rst deleted file mode 100644 index e7b1ef9..0000000 --- a/Docs/source/led.rst +++ /dev/null @@ -1,39 +0,0 @@ -.. highlight:: swift - -LED -=== - -The MetaWear board comes with a builtin RGB LED, encapsulated with the `MBLLED `_ object. - -Set Color ---------- - -This snippet will set the LED to a solid red color. - -:: - - device.led?.setLEDColorAsync(.red, withIntensity: 1.0) - -Flash Color ------------ - -This snippet will flash the LED a red color indefinitely. - -:: - - device.led?.flashColorAsync(.red, withIntensity: 1.0) - -Or you might find it beneficial to flash only a few times. - -:: - - device.led?.flashColorAsync(.red, withIntensity: 1.0, numberOfFlashes: 3) - -Turning Off ------------ - -This snippet will completely shut down the LED. - -:: - - device.led?.setLEDOnAsync(false, withOptions: 1) diff --git a/Docs/source/magnetometer.rst b/Docs/source/magnetometer.rst deleted file mode 100644 index b78b4ee..0000000 --- a/Docs/source/magnetometer.rst +++ /dev/null @@ -1,19 +0,0 @@ -.. highlight:: swift - -Magnetometer -============ - -Some MetaWear boards comes with a builtin magnetometer. It's configured via properties on the `MBLMagnetometer `_ class. - -To meet specific needs, different MetaWear models have different magnetometer sensors, so the ``MBLMagnetometer`` class is actually a generic abstraction of all magnetometers. You can up-cast to one of our derived magnetometer objects in order to access advanced features. - - -Cast to Derived Class ---------------------- - -There is currently nothing in the generic ``MBLMagnetometer`` class, so you need to use the `MagnetometerBMM150 `_ derived class. -:: - - if let magnetometerBMM150 = device.magnetometer as? MBLMagnetometerBMM150 { - } - diff --git a/Docs/source/magnetometerbmm150.rst b/Docs/source/magnetometerbmm150.rst deleted file mode 100644 index 336b43a..0000000 --- a/Docs/source/magnetometerbmm150.rst +++ /dev/null @@ -1,19 +0,0 @@ -.. highlight:: swift - -MagnetometerBMM150 -================== - -This specific magnetometer is configured via properties on the `MagnetometerBMM150 `_ class. This section shows how to use its advanced features. - -Periodic Readings ------------------ - -This magnetometer sensor has a built in timer, so you can program it directly to return periodic data. - -:: - - magnetometerBMM150.periodicMagneticField.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Magnetic Field: \(obj)") - } - }) diff --git a/Docs/source/metawear_manager.rst b/Docs/source/metawear_manager.rst deleted file mode 100644 index f6a74ca..0000000 --- a/Docs/source/metawear_manager.rst +++ /dev/null @@ -1,94 +0,0 @@ -.. highlight:: swift - -MetaWear Manager -================ - -Scanning and discovery of MetaWear devices is done through the `MBLMetaWearManager `_. The manager also maintains a list of previously saved MetaWear's for simple re-connecting. - -Shared Manager --------------- - -The `MBLMetaWearManager `_ class should not be instantiated directly. Instead, always use the shared manager as shown. - -:: - - let manager = MBLMetaWearManager.shared() - -Scanning for MetaWears ----------------------- - -It's simple to start scanning for advertising MetaWear devices using the `MBLMetaWearManager `_: - -:: - - MBLMetaWearManager.shared().startScan(forMetaWearsAllowDuplicates: false, handler: { array in - for device in array { - print("Found MetaWear: \(device)") - } - }) - -Scanning for Nearby MetaWears ------------------------------ - -In the previous example we set ``startScan(forMetaWearsAllowDuplicates: false`` which meant that the handler block would be invoked only when a new MetaWear was detected. However, by allowing duplicates the handler block will be invoked each time an advertisement packet is detected (even from an already detected MetaWear). - -This feature is handy because the ``discoveryTimeRSSI`` property on the discovered `MBLMetaWear `_ objects get continually updated, so you can get a real time sense for how far it is from the Apple device. - -:: - - let MAX_ALLOWED_RSSI = -15; // The RSSI calculation sometimes produces erroneous values, we know anything above this value is invalid - let MIN_ALLOWED_RSSI = -45; // Depending on your specific application this value will change! - - MBLMetaWearManager.shared().startScan(forMetaWearsAllowDuplicates: true, handler: { array in - for device in array { - guard device.discoveryTimeRSSI != nil else { - continue - } - // Reject any value above a reasonable range - if device.discoveryTimeRSSI!.intValue > MAX_ALLOWED_RSSI { - continue - } - // Reject if the signal strength is too low to be close enough (find through experiment) - if device.discoveryTimeRSSI!.intValue < MIN_ALLOWED_RSSI { - continue - } - MBLMetaWearManager.shared().stopScan() - // At this point we have a close MetaWear, do what you please with it! - } - }) - -Retrieving MetaWears --------------------- - -It's common to want to reconnect to the same MetaWear. For that, you can call the ``rememberDevice`` method on `MBLMetaWear `_, and then use the manager to retrieve it later on: - -The array is ordered so the first device remembered is at index 0, next device at index 1, and so on. - -:: - - MBLMetaWearManager.shared().retrieveSavedMetaWearsAsync().success { array in - let savedDevice = array.firstObject - } - -Dispatch Queue --------------- - -Choose the queue on which all callbacks from the MetaWear API occur on. Defaults to the main queue. - -Since we use `Bolts-ObjC `_ throughout the API we provide a ``dispatchExecutor`` which uses the dispatch queue. Also, we provide easy to use shortcuts ``success:`` and ``failure:`` for the common cases of handling callbacks. - -:: - - MBLMetaWearManager.shared().dispatchQueue = myCustomQueue - - -Minimum Firmware Required -------------------------- - -As we release new firmware versions, old ones may no longer be suppored, so this property indicates the oldest possible firmware the SDK can successfully connect to. - -This property is writeable, so you can enforce an even newer version for your app. - -:: - - MBLMetaWearManager.shared().minimumRequiredVersion = .version1_2_0 diff --git a/Docs/source/metawearboard.rst b/Docs/source/metawearboard.rst deleted file mode 100755 index a9dc4d9..0000000 --- a/Docs/source/metawearboard.rst +++ /dev/null @@ -1,146 +0,0 @@ -.. highlight:: swift - -MetaWear Board -============== - -The `MBLMetaWear `_ interface is a software representation of the MetaWear boards and is the central class of the MetaWear API. It contains all the logical methods you would expect for interacting with the device, such as connecting, disconnecting, reading and writing state. - -Sensors and peripherals on the MetaWear are encapsulated within their own objects accessible via properties. For example, all ``accelerometer`` functionality is contained in the `MBLAccelerometer `_ class and is accessed using the ``accelerometer`` property - -You always get a `MBLMetaWear `_ object through the `MBLMetaWearManager `_ , afterwards, keep a reference to it as long as the app is running. From here on assume that inside code blocks ``device`` is a `MBLMetaWear `_ object reference - - -Bluetooth LE Connection ------------------------ -Before using any API features, you must first connect to the board with `connectAsync `_. The returned task will finish when a connection has been established and the ``MBLMetaWear`` state has been initialized. :: - - device.connectAsync().continueOnDispatch { t in - if t.isCancelled { - print("disconnectAsync() called before connection completed") - } else if t.isFaulted { - print("Connection Error: \(t.error?.localizedDescription ?? "N/A")") - } else { - print("Connection Success") - } - return t - } - -There is also a convenient `connectWithTimeoutAsync `_ which will finish when the connection is complete, or timeout seconds have passed. If a timeout occurs, the task will get an error of kMBLErrorDomain and kMBLErrorConnectionTimeout code. :: - - device.connect(withTimeoutAsync: 5).success { _ in - print("Connected") - }.failure { error in - print("Failed to connect", error) - } - -Conversely, call `disconnectAsync `_ to close the connection. If there is a pending ``connectAsync`` task when ``disconnectAsync`` is called, the connect task will be cancelled. :: - - device.disconnectAsync().success { _ in - print("Disconnected") - } - -Watching for Disconnects -^^^^^^^^^^^^^^^^^^^^^^^^ -It is often useful to handle BLE disconnection events, `waitForDisconnect `_ will create a task that completes once this device disconnects, either expectedly or unexpectedly. :: - - device.waitForDisconnect().continueOnDispatch { t in - print("Lost connection") - return nil - } - - -Saving MetaWears ----------------- - -If you expect to re-connect to a specific MetaWear device, you can "remember" it for easy retrieval later on through the MetaWear Manager. - -Once you are done with the device, then "forget" it to remove it from the list. - -:: - - device.rememberDevice() - -:: - - device.forgetDevice() - -Model ------ -Despite the name, the ``MBLMetaWear`` interface communicates with all MetaSensor boards, not just MetaWear boards. Because of this, the interface provides a `model `_ property that determines exactly which board the interface is currently connected to. - -:: - - print(MBLModelString(device.model)) - -BLE Information ---------------- -RSSI and some GATT characetristics can be read from the MBLMetaWear interface using `readRssiAsync `_, `readBatteryLifeAsync `_. Device information is avaliable througth the `deviceInfo `_ property. :: - - device.readRSSIAsync().success { rssi in - print("rssi: \(rssi)") - } - device.readBatteryLifeAsync().success { battery in - print("battery: \(battery)") - } - - -Connection State ----------------- - -Get the state of the BLE connection. - -:: - - if device.state == .connected { - print("Connected!") - } - - - -Programmed by Other Application -------------------------------- - -Since we do not support using a single MetaWear device with multiple application, you should take care if a user accidently tries to do this. Once connected, your application should check this BOOL and if it is YES, then you shouldn't change settings or perform any operations unless you supply the user with an alert saying, "This device is in use by another application, are you sure you want to reprogram it? This will cause errors and data loss for the other application”. If they agree then you need to call setConfigurationAsync: to take ownership of the device. - -:: - - if device.programedByOtherApp { - print("WARNING - device already programmed, are you sure you want to continue? Call device.setConfigurationAsync(nil) if you wish to take ownership.") - } - -Identifier ----------- - -Apple generates a unique identifier for each BLE device. Note, two different Apple devices will generate two different identifiers for the same MetaWear. It might be useful to use ``device.mac`` instead. - -:: - - print("\(device.identifier)") - -Device Name ------------ - -By using the ``name`` property you can change the advertised ``name`` of the MetaWear. - -:: - - device.name = "HAMMER" - - -Modules -------- -MetaWear modules, represented by the `MBLModule `_ interface, are sensors, peripherals, or on-board firmware features. To interact with the underlying MetaWear modules, retrieve a reference to the desired interface via properties on ``MBLMetaWear``. A null pointer will be returned if any of the following conditions are true: - -* Requested module is not supported on the board -* Board is in MetaBoot mode -* Has not yet connected - -Sleep Mode ----------- - -Use the ``sleepModeOnReset`` function to put the device in a low-power sleep mode after the next reset. To wake the device back up you can press the button, connect usb power (latest models only), or remove and reconnect the coin cell battery. - -:: - - [device sleepModeOnReset]; - [device resetDevice]; diff --git a/Docs/source/neopixel.rst b/Docs/source/neopixel.rst deleted file mode 100644 index d7fda41..0000000 --- a/Docs/source/neopixel.rst +++ /dev/null @@ -1,52 +0,0 @@ -.. highlight:: swift - -NeoPixel -======== - -NeoPixels are strands of LED with built-in drivers and are super simple to connect and program. - -The `MBLNeopixel `_ module allows you to create a `MBLNeopixelStrand `_ object which encapsulates all functionality. - -Set Neopixel Colors -------------------- - -This is how you would set the whole stand to green. - -Note, if it lights up a color other than green, you have the wrong color ordering value. - -:: - - // All constants are specific to your NeoPixel stand - let length: UInt8 = 30 - let strand = device.neopixel?.strand(withColor: .GBR, speed: .slow, pin: 0, length: length) - strand?.initializeAsync() - for i in 0..`_ that has taken care of all the steps outlined on this page. - -Compile Dependency ------------------- - -.. highlight:: ruby - -To add the MetaWear SDK as a dependency to your project you should setup `CocoaPods `_, and add the following line to your Podfile: :: - - pod "MetaWear" - -.. highlight:: console - -Then run: :: - - pod install - -Finding Your Device -------------------- - -.. highlight:: swift - -The last thing to do is retrieve an `MBLMetaWear `_ object corresponding to your board by scanning for it. - -:: - - import MetaWear - - MBLMetaWearManager.shared().startScanForMetaWears() { array in - // Hooray! We found a MetaWear board, so stop scanning for more - MBLMetaWearManager.shared().stopScan() - // Connect to the board we found - if let device = array.first { - device.connectAsync().success() { _ in - // Hooray! We connected to a MetaWear board, so flash its LED! - device.led?.flashColorAsync(UIColor.green, withIntensity: 0.5) - }.failure() { error in - // Sorry we couldn't connect - print(error) - } - } - } diff --git a/Docs/source/proximity.rst b/Docs/source/proximity.rst deleted file mode 100644 index 9d8d52a..0000000 --- a/Docs/source/proximity.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. highlight:: swift - -Proximity -========= - -Proximity sensors detect the presence of objects without physically touching them. They are often used as a touch-less switch, automatically turning on faucets and opening doors to name a few examples. - -MetaDetector boards are outfitted with the `TSL2671 `_ proximity detector, a photoelectric style detector that refelcts an infrared signal off the target object to measure distance. This sensor is accessed with the `MBLProximityTSL2671 `_ interface. - -To meet specific needs, different MetaWear models have different magnetometer sensors, so the ``MBLProximity`` class is actually a generic abstraction of all magnetometers. You can up-cast to one of our derived magnetometer objects in order to access advanced features. - - -Cast to Derived Class ---------------------- - -There is currently nothing in the generic ``MBLProximity`` class, so you need to use the `MBLProximityTSL2671 `_ derived class. -:: - - if let proximityTSL2671 = device.proximity as? MBLProximityTSL2671 { - } diff --git a/Docs/source/proximity_tsl2671.rst b/Docs/source/proximity_tsl2671.rst deleted file mode 100644 index a75dd8e..0000000 --- a/Docs/source/proximity_tsl2671.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. highlight:: swift - -Proximity TSL2671 -================= - -This specific proximity sensor is configured via properties on the `MBLProximityTSL2671 `_ class. This section shows how to use its advanced features. - - -Configuration -------------- -The TSL2671 device has 4 configurable parameters that control the sensitivity and distance at which the detector can measure proximity. These parameters are set with properties on the interface. - -=================== =================================================================== -Parameter Description -=================== =================================================================== -Integration Time How long the internal ADC converts analog input into digital counts -Pulse Count Number of IR pulses emitted for distance measuring -Transmitter Current Amount of current driving the IR transmitter -=================== =================================================================== - -:: - - // set integration time to 5.44ms - // use default pulse count of 1, - // set drive current to 25mA - proximityTSL2671.integrationTime = 5.44 - proximityTSL2671.proximityPulses = 1 - proximityTSL2671.drive = .drive25mA - -Proximity Data --------------- -Proximity data is an ADC value represented as an UInt16; the higher the adc value, the closer the distance to the object. - -:: - - proximityTSL2671.proximity?.readAsync().success { result in - print("Proximity ADC = \(result.value.uint16Value)") - } diff --git a/Docs/source/pushbutton.rst b/Docs/source/pushbutton.rst deleted file mode 100644 index 7dd1074..0000000 --- a/Docs/source/pushbutton.rst +++ /dev/null @@ -1,31 +0,0 @@ -.. highlight:: swift - -Pushbutton -========== - -The MetaWear board comes with a builtin pushbutton switch, encapsulated with the `MBLMechanicalSwitch `_ object. - -Reading Switch Value --------------------- - -You can read the current state with the following code. - -:: - - device.mechanicalSwitch?.switchValue.readAsync().success { result in - print("Switch State: \(result.value.boolValue)") - } - -Listening For Change --------------------- - -It's likely you just want to know when the switch is pressed or released, for that use the following. - -:: - - device.mechanicalSwitch?.switchUpdateEvent.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Switch Changed \(obj)") - } - }) - diff --git a/Docs/source/sensor_fusion.rst b/Docs/source/sensor_fusion.rst deleted file mode 100644 index 0e00a01..0000000 --- a/Docs/source/sensor_fusion.rst +++ /dev/null @@ -1,84 +0,0 @@ -.. highlight:: swift - -Sensor Fusion -============= - -The MetaMotion family of boards comes with a builtin Sensor Fusion algorithm. It's configured via properties on the `MBLSensorFusion `_ class. When using the sensor fusion algorithm, it is important that you do not simultaenously use the Accelerometer, Gyro, and Magnetometer modules; the algorithm configures those sensors internally based on how you configure the sensor fusion algorithm. - -As explained `here `_. When estimating attitude and heading, the best results are obtained by combining data from multiple types of sensors to take advantage of their relative strengths. For example, rate gyros can be integrated to produce angle estimates that are reliable in the short-term, but that tend to drift in the long-term. Accelerometers, on the other hand, are sensitive to vibration and other non-gravity accelerations in the short-term, but can be trusted in the long-term to provide angle estimates that do no degrade as time progresses. Combining rate gyros and accelerometers can produce the best of both worlds - angle estimates that are resistant to vibration and immune to long-term angular drift. - -Mode ----- -The sensor fusion algorithm has 4 -`fusion modes `_, listed in the below table: - -======== ========================================================================== -Mode Description -======== ========================================================================== -NDoF Calculates absolute roeintation from accelerometer, gyro, and magnetometer -IMUPlus Calculates relative orientation in space from accelerometer and gyro data -Compass Determines geographic direction from th Earth's magnetic field -M4G Similar to IMUPlus except rotation is detected with the magnetometer -======== ========================================================================== - -Attitude and Heading --------------------- - -We provide attitude and heading information using both Euler Angles and Quaternions. Compared to quaternions, Euler Angles are simple and intuitive and they lend themselves well to simple analysis and control. On the other hand, Euler Angles are limited by a phenomenon called Gimbal Lock. In applications where the sensor will never operate near pitch angles of +/- 90 degrees, Euler Angles are a good choice. A quaternion is a four-element vector that can be used to encode any rotation in a 3D coordinate system. Technically, a quaternion is composed of one real element and three complex elements. It's best to start with Euler Angles unless you are already familiar with quaternions. - -:: - - device.sensorFusion?.eulerAngle.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) - device.sensorFusion?.quaternion.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) - -Gravity Reading ---------------- - -This looks at the acceleration due to gravity and removes the acceleration due to motion. This vector always points to Earth. - -:: - - device.sensorFusion?.gravity.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) - -Linear Acceleration -------------------- - -This looks at the acceleration due to motion and removes the acceleration due to gravity. - -:: - - device.sensorFusion?.linearAcceleration.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) - -Corrected Sensor Readings -------------------------- - -Sensor fusion algorithms are able to use the strengths of various sensors to improve the weaknesses of others. This allows us to extract more accurate readings of sensor values. Keep in mind that each sensor fusion mode has different sets of available data and produces it at different rates. - -======== ===== ===== ==== -Mode Acc Gyro Mag -======== ===== ===== ==== -NDoF 100Hz 100Hz 25Hz -IMUPlus 100Hz 100Hz N/A -Compass 25Hz N/A 25Hz -M4G 50Hz N/A 50Hz -======== ===== ===== ==== - -:: - - device.sensorFusion?.acceleration.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) - device.sensorFusion?.rotation.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) - device.sensorFusion?.magneticField.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) diff --git a/Docs/source/sensors.rst b/Docs/source/sensors.rst deleted file mode 100755 index baeac48..0000000 --- a/Docs/source/sensors.rst +++ /dev/null @@ -1,28 +0,0 @@ -Sensors -======= -MetaWear comes with plenty of sensors ready to be used with only a few API calls. Most boards have a different combination of sensors or even different sensor models so it is important to add confirm existence of module before using. - -.. toctree:: - :hidden: - :maxdepth: 1 - - accelerometer - accelerometerbmi160 - accelerometermma8452q - ambient_light - ambientlightltr329 - barometer - barometerbmp280 - color_sensor - color_sensor_tcs3472 - gyro - gyrobmi160 - humidity - humidity_bme280 - magnetometer - magnetometerbmm150 - proximity - proximity_tsl2671 - temperature - ancs - pushbutton diff --git a/Docs/source/serial_passthrough.rst b/Docs/source/serial_passthrough.rst deleted file mode 100644 index 3753742..0000000 --- a/Docs/source/serial_passthrough.rst +++ /dev/null @@ -1,45 +0,0 @@ -.. highlight:: swift - -Serial Passthrough -================== - -A great way to extend the hardware features of MetaWear is to attach additional devices via a serial bus (I2C or SPI). - -Read/Write ----------- - -To read or write to the registers on the device, first use the `MBLSerial `_ module to create an `MBLI2CData `_ or `MBLSPIData `_ object, then invoke its read/write methods. - -:: - - let bmi160 = device.serial?.data(withSlaveSelectPin: 10, - clockPin: 0, - mosiPin: 11, - misoPin: 7, - lsbFirst: false, - spiMode: 3, - spiFrequency: 6, - nativePinIndexing: true, - length: 5) - let byte: UInt8 = 0xDA - bmi160?.read(withParamtersAsync: Data(bytes: [byte])).success { result in - print(result) - } - -:: - - let aReg = device.serial?.data(atDeviceAddress: 0x1C, registerAddress: 0x0D, length: 1) - aReg?.writeByteAsync(0x55) - -Periodic Reads --------------- - -Since `MBLI2CData `_ and `MBLSPIData `_ derive from `MBLData `_ they inherit its periodic read methods: - -:: - - let reg = device.serial?.data(atDeviceAddress: 0x1C, registerAddress: 0x12, length: 1) - let periodicRead = reg?.periodicRead(withPeriod: 1000) - periodicRead?.startNotificationsAsync(handler: { (obj, error) in - print("I am reading every second: " + String(describing: obj)) - }) diff --git a/Docs/source/settings.rst b/Docs/source/settings.rst deleted file mode 100644 index 01577ad..0000000 --- a/Docs/source/settings.rst +++ /dev/null @@ -1,112 +0,0 @@ -.. highlight:: swift - -Settings -======== - -You can control several BLE settings on the MetaWear board, encapsulated with the `MBLSettings `_ object. - -Radio Power ------------ - -The radio transmit power is also exposed through a property. Setting a smaller (lower dBm) value will result in a weaker radio signal, default is MBLTransmitPower0dBm - -:: - - device.settings?.transmitPower = .power0dBm - -Circular Buffer Log -------------------- - -Choose what happens if the internal log fills up. If circularBufferLog is YES then the oldest log entries will be deleted to make room for now entries, if NO then new entries will be discared. Defaults to NO. - -:: - - device.settings?.circularBufferLog = false - -Scan Response -------------- - -You can modify the BLE Ad Packet to advertise application specific data, this is done by setting a raw byte array which will be sent in the BLE scan response. One example is to have the MetaWear behave as a `URI Beacon `_: - -:: - - // Make it advertise http://www.mbientlab.com - let rawuri = Data(bytes: [0x03, 0x03, 0xD8, 0xFE, 0x10, 0x16, 0xD8, 0xFE, 0x00, 0x12, 0x00, 0x6D, 0x62, 0x69, 0x65, 0x6E, 0x74, 0x6C, 0x61, 0x62, 0x00]) - device.settings?.scanResponse = rawuri - -Advertising Settings --------------------- - -You can change the advertising interval and advertising timeout if you require advanced power saving features. This should be carefully considered, because it affects the time to discovery and connect performance, and also battery life. - -This is a startAdvertisement method which can be explicitly use to start advertisement after an advertising timeout has occured. You can hook this call up to any MBLEvent if you need advanced ways to start advertising. Note a button press it already hard coded to always trigger advertising, which should cover most cases. - -:: - - device.settings?.advertisingInterval = 417.5; // Default value - device.settings?.advertisingTimeout = 0; // Default value - always advertise - device.settings?.startAdvertisementAsync() - -Pairing/Bonding ---------------- - -In a few special cases, you may need to enable of Bluetooth level bonding. This is still in development, so not everything is exposed. To begin pairing simply call: :: - - device.settings?.initiatePairingAsync() - -To fully destroy the bond, you need to first call ``deleteAllBonds`` then disconnect. Second, "Forget" the device in the iOS Settings APP under Bluetooth. :: - - device.settings?.deleteAllBondsAsync() - -Disconnect Event ----------------- - -Event representing a BLE disconnection event. Note this doesn't make sense to stream, but it's likely that programCommandsToRunOnEventAsync will have utility. - -:: - - // Flash red LED twice on disconnect - device.settings?.disconnectEvent?.programCommandsToRunOnEventAsync { - device.led?.flashColorAsync(.red, withIntensity: 1.0, numberOfFlashes: 2) - } - -MAC Address ------------ - -Get the MAC address of the MetaWear. As of SDK 2.10.0 this is now automaticaly cached upon connection and avaliable at ``device.mac``. - -:: - - print(device.mac) - device.settings?.macAddress?.readAsync().success { mac in - print(mac) - } - -Connection Parameters ---------------------- - -Bluetooth LE connection parameters control how the ble devices communicate with each other. Configuring these parameters is done with the via properties on the MBLSettings object. A more detailed explanation on connection parameters can be found on the Nordic Developer Zone: - -* https://devzone.nordicsemi.com/question/60/what-is-connection-parameters/ - -:: - - // change min conn interval to 10ms, - // max conn interval to 1024ms - device.settings?.minimumConnectionInterval = 10 - device.settings?.maximumConnectionInterval = 1024 - device.settings?.applyConnectionParametersAsync() - - -Power Status ------------- -Firmware v1.3.2 exposes battery charging and power status notifications which provides information on when the battery is charging / not charging and when a power source is attached / removed, respectively. The data is interpreted as a byte or boolean with 1 (true) signifying battery charging / power source attached, and 0 (false) meaning battery not charging / power source removed. Not all boards support this feature and a null pointer will be returned if `powerStatus `_ or `chargerStatus `_ is called on an unsupported board. - -:: - - device.settings?.chargerStatus?.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) - device.settings?.powerStatus?.startNotificationsAsync(handler: { (obj, error) in - print(String(describing: obj)) - }) diff --git a/Docs/source/temperature.rst b/Docs/source/temperature.rst deleted file mode 100644 index 6beac7e..0000000 --- a/Docs/source/temperature.rst +++ /dev/null @@ -1,85 +0,0 @@ -.. highlight:: swift - -Temperature -=========== - -The MetaWear board always has an on-die temperature sensor along with support for attaching an external thermistor, and some models even contain on on-board thermistor for super accurate results. All logic is encapsulated with the `MBLTemperature `_ object. - -Source Selection ----------------- - -The sources are available as different ``MBLData`` properties. - -:: - - let onDieThermistor = device.temperature?.onDieThermistor - let externalThermistor = device.temperature?.externalThermistor - let onboardThermistor = device.temperature?.onboardThermistor - -Single Read ------------ - -Here is how you get a single temperature reading. Note that to use an external thermistor you must specify what GPIO pins it is connected to as well. - -:: - - device.temperature?.onDieThermistor.readAsync().success { result in - print("on-die temp: \(result.value.doubleValue)") - } - device.temperature?.onboardThermistor?.readAsync().success { result in - print("on-board temp: \(result.value.doubleValue)") - } - - let externalThermistor = device.temperature?.externalThermistor - externalThermistor?.readPin = 0 - externalThermistor?.enablePin = 1 - externalThermistor?.readAsync().success { result in - print("external thermistor temp: \(result.value.doubleValue)") - } - -Periodic Read -------------- - -Since all temperature sources are MBLData objects, you can easily perform periodic reads. - -:: - - let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) - temperatureEvent?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("on-die temp: \(obj.value.doubleValue)") - } - }) - -Change Event ------------- - -The following code shows how to setup filters to notify when the temperature has changed by at least 2 degrees C. - -:: - - let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) - // Get notifications when it changes by 2 degrees C - let deltaTemperatureEvent = temperatureEvent?.changeOfEvent(byDelta: 2.0, output: .absolute) - deltaTemperatureEvent?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Temp Changed!: \(obj.value.doubleValue)") - } - }) - - -Threshold Event ---------------- - -Similarly, we can use the filters to setup a notification when the temperature of the device crosses a threshold. - -:: - - let temperatureEvent = device.temperature?.onDieThermistor.periodicRead(withPeriod: 500) - // Get notifications when it changes by 2 degrees C - let thresholdEvent = temperatureEvent?.change(ofEventAcrossThreshold: 25.0, hysteresis: 2.0, output: .absolute) - thresholdEvent?.startNotificationsAsync(handler: { (obj, error) in - if let obj = obj { - print("Temp Crossed Threshold!: \(obj.value.doubleValue)") - } - }) diff --git a/Docs/source/timer.rst b/Docs/source/timer.rst deleted file mode 100644 index b5c0c90..0000000 --- a/Docs/source/timer.rst +++ /dev/null @@ -1,18 +0,0 @@ -.. highlight:: swift - -Timer -===== - -The timer module, `MBLTimer `_, allows you to create periodic events that trigger a certain number of times. - -Periodic Event --------------- - -Here is a simple way to buzz 3 times. - -:: - - let periodicEvent = device.timer?.event(withPeriod: 2000, eventCount: 3) - periodicEvent?.programCommandsToRunOnEventAsync { - device.hapticBuzzer?.startBuzzerAsync(pulseWidth: 500, completion: nil) - } diff --git a/LICENSE b/LICENSE index 45a44b8..5686b1d 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright 2014-2015 MbientLab Inc. All rights reserved. +Copyright 2018 MbientLab Inc. All rights reserved. IMPORTANT: Your use of this Software is limited to those specific rights granted under the terms of a software license agreement between the user who downloaded the software, his/her employer (which must be your employer) and MbientLab Inc, (the "License"). You may not use this Software unless you agree to abide by the terms of the License which can be found at www.mbientlab.com/terms. diff --git a/MetaWear.podspec b/MetaWear.podspec index b9dfb8a..53e0133 100644 --- a/MetaWear.podspec +++ b/MetaWear.podspec @@ -1,9 +1,9 @@ Pod::Spec.new do |s| s.name = 'MetaWear' - s.version = '2.10.0' + s.version = '3.0.0' s.license = { :type => 'Commercial', :text => 'See https://www.mbientlab.com/terms/', :file => 'LICENSE' } s.homepage = 'https://mbientlab.com' - s.summary = 'iOS/macOS/tvOS API and documentation for the MetaWear platform' + s.summary = 'iOS/macOS/tvOS/watchOS API and documentation for the MetaWear platform' s.description = <<-DESC This library allows for simple interfacing with the MetaWear Bluetooth (BLE) sensor platform. Stream or log a variety of sensor data via simple API calls. @@ -12,20 +12,48 @@ Pod::Spec.new do |s| DESC s.author = { 'Stephen Schiffli' => 'stephen@mbientlab.com' } - s.source = { :git => 'https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS.git', :tag => s.version.to_s } + s.source = { :git => 'https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS.git', + :tag => s.version.to_s, :submodules => true } - s.platform = :ios, :osx, :tvos - s.ios.deployment_target = '8.0' - s.osx.deployment_target = '10.11' + s.platform = :ios, :osx, :tvos, :watchos + s.ios.deployment_target = '10.0' + s.osx.deployment_target = '10.13' s.tvos.deployment_target = '10.0' + s.watchos.deployment_target = '4.0' s.social_media_url = "https://twitter.com/mbientLab" - s.documentation_url = "https://www.mbientlab.com/docs/metawear/ios/#{s.version}/index.html" + s.documentation_url = "https://mbientlab.com/cppdocs/latest/" - s.source_files = 'MetaWear/{Assets,Classes,Internal}/**/*.{h,m}' - s.private_header_files = 'MetaWear/Internal/**/*.h' + s.default_subspec = 'Core' - s.frameworks = 'CoreData', 'CoreBluetooth' - s.dependency 'Bolts/Tasks', '~> 1.8.4' - s.dependency 'FastCoding', '~> 3.2.2' + s.subspec 'Core' do |s| + s.preserve_paths = 'MetaWear/MetaWear-SDK-Cpp/src/**/*' + s.source_files = 'MetaWear/Core/**/*', + 'MetaWear/MetaWear-SDK-Cpp/src/metawear/**/*.cpp', + 'MetaWear/MetaWear-SDK-Cpp/bindings/swift/**/*' + s.compiler_flags = '-Wno-documentation', '-Wno-comma' + s.pod_target_xcconfig = { + 'SWIFT_VERSION' => '4.0', + 'HEADER_SEARCH_PATHS' => '$(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src', + 'SWIFT_INCLUDE_PATHS' => '$(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src' + } + s.frameworks = 'CoreBluetooth' + s.dependency 'Bolts-Swift', '~> 1.3.0' + end + + s.subspec 'AsyncUtils' do |s| + s.source_files = 'MetaWear/AsyncUtils/**/*' + s.dependency 'MetaWear/Core' + end + + s.subspec 'UI' do |s| + s.source_files = 'MetaWear/UI/**/*' + s.dependency 'MetaWear/Core' + s.dependency 'MetaWear/AsyncUtils' + end + + s.subspec 'Mocks' do |s| + s.source_files = 'MetaWear/Mocks/**/*' + s.dependency 'MetaWear/Core' + end end diff --git a/MetaWear/AsyncUtils/MblMwDataSignal+Async.swift b/MetaWear/AsyncUtils/MblMwDataSignal+Async.swift new file mode 100644 index 0000000..f3bef03 --- /dev/null +++ b/MetaWear/AsyncUtils/MblMwDataSignal+Async.swift @@ -0,0 +1,83 @@ +/** + * MblMwDataSignal+Async.swift + * MetaWear + * + * Created by Stephen Schiffli on 5/3/18. + * Copyright 2018 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import BoltsSwift +import MetaWearCpp + +extension OpaquePointer { + // Tasky interface to reading a MetaWear data signal + public func read() -> Task { + assert(mbl_mw_datasignal_is_readable(self) != 0) + let source = TaskCompletionSource() + mbl_mw_datasignal_subscribe(self, bridgeRetained(obj: source)) { (context, dataPtr) in + let source: TaskCompletionSource = bridgeTransfer(ptr: context!) + if let dataPtr = dataPtr { + source.set(result: dataPtr.pointee.copy()) + } else { + source.set(error: MetaWearError.operationFailed(message: "could not subscribe")) + } + } + mbl_mw_datasignal_read(self) + return source.task.continueWithTask { + mbl_mw_datasignal_unsubscribe(self) + return $0 + } + } + + public func datasignalLog() -> Task { + let source = TaskCompletionSource() + mbl_mw_datasignal_log(self, bridgeRetained(obj: source)) { (context, logger) in + let source: TaskCompletionSource = bridgeTransfer(ptr: context!) + if let logger = logger { + source.set(result: logger) + } else { + source.set(error: MetaWearError.operationFailed(message: "could not create log entry")) + } + } + return source.task + } + public func passthroughCreate(mode: MblMwPassthroughMode, count: UInt16) -> Task { + let source = TaskCompletionSource() + mbl_mw_dataprocessor_passthrough_create(self, mode, count, bridgeRetained(obj: source)) { (context, passthrough) in + let source: TaskCompletionSource = bridgeTransfer(ptr: context!) + if let passthrough = passthrough { + source.set(result: passthrough) + } else { + source.set(error: MetaWearError.operationFailed(message: "could not create conter")) + } + } + return source.task + } +} diff --git a/MetaWear/Internal/Core/MBLModuleInfo.m b/MetaWear/AsyncUtils/MblMwEvent+Async.swift similarity index 70% rename from MetaWear/Internal/Core/MBLModuleInfo.m rename to MetaWear/AsyncUtils/MblMwEvent+Async.swift index 0fb3652..a683e2a 100644 --- a/MetaWear/Internal/Core/MBLModuleInfo.m +++ b/MetaWear/AsyncUtils/MblMwEvent+Async.swift @@ -1,9 +1,9 @@ /** - * MBLModuleInfo.m + * MblMwEvent+Async.swift * MetaWear * - * Created by Stephen Schiffli on 7/14/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. + * Created by Stephen Schiffli on 5/3/18. + * Copyright 2018 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights * granted under the terms of a software license agreement between the user who @@ -33,26 +33,21 @@ * contact MbientLab via email: hello@mbientlab.com */ -#import "MBLModuleInfo.h" +import MetaWearCpp +import BoltsSwift -@implementation MBLModuleInfo - -- (instancetype)initWithId:(uint8_t)moduleId data:(NSData *)data -{ - self = [super init]; - if (self) { - self.moduleId = moduleId; - if (data.length >= 4) { - self.moduleImplementation = *((uint8_t *)data.bytes + 2); - self.moduleRevision = *((uint8_t *)data.bytes + 3); - self.moduleData = [data subdataWithRange:NSMakeRange(4, data.length - 4)]; - } else { - self.moduleImplementation = 0xFF; - self.moduleRevision = 0xFF; - self.moduleData = nil; +// Helper functions that taskify the C interface +extension OpaquePointer { + public func eventEndRecord() -> Task<()> { + let source = TaskCompletionSource<()>() + mbl_mw_event_end_record(self, bridgeRetained(obj: source)) { (context, event, status) in + let source: TaskCompletionSource<()> = bridgeTransfer(ptr: context!) + if status == 0 { + source.set(result: ()) + } else { + source.set(error: MetaWearError.operationFailed(message: "event end record failed: \(status)")) + } } + return source.task } - return self; } - -@end diff --git a/MetaWear/AsyncUtils/MetaWear+Async.swift b/MetaWear/AsyncUtils/MetaWear+Async.swift new file mode 100644 index 0000000..7e675c4 --- /dev/null +++ b/MetaWear/AsyncUtils/MetaWear+Async.swift @@ -0,0 +1,92 @@ +/** + * MetaWear+Async.swift + * MetaWear + * + * Created by Stephen Schiffli on 5/3/18. + * Copyright 2018 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import MetaWearCpp +import BoltsSwift + + +extension MetaWear { + public func clearAndReset() { + mbl_mw_logging_stop(board) + mbl_mw_metawearboard_tear_down(board) + mbl_mw_logging_clear_entries(board) + mbl_mw_macro_erase_all(board) + mbl_mw_debug_reset_after_gc(board) + mbl_mw_debug_disconnect(board) + } + + public func macroEndRecord() -> Task { + let source = TaskCompletionSource() + mbl_mw_macro_end_record(board, bridgeRetained(obj: source)) { (context, board, value) in + let source: TaskCompletionSource = bridgeTransfer(ptr: context!) + source.set(result: value) + } + return source.task + } + + public func createAnonymousDatasignals() -> Task<[OpaquePointer]> { + let source = TaskCompletionSource<[OpaquePointer]>() + mbl_mw_metawearboard_create_anonymous_datasignals(board, bridgeRetained(obj: source)) + { (context, board, anonymousSignals, size) in + let source: TaskCompletionSource<[OpaquePointer]> = bridgeTransfer(ptr: context!) + if let anonymousSignals = anonymousSignals { + if size == 0 { + source.set(error: MetaWearError.operationFailed( + message: "device is not logging any sensor data")) + } else { + let array = (0.. Task { + let source = TaskCompletionSource() + mbl_mw_timer_create(board, period, repetitions, immediateFire ? 0 : 1, bridgeRetained(obj: source)) { (context, timer) in + let source: TaskCompletionSource = bridgeTransfer(ptr: context!) + if let timer = timer { + source.set(result: timer) + } else { + source.set(error: MetaWearError.operationFailed(message: "could not create timer")) + } + } + return source.task + } +} diff --git a/MetaWear/AsyncUtils/MetaWear+LED.swift b/MetaWear/AsyncUtils/MetaWear+LED.swift new file mode 100644 index 0000000..3746f1a --- /dev/null +++ b/MetaWear/AsyncUtils/MetaWear+LED.swift @@ -0,0 +1,95 @@ +/** + * MetaWear+LED.swift + * MetaWear + * + * Created by Stephen Schiffli on 5/3/18. + * Copyright 2018 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import MetaWearCpp + +#if os(macOS) +import AppKit +public typealias MBLColor = NSColor +#else +import UIKit +public typealias MBLColor = UIColor +#endif + +extension MetaWear { + public func flashLED(color: MBLColor, intensity: CGFloat, _repeat: UInt8 = 0xFF, onTime: UInt16 = 200, period: UInt16 = 800) { + assert(intensity >= 0.0 && intensity <= 1.0, "intensity valid range is [0, 1.0]") + guard mbl_mw_metawearboard_lookup_module(board, MBL_MW_MODULE_LED) != MBL_MW_MODULE_TYPE_NA else { + return + } + let scaledIntensity = intensity * 31.0 + let rtime = onTime / 2 + let ftime = onTime / 2 + let offset: UInt16 = 0 + + var red: CGFloat = 0 + var blue: CGFloat = 0 + var green: CGFloat = 0 + color.getRed(&red, green: &green, blue: &blue, alpha: nil) + let scaledRed = UInt8(round(red * scaledIntensity)) + let scaledBlue = UInt8(round(blue * scaledIntensity)) + let scaledGreen = UInt8(round(green * scaledIntensity)) + + var pattern = MblMwLedPattern(high_intensity: 31, + low_intensity: 0, + rise_time_ms: rtime, + high_time_ms: onTime, + fall_time_ms: ftime, + pulse_duration_ms: period, + delay_time_ms: offset, + repeat_count: _repeat) + mbl_mw_led_stop_and_clear(board) + if (scaledRed > 0) { + pattern.high_intensity = scaledRed + mbl_mw_led_write_pattern(board, &pattern, MBL_MW_LED_COLOR_RED) + } + if (scaledGreen > 0) { + pattern.high_intensity = scaledGreen + mbl_mw_led_write_pattern(board, &pattern, MBL_MW_LED_COLOR_GREEN) + } + if (scaledBlue > 0) { + pattern.high_intensity = scaledBlue + mbl_mw_led_write_pattern(board, &pattern, MBL_MW_LED_COLOR_BLUE) + } + mbl_mw_led_play(board) + } + + public func turnOffLed() { + guard mbl_mw_metawearboard_lookup_module(board, MBL_MW_MODULE_LED) != MBL_MW_MODULE_TYPE_NA else { + return + } + mbl_mw_led_stop_and_clear(board) + } +} diff --git a/MetaWear/Classes/Categories/BFTask+MBLExtensions.h b/MetaWear/Classes/Categories/BFTask+MBLExtensions.h deleted file mode 100644 index bb58759..0000000 --- a/MetaWear/Classes/Categories/BFTask+MBLExtensions.h +++ /dev/null @@ -1,93 +0,0 @@ -/** - * BFTask+MBLExtensions.h - * MetaWear - * - * Created by Stephen Schiffli on 12/17/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Convience functions for dealing with BFTasks within the MetaWear SDK - */ -@interface BFExecutor (MBLExtensions) - -/** - Executes on the [MBLMetaWearManager dispatchQueue] - */ -+ (instancetype)dispatchExecutor; - -@end - - -/** - Convience functions for dealing with BFTasks within the MetaWear SDK - */ -@interface BFTask<__covariant ResultType> (MBLExtensions) - -typedef void (^MBLSuccessBlock)(ResultType result); -typedef void (^MBLErrorBlock)(NSError *error); -typedef __nullable id(^MBLExtensionsContinuationBlock)(BFTask *t); - -/** - Add a block to be called if the task finishes successfully, complete with the - tasks result. This callback will occur on the dispatchExecutor. - */ -- (BFTask *)success:(MBLSuccessBlock)block; - -/** - Add a block to be called if the task finishes with an error. - This callback will occur on the dispatchExecutor. - */ -- (BFTask *)failure:(MBLErrorBlock)block; - - -/** - Enqueues the given block to be run once this task completes successfully. - This callback will occur on the dispatchExecutor. - */ -- (BFTask *)continueOnDispatchWithSuccessBlock:(MBLExtensionsContinuationBlock)block NS_SWIFT_NAME(continueOnDispatchWithSuccess(block:)); - -/** - Enqueues the given block to be run once this task completes. - This callback will occur on the dispatchExecutor. - */ -- (BFTask *)continueOnDispatchWithBlock:(MBLExtensionsContinuationBlock)block NS_SWIFT_NAME(continueOnDispatch(block:)); - -@end - - -extern void MBLForceLoadCategory_BFTask_MBLExtensions(void); - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Categories/BFTask+MBLExtensions.m b/MetaWear/Classes/Categories/BFTask+MBLExtensions.m deleted file mode 100644 index ee7862d..0000000 --- a/MetaWear/Classes/Categories/BFTask+MBLExtensions.m +++ /dev/null @@ -1,95 +0,0 @@ -/** - * BFTask+MBLExtensions.m - * MetaWear - * - * Created by Stephen Schiffli on 12/17/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "BFTask+MBLExtensions.h" -#import "BFTask+MBLPrivate.h" -#import "MBLMetaWearManager+Private.h" - -@implementation BFExecutor (MBLExtensions) - - -+ (BFExecutor *)dispatchExecutor -{ - static BFExecutor *singleton; - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - singleton = [BFExecutor executorWithBlock:^void(void(^block)(void)) { - [[MBLMetaWearManager dispatchQueue] addOperationWithBlock:block]; - }]; - }); - return singleton; -} - -@end - -@implementation BFTask (MBLExtensions) - -- (BFTask *)success:(MBLSuccessBlock)block -{ - return [self continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // We need to send a non-null response but some tasks don't - // produce a result so we just fake a @YES for those - block(task.result ? task.result : @YES); - return task; - }]; -} - -- (BFTask *)failure:(MBLErrorBlock)block -{ - return [self continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.error) { - block(task.error); - } - return task; - }]; -} - -- (BFTask *)continueOnDispatchWithSuccessBlock:(MBLExtensionsContinuationBlock)block -{ - return [self continueWithExecutor:[BFExecutor dispatchExecutor] withSuccessBlock:block]; -} - -- (BFTask *)continueOnDispatchWithBlock:(MBLExtensionsContinuationBlock)block -{ - return [self continueWithExecutor:[BFExecutor dispatchExecutor] withBlock:block]; -} - -@end - -void MBLForceLoadCategory_BFTask_MBLExtensions() -{ - NSString *string = nil; - [string description]; -} diff --git a/MetaWear/Classes/Core/MBLAnonymousEvent.m b/MetaWear/Classes/Core/MBLAnonymousEvent.m deleted file mode 100644 index 1296198..0000000 --- a/MetaWear/Classes/Core/MBLAnonymousEvent.m +++ /dev/null @@ -1,99 +0,0 @@ -/** - * MBLAnonymousEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 9/22/17. - * Copyright 2017 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAnonymousEvent+Private.h" -#import "MBLEvent+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" - -@implementation MBLAnonymousEvent - -@dynamic identifier; - -- (instancetype)initWithRegister:(MBLRegister *)reg -{ - self = [super initWithModule:reg.module registerId:reg.registerId index:reg.index format:reg.format identifier:reg.identifier]; - return self; -} - -- (BFTask *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging remainingHandler:(MBLLogRemainingHandler)remainingHandler -{ - MBLMetaWear *device = self.module.device; - if (device.state != MBLConnectionStateConnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before downloading log."}]; - return [BFTask taskWithError:error]; - } - [device incrementCount]; - return [[device.logging downloadLogEvents:self remainingHandler:remainingHandler] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; -} - -+ (BFTask *)mustLogError -{ - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"You can only download log data from anonymous events, please call downloadLogAndStopLoggingAsync:"}]]; -} - -- (BFTask *)startNotificationsWithHandlerAsync:(MBLNotificationHandler)handler -{ - return [MBLAnonymousEvent mustLogError]; -} - -- (BFTask *)stopNotificationsAsync -{ - return [MBLAnonymousEvent mustLogError]; -} - -- (BFTask *)programCommandsToRunOnEventAsync:(MBLVoidHandler)block -{ - return [MBLAnonymousEvent mustLogError]; -} - -- (BFTask *)eraseCommandsToRunOnEventAsync -{ - return [MBLAnonymousEvent mustLogError]; -} - -- (BFTask *)startLoggingAsync -{ - return [MBLAnonymousEvent mustLogError]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLConstants.h b/MetaWear/Classes/Core/MBLConstants.h deleted file mode 100644 index 3604817..0000000 --- a/MetaWear/Classes/Core/MBLConstants.h +++ /dev/null @@ -1,210 +0,0 @@ -/** - * MBLConstants.h - * MetaWear - * - * Created by Stephen Schiffli on 7/30/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -@class MBLAccelerometerData; -@class MBLDeviceInfo; -@class MBLFirmwareBuild; -@class MBLMetaWear; - -#if TARGET_OS_IOS || TARGET_OS_TV -#import -#define MBLColor UIColor -#else -#import -#define MBLColor NSColor -#endif - -NS_ASSUME_NONNULL_BEGIN - -extern NSString *const kMBLAPIVersion; -extern NSString *const kMBLBinaryVersion; - -#pragma mark - Enums - -/** - Supported Firmware Versions - */ -typedef NS_ENUM(uint8_t, MBLFirmwareVersion) { - MBLFirmwareVersion1_0_4, - MBLFirmwareVersion1_0_5, - MBLFirmwareVersion1_0_6, - MBLFirmwareVersion1_0_7, - MBLFirmwareVersion1_1_0, - MBLFirmwareVersion1_1_1, - MBLFirmwareVersion1_1_2, - MBLFirmwareVersion1_2_0, - MBLFirmwareVersion1_2_1, - MBLFirmwareVersion1_2_2, - MBLFirmwareVersion1_2_3, - MBLFirmwareVersion1_2_4, - MBLFirmwareVersion1_2_5, - MBLFirmwareVersion1_3_0, - MBLFirmwareVersion1_3_1, - MBLFirmwareVersion1_3_2, - MBLFirmwareVersion1_3_3, - MBLFirmwareVersion1_3_4, - MBLFirmwareVersion1_3_5, - MBLFirmwareVersion1_3_6 -}; -NSString *MBLFirmwareVersionString(MBLFirmwareVersion version); - -/** - Supported models of Meta family of products - */ -typedef NS_ENUM(uint8_t, MBLModel) { - MBLModelUnknown, - MBLModelMetaWearR, - MBLModelMetaWearRG, - MBLModelMetaWearRPro, - MBLModelMetaWearC, - MBLModelMetaWearCPro, - MBLModelMetaEnvironment, - MBLModelMetaDetector, - MBLModelMetaHealth, - MBLModelMetaTracker, - MBLModelMetaMotionR, - MBLModelMetaMotionC -}; -NSString *MBLModelString(MBLModel model); - -/** - Verbosity of log messages coming from the MetaWear SDK - */ -typedef NS_ENUM(uint8_t, MBLLogLevel) { - MBLLogLevelNone = 0, - MBLLogLevelError = 1, - MBLLogLevelWarning = 2, - MBLLogLevelInfo = 3, - MBLLogLevelDebug = 4 -}; - -/** - Rating of Sensor Fusion calibration status for data samples - */ -typedef NS_ENUM(uint8_t, MBLCalibrationAccuracy) { - MBLCalibrationAccuracyUnreliable = 0, - MBLCalibrationAccuracyLow = 1, - MBLCalibrationAccuracyMedium = 2, - MBLCalibrationAccuracyHigh = 3 -}; -NSString *MBLCalibrationAccuracyString(MBLCalibrationAccuracy accuracy); - -#pragma mark - Block Typedefs - -typedef void (^MBLVoidHandler)(void); -typedef void (^MBLErrorHandler)(NSError *__nullable error); -typedef void (^MBLDataHandler)(NSData *__nullable data, NSError *__nullable error); -typedef void (^MBLObjectHandler)(id __nullable obj, NSError *__nullable error); -typedef void (^MBLArrayHandler)(NSArray *__nonnull array); -typedef void (^MBLArrayErrorHandler)(NSArray *__nullable array, NSError *__nullable error); -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -typedef void (^MBLCentralManagerStateHandler)(CBCentralManagerState state); -#pragma clang diagnostic pop -typedef void (^MBLAccelerometerHandler)(MBLAccelerometerData *__nullable acceleration, NSError *__nullable error); -typedef void (^MBLDeviceInfoHandler)(MBLDeviceInfo *__nullable deviceInfo, NSError *__nullable error); -typedef void (^MBLDecimalNumberHandler)(NSDecimalNumber *__nullable number, NSError *__nullable error); -typedef void (^MBLThresholdHandler)(NSDecimalNumber *__nullable number, BOOL isRising, NSError *__nullable error); -typedef void (^MBLNumberHandler)(NSNumber *__nullable number, NSError *__nullable error); -typedef void (^MBLSwitchStateHandler)(BOOL isPressed, NSError *__nullable error); -typedef void (^MBLBoolHandler)(BOOL isTrue, NSError *__nullable error); -typedef void (^MBLFloatHandler)(float number); -typedef void (^MBLLogRemainingHandler)(uint32_t totalEntries, uint32_t remainingEntries); -typedef void (^MBLStringHandler)(NSString *__nullable string); -typedef void (^MBLFirmwareBuildHandler)(MBLFirmwareBuild *__nullable firmware, NSError *__nullable error); -typedef void (^MBLUrlHandler)(NSURL *__nullable url, NSError *__nullable error); -typedef void (^MBLFirmwareUpdateHandler)(NSURL *__nullable firmwareUrl, CBPeripheral *__nullable target, CBCentralManager *__nullable centralManager, NSError *__nullable error); - -#pragma mark - Errors - -extern NSString *__nonnull const kMBLErrorDomain; - -/*! @abstract 100: Unexpected number of bluetooth services */ -extern NSInteger const kMBLErrorUnexpectedServices; - -/*! @abstract 101: Unexpected number of bluetooth characteristics */ -extern NSInteger const kMBLErrorUnexpectedCharacteristics; - -/*! @abstract 102: Couldn't connect to firmware updater */ -extern NSInteger const kMBLErrorNoFirmwareUpdater; - -/*! @abstract 103: MetaWear object not recognized by MetaWearManager */ -extern NSInteger const kMBLErrorInvalidMetaWearObject; - -/*! @abstract 104: MetaWear not charged enough for firmware update */ -extern NSInteger const kMBLErrorInsufficientCharge; - -/*! @abstract 105: MetaWear firmware version too old */ -extern NSInteger const kMBLErrorOutdatedFirmware; - -/*! @abstract 106: Unexpected disconnect during a connection */ -extern NSInteger const kMBLErrorUnexpectedDisconnect; - -/*! @abstract 107: Timeout during connection */ -extern NSInteger const kMBLErrorConnectionTimeout; - -/*! @abstract 108: Couldn't perform DFU, bad model number given */ -extern NSInteger const kMBLErrorWrongFirmwareModelNumber; - -/*! @abstract 109: Couldn't perform DFU, no valid firmware releases found */ -extern NSInteger const kMBLErrorNoAvailableFirmware; - -/*! @abstract 110: MetaWear not connected, can't perform operation */ -extern NSInteger const kMBLErrorNotConnected; - -/*! @abstract 111: MetaWear out of memory, can't perform action */ -extern NSInteger const kMBLErrorInsufficientMemory; - -/*! @abstract 112: Invalid use of API, can't perform action */ -extern NSInteger const kMBLErrorOperationInvalid; - -/*! @abstract 113: MetaWear had unexpected data */ -extern NSInteger const kMBLErrorUnexpectedData; - -/*! @abstract 114: Exception */ -extern NSInteger const kMBLErrorUnexpectedException; - -/*! @abstract 115: Core Bluetooth not powered on correctly */ -extern NSInteger const kMBLErrorBluetoothPoweredOff; - -/*! @abstract 116: The platform doesn't support the Bluetooth Low Energy Central/Client role */ -extern NSInteger const kMBLErrorBluetoothUnsupported; - -/*! @abstract 117: The application is not authorized to use the Bluetooth Low Energy Central/Client role.*/ -extern NSInteger const kMBLErrorBluetoothUnauthorized; - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLConstants.m b/MetaWear/Classes/Core/MBLConstants.m deleted file mode 100644 index 21a7880..0000000 --- a/MetaWear/Classes/Core/MBLConstants.m +++ /dev/null @@ -1,282 +0,0 @@ -/** - * MBLConstants.m - * MetaWear - * - * Created by Stephen Schiffli on 7/30/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLConstants.h" -#import "MBLConstants+Private.h" - -NSString *const kMBLAPIVersion = @"2.10.0"; -// This needs to get stepped any time we change the layout of any of the classes, -// adding or removing member variables, ect. Or otherwise need apps to have their -// cache cleared when updating to this API. -NSString *const kMBLBinaryVersion = @"1"; - -NSString *MBLFirmwareVersionString(MBLFirmwareVersion version) -{ - switch (version) { - case MBLFirmwareVersion1_0_4: - return @"1.0.4"; - case MBLFirmwareVersion1_0_5: - return @"1.0.5"; - case MBLFirmwareVersion1_0_6: - return @"1.0.6"; - case MBLFirmwareVersion1_0_7: - return @"1.0.7"; - case MBLFirmwareVersion1_1_0: - return @"1.1.0"; - case MBLFirmwareVersion1_1_1: - return @"1.1.1"; - case MBLFirmwareVersion1_1_2: - return @"1.1.2"; - case MBLFirmwareVersion1_2_0: - return @"1.2.0"; - case MBLFirmwareVersion1_2_1: - return @"1.2.1"; - case MBLFirmwareVersion1_2_2: - return @"1.2.2"; - case MBLFirmwareVersion1_2_3: - return @"1.2.3"; - case MBLFirmwareVersion1_2_4: - return @"1.2.4"; - case MBLFirmwareVersion1_2_5: - return @"1.2.5"; - case MBLFirmwareVersion1_3_0: - return @"1.3.0"; - case MBLFirmwareVersion1_3_1: - return @"1.3.1"; - case MBLFirmwareVersion1_3_2: - return @"1.3.2"; - case MBLFirmwareVersion1_3_3: - return @"1.3.3"; - case MBLFirmwareVersion1_3_4: - return @"1.3.4"; - case MBLFirmwareVersion1_3_5: - return @"1.3.5"; - case MBLFirmwareVersion1_3_6: - return @"1.3.6"; - } -} - -NSString *MBLModelString(MBLModel model) -{ - switch (model) { - case MBLModelUnknown: - return @"Unknown"; - case MBLModelMetaWearR: - return @"MetaWear R"; - case MBLModelMetaWearRG: - return @"MetaWear RG"; - case MBLModelMetaWearRPro: - return @"MetaWear RPro"; - case MBLModelMetaWearC: - return @"MetaWear C"; - case MBLModelMetaWearCPro: - return @"MetaWear CPro"; - case MBLModelMetaEnvironment: - return @"MetaEnvironment"; - case MBLModelMetaDetector: - return @"MetaDetector"; - case MBLModelMetaHealth: - return @"MetaHealth"; - case MBLModelMetaTracker: - return @"MetaTracker"; - case MBLModelMetaMotionR: - return @"MetaMotion R"; - case MBLModelMetaMotionC: - return @"MetaMotion C"; - } -} - -NSString *MBLCalibrationAccuracyString(MBLCalibrationAccuracy accuracy) -{ - switch (accuracy) { - case MBLCalibrationAccuracyUnreliable: - return @"Unreliable"; - case MBLCalibrationAccuracyLow: - return @"Low"; - case MBLCalibrationAccuracyMedium: - return @"Medium"; - case MBLCalibrationAccuracyHigh: - return @"High"; - } -} - -#pragma mark - Errors - -NSString *const kMBLErrorDomain = @"com.mbientlab"; - -NSInteger const kMBLErrorUnexpectedServices = 100; -NSInteger const kMBLErrorUnexpectedCharacteristics = 101; -NSInteger const kMBLErrorNoFirmwareUpdater = 102; -NSInteger const kMBLErrorInvalidMetaWearObject = 103; -NSInteger const kMBLErrorInsufficientCharge = 104; -NSInteger const kMBLErrorOutdatedFirmware = 105; -NSInteger const kMBLErrorUnexpectedDisconnect = 106; -NSInteger const kMBLErrorConnectionTimeout = 107; -NSInteger const kMBLErrorWrongFirmwareModelNumber = 108; -NSInteger const kMBLErrorNoAvailableFirmware = 109; -NSInteger const kMBLErrorNotConnected = 110; -NSInteger const kMBLErrorInsufficientMemory = 111; -NSInteger const kMBLErrorOperationInvalid = 112; -NSInteger const kMBLErrorUnexpectedData = 113; -NSInteger const kMBLErrorUnexpectedException = 114; -NSInteger const kMBLErrorBluetoothPoweredOff = 115; -NSInteger const kMBLErrorBluetoothUnsupported = 116; -NSInteger const kMBLErrorBluetoothUnauthorized = 117; - - -static const uint8_t simulatorKey; -static uint8_t simulatorContext; -static const uint8_t metaWearKey; -static uint8_t metaWearContext; - -@implementation MBLConstants - -+ (dispatch_queue_t)metaWearQueue; -{ - static dispatch_queue_t singleton; - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - singleton = dispatch_queue_create("com.mbientlab.metawear.metaWearQueue", DISPATCH_QUEUE_SERIAL); - dispatch_queue_set_specific(singleton, &metaWearKey, &metaWearContext, nil); - }); - return singleton; -} - -+ (dispatch_queue_t)simulatorQueue -{ - static dispatch_queue_t singleton; - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - singleton = dispatch_queue_create("com.mbientlab.metawear.simulator", DISPATCH_QUEUE_SERIAL); - dispatch_queue_set_specific(singleton, &simulatorKey, &simulatorContext, nil); - }); - return singleton; -} - -+ (BOOL)isSimulatorQueue -{ - return (&simulatorContext == dispatch_get_specific(&simulatorKey)); -} - -+ (BOOL)isMetaWearQueue -{ - return ((&metaWearContext == dispatch_get_specific(&metaWearKey)) || [MBLConstants isSimulatorQueue]); -} - -+ (CBUUID *)serviceUUID -{ - return [CBUUID UUIDWithString:@"326A9000-85CB-9195-D9DD-464CFBBAE75A"]; -} -+ (CBUUID *)commandUUID -{ - return [CBUUID UUIDWithString:@"326A9001-85CB-9195-D9DD-464CFBBAE75A"]; -} -+ (CBUUID *)notificationUUID -{ - return [CBUUID UUIDWithString:@"326A9006-85CB-9195-D9DD-464CFBBAE75A"]; -} - -+ (CBUUID *)DFUServiceUUID -{ - return [CBUUID UUIDWithString:@"00001530-1212-EFDE-1523-785FEABCD123"]; -} - -+ (CBUUID *)batteryServiceUUID -{ - return [CBUUID UUIDWithString:@"180F"]; -} -+ (CBUUID *)batteryLifeUUID -{ - return [CBUUID UUIDWithString:@"2A19"]; -} - -+ (CBUUID *)DISServiceUUID -{ - return [CBUUID UUIDWithString:@"180A"]; -} -+ (CBUUID *)DISModelNumberUUID -{ - return [CBUUID UUIDWithString:@"2A24"]; -} -+ (CBUUID *)DISSerialNumberUUID -{ - return [CBUUID UUIDWithString:@"2A25"]; -} -+ (CBUUID *)DISFirmwareRevUUID -{ - return [CBUUID UUIDWithString:@"2A26"]; -} -+ (CBUUID *)DISHardwareRevUUID -{ - return [CBUUID UUIDWithString:@"2A27"]; -} -+ (CBUUID *)DISManufacturerNameUUID -{ - return [CBUUID UUIDWithString:@"2A29"]; -} - -+ (BOOL)versionString:(NSString *)a isLessThan:(NSString *)b -{ - NSArray *aVersion = [a componentsSeparatedByString:@"."]; - NSArray *bVersion = [b componentsSeparatedByString:@"."]; - long size = MIN(aVersion.count, bVersion.count); - - for (int i = 0; i < size; i++) { - if ([aVersion[i] intValue] == [bVersion[i] intValue]) { - continue; - } - return [aVersion[i] intValue] < [bVersion[i] intValue]; - } - return aVersion.count < bVersion.count; -} - -#define CLAMP(x, low, high) ({\ -__typeof__(x) __x = (x); \ -__typeof__(low) __low = (low);\ -__typeof__(high) __high = (high);\ -__x > __high ? __high : (__x < __low ? __low : __x);\ -}) - -+ (double)clampDouble:(double)x low:(double)low high:(double)high -{ - return CLAMP(x, low, high); -} - -+ (double)clampInt:(int)x low:(int)low high:(int)high -{ - return CLAMP(x, low, high); -} - -@end diff --git a/MetaWear/Classes/Core/MBLData.h b/MetaWear/Classes/Core/MBLData.h deleted file mode 100644 index 80836c7..0000000 --- a/MetaWear/Classes/Core/MBLData.h +++ /dev/null @@ -1,87 +0,0 @@ -/** - * MBLData.h - * MetaWear - * - * Created by Stephen Schiffli on 1/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLEvent; - -NS_ASSUME_NONNULL_BEGIN - -/** - This object represents synchronous data from sensors and peripherals on the MetaWear board. - */ -@interface MBLData : MBLRegister - -typedef void (^MBLDataNotificationHandler)(ResultType __nullable obj, NSError *__nullable error); - -/** - Perform a one time read of the current value, use the returned BFTask to get value. - */ -- (BFTask *)readAsync; - -/** - Create a new event that will periodically read this data a fixed number of times. - @param period Period time in mSec - @param eventCount Number of times event will be triggered, 0xFFFF will repeat forever - @returns New event that will read this data periodically - */ -- (MBLEvent *)periodicReadWithPeriod:(uint32_t)period - eventCount:(uint16_t)eventCount; - -/** - Create a new event that will periodically read this data until canceled. - @param period Period time in mSec - @returns New event that will read this data periodically - */ -- (MBLEvent *)periodicReadWithPeriod:(uint32_t)period; - - -/** - Manually receive callbacks when this data is read, note you need to set up something - else that will perform the actual reads. The type of the object that is passed to the - handler depends on the event being handled - @param handler Block invoked when this data is read - */ -- (void)addNotificationsHandler:(nullable MBLDataNotificationHandler)handler; - -/** - Remove all notification handlers for this data object - */ -- (void)removeNotificationHandlers; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLData.m b/MetaWear/Classes/Core/MBLData.m deleted file mode 100644 index 4e79e9d..0000000 --- a/MetaWear/Classes/Core/MBLData.m +++ /dev/null @@ -1,151 +0,0 @@ -/** - * MBLData.m - * MetaWear - * - * Created by Stephen Schiffli on 1/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLData+Private.h" -#import "MBLRegister+Private.h" -#import "MBLTimer+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLTriggeredRead.h" -#import "MBLConstants+Private.h" -#import "BFTask+MBLPrivate.h" -#import "BFTask+MBLExtensions.h" -#import "MBLDownloadOnlyEvent.h" - - -@implementation MBLData - -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format identifier:(nullable NSString *)identifier -{ - self = [super initWithModule:module registerId:registerId index:index format:format identifier:identifier]; - if (self) { - } - return self; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format identifier:(NSString *)identifier -{ - return [self initWithModule:module registerId:registerId index:0xFF format:format identifier:identifier]; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format -{ - return [self initWithModule:module registerId:registerId index:index format:format identifier:nil]; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format -{ - return [self initWithModule:module registerId:registerId index:0xFF format:format identifier:nil]; -} - -- (BFTask *)simulatedReadAsync:(BOOL)isLocal -{ - assert([MBLConstants isSimulatorQueue]); - MBLMetaWear *device = self.module.device; - - // Increment the simulator queue - [device incrementCount]; - return [[[[[BFTask taskFromExecutor:[BFExecutor metaWearExecutor] withBlock:^id _Nonnull{ - return [self initializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self activateAsync]; - }] continueWithExecutor:[BFExecutor simulatorExecutor] withBlock:^id _Nullable(BFTask * _Nonnull task) { - return isLocal ? [super localReadAsync] : [super readAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - NSAssert(device.command.activatedRegHandler, @"activatedRegHandler need to be set."); - device.command.activatedRegHandler(self, nil); - return task; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; -} - -- (BFTask *)readAsync -{ - if ([MBLConstants isSimulatorQueue]) { - return [self simulatedReadAsync:NO]; - } - - MBLMetaWear *device = self.module.device; - [device incrementCount]; - BFTask __block *resultTask = nil; - return [[[[[[self initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [super readAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - resultTask = task; - return [self deactivateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self deinitializeAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task.faulted ? task : resultTask; - }]; -} - -- (void)addNotificationsHandler:(MBLDataNotificationHandler)handler -{ - dispatch_async([MBLConstants metaWearQueue], ^{ - [super addNotificationWithExecutor:[BFExecutor dispatchExecutor] handler:handler]; - }); -} - -- (void)removeNotificationHandlers -{ - [super removeNotificationHandlers]; -} - -- (BFTask *)addLoggingEntry -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - MBLEvent *event = [[MBLDownloadOnlyEvent alloc] initWithModule:self.module registerId:self.registerId | 0xC0 index:self.index format:self.format]; - [[[event startLoggingAsync] success:^(id _Nonnull result) { - [source trySetResult:event]; - }] failure:^(NSError * _Nonnull error) { - [source trySetError:error]; - }]; - return source.task; -} - -- (MBLEvent *)periodicReadWithPeriod:(uint32_t)period - eventCount:(uint16_t)eventCount -{ - return [[MBLTriggeredRead alloc] initWithData:self period:period eventCount:eventCount]; -} - -- (MBLEvent *)periodicReadWithPeriod:(uint32_t)period -{ - return [self periodicReadWithPeriod:period eventCount:0xFFFF]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLDataSample.h b/MetaWear/Classes/Core/MBLDataSample.h deleted file mode 100644 index 2b1ff57..0000000 --- a/MetaWear/Classes/Core/MBLDataSample.h +++ /dev/null @@ -1,61 +0,0 @@ -/** - * MBLDataSample.h - * MetaWear - * - * Created by Stephen Schiffli on 5/7/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Generic base class for data coming from the MetaWear - */ -@interface MBLDataSample : NSObject - -/* - Date/Time on which this sample was taken - */ -@property (nonatomic, readonly) NSDate *timestamp; -/* - Raw data of the sample - */ -@property (nonatomic, readonly) NSData *data; - -/* - A standardized CSV, new-line terminated representation of the sample - */ -@property (nonatomic, readonly, nullable) NSString *csvRepresentation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLDataSample.m b/MetaWear/Classes/Core/MBLDataSample.m deleted file mode 100644 index 5b91650..0000000 --- a/MetaWear/Classes/Core/MBLDataSample.m +++ /dev/null @@ -1,82 +0,0 @@ -/** - * MBLDataSample.m - * MetaWear - * - * Created by Stephen Schiffli on 5/7/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ -#import "MBLDataSample+Private.h" - -@interface MBLDataSample () -@property (nonatomic) NSDate *timestamp; -@property (nonatomic) NSData *data; -@end - -@implementation MBLDataSample - -- (instancetype)initWithTimestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super init]; - if (self) { - self.timestamp = timestamp; - self.data = data; - } - return self; -} - -- (NSString *)description -{ - if (self.data) { - return [NSString stringWithFormat:@"%@ %@", [NSDateFormatter localizedStringFromDate:self.timestamp - dateStyle:NSDateFormatterMediumStyle - timeStyle:NSDateFormatterMediumStyle], self.data]; - } else { - return [NSDateFormatter localizedStringFromDate:self.timestamp - dateStyle:NSDateFormatterMediumStyle - timeStyle:NSDateFormatterMediumStyle]; - } -} - -- (NSString *)csvRepresentation -{ - uint8_t const *bytes = self.data.bytes; - NSInteger length = self.data.length; - NSMutableString *str = [NSMutableString string]; - if (length > 0) { - [str appendFormat:@"%02X", *bytes]; - bytes++; - } - for (int i = 1; i < length; i++, bytes++) { - [str appendFormat:@"-%02X", *bytes]; - } - return [NSString stringWithFormat:@"%f,%@\n", self.timestamp.timeIntervalSince1970, str]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLDataSwitch.h b/MetaWear/Classes/Core/MBLDataSwitch.h deleted file mode 100644 index 6a91858..0000000 --- a/MetaWear/Classes/Core/MBLDataSwitch.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - * MBLDataSwitch.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The data switch filter conditionally allows the input values to pass. It can either - be on or off, or put into a countdown mode where it allows N samples to pass. - */ -@interface MBLDataSwitch : MBLFilter - -/** - Set the countdown to a specific value. This will allows 'count' values to pass through. - */ -- (BFTask *)resetCountAsync:(uint16_t)count; - -/** - Set the switch to allow samples to pass throught or not. YES will pass samples, NO will not. - */ -- (BFTask *)resetConditionalAsync:(BOOL)pass; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Classes/Core/MBLDataSwitch.m b/MetaWear/Classes/Core/MBLDataSwitch.m deleted file mode 100644 index d1fbe1b..0000000 --- a/MetaWear/Classes/Core/MBLDataSwitch.m +++ /dev/null @@ -1,54 +0,0 @@ -/** - * MBLDataSwitch.m - * MetaWear - * - * Created by Stephen Schiffli on 2/17/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLDataSwitch.h" -#import "MBLEvent+Private.h" -#import "MBLFilter+Private.h" -#import "MBLMetaWear+Private.h" - -@implementation MBLDataSwitch - -- (BFTask *)resetCountAsync:(uint16_t)count -{ - return [self resetStateWithDataAsync:[NSData dataWithBytes:&count length:2]]; -} - -- (BFTask *)resetConditionalAsync:(BOOL)pass -{ - uint16_t value = pass; - return [self resetStateWithDataAsync:[NSData dataWithBytes:&value length:2]]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLDeviceInfo.h b/MetaWear/Classes/Core/MBLDeviceInfo.h deleted file mode 100644 index c9d283c..0000000 --- a/MetaWear/Classes/Core/MBLDeviceInfo.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * MBLDeviceInfo.h - * MetaWear - * - * Created by Stephen Schiffli on 8/12/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for a device revision data - */ -@interface MBLDeviceInfo : NSObject - -/** - Manufacturer Name string - */ -@property (nonatomic) NSString *manufacturerName; -/** - Serial Number string - */ -@property (nonatomic) NSString *serialNumber; -/** - Hardware Revision string - */ -@property (nonatomic) NSString *hardwareRevision; -/** - Firmware Revision string - */ -@property (nonatomic) NSString *firmwareRevision; -/** - Model Number string - */ -@property (nonatomic, nullable) NSString *modelNumber; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLDeviceInfo.m b/MetaWear/Classes/Core/MBLDeviceInfo.m deleted file mode 100644 index d02bae2..0000000 --- a/MetaWear/Classes/Core/MBLDeviceInfo.m +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLDeviceInfo.m - * MetaWear - * - * Created by Stephen Schiffli on 8/12/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLDeviceInfo.h" - -@implementation MBLDeviceInfo - -@end diff --git a/MetaWear/Classes/Core/MBLEntityEvent.h b/MetaWear/Classes/Core/MBLEntityEvent.h deleted file mode 100644 index b6fadbd..0000000 --- a/MetaWear/Classes/Core/MBLEntityEvent.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * MBLEntityEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -/** - Base class for events that need a entry allocated on the MetaWear in order to function - */ -@interface MBLEntityEvent : MBLEvent - -@end diff --git a/MetaWear/Classes/Core/MBLEntityEvent.m b/MetaWear/Classes/Core/MBLEntityEvent.m deleted file mode 100644 index fc76a00..0000000 --- a/MetaWear/Classes/Core/MBLEntityEvent.m +++ /dev/null @@ -1,120 +0,0 @@ -/** - * MBLEntityEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLEntityEvent+Private.h" -#import "MBLEntityModule+Private.h" -#import "MBLDataSample+Private.h" -#import "MBLLogger.h" - -@interface MBLEntityEvent () -@property (nonatomic) NSData *addEntityParameters; -@end - -@implementation MBLEntityEvent - -- (instancetype)initWithModule:(MBLEntityModule *)module - registerId:(uint8_t)registerId - addEntityParameters:(NSData *)addEntityParameters - format:(MBLFormat *)format -{ - // Since all filters get their data through the single timerNotification register in - // the timer module, we create a dummy register which is optionally notified - // when we see a global notification which matches our filter id - self = [super initWithModule:module registerId:registerId format:format]; - if (self) { - self.addEntityParameters = addEntityParameters; - } - return self; -} - -- (BFTask *)isStateValid -{ - MBLEntityModule *module = (MBLEntityModule *)self.module; - return [[module.addEntity readForcedIndexAsync:self.index] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - MBLDataSample *result = task.result; - NSData *actualData = result.data; - NSData *expectedData = self.addEntityParameters; - if (actualData.length >= expectedData.length) { - if ([expectedData isEqualToData:[actualData subdataWithRange:NSMakeRange(0, expectedData.length)]]) { - return [BFTask taskWithResult:@YES]; - } - } - MBLLog(MBLLogLevelInfo, @"%@: Entity[%d] expected != actual (%@ != %@)", self.module, self.index, expectedData, actualData); - return [BFTask taskWithResult:@NO]; - }]; -} - -- (BFTask *)performAsyncInitialization -{ - MBLEntityModule *module = (MBLEntityModule *)self.module; - return [module performAsyncInitializationForEntity:self]; -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLEntityModule *module = (MBLEntityModule *)self.module; - return [module performAsyncDeinitializationForEntity:self]; -} - -- (BFTask *)performAsyncActivation -{ - MBLEntityModule *module = (MBLEntityModule *)self.module; - return [module performAsyncActivationForEntity:self]; -} - -- (BFTask *)performAsyncDeactivation -{ - MBLEntityModule *module = (MBLEntityModule *)self.module; - return [module performAsyncDeactivationForEntity:self]; -} - -- (BFTask *)performAsyncStartNotifications -{ - MBLEntityModule *module = (MBLEntityModule *)self.module; - return [[module startNotificationsForEntity:self] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [super performAsyncStartNotifications]; - }]; -} - -- (BFTask *)performAsyncStopNotificationsAsync -{ - MBLEntityModule *module = (MBLEntityModule *)self.module; - return [[super performAsyncStopNotificationsAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [module stopNotificationsAsyncForEntity:self]; - }]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLEntityModule.h b/MetaWear/Classes/Core/MBLEntityModule.h deleted file mode 100644 index 0ac57c0..0000000 --- a/MetaWear/Classes/Core/MBLEntityModule.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * MBLEntityModule.h - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -/** - Base class for modules that need a entries allocated on the MetaWear in order to function - */ -@interface MBLEntityModule : MBLModule - -@end diff --git a/MetaWear/Classes/Core/MBLEntityModule.m b/MetaWear/Classes/Core/MBLEntityModule.m deleted file mode 100644 index de7dc77..0000000 --- a/MetaWear/Classes/Core/MBLEntityModule.m +++ /dev/null @@ -1,222 +0,0 @@ -/** - * MBLEntityModule.m - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLEntityModule+Private.h" - -@interface MBLEntityModule () -@property (nonatomic) int activeNotifications; -@property (nonatomic) NSMutableArray *entities; -@property (nonatomic) int maxEntities; - -@property (nonatomic) MBLRegister *addEntity; -@property (nonatomic) MBLRegister *removeEntity; -@property (nonatomic) MBLRegister *activateEntity; -@property (nonatomic) MBLRegister *deactivateEntity; - -@property (nonatomic) MBLRegister *globalNotifications; -@property (nonatomic) MBLRegister *notificationEnable; -@end - -@implementation MBLEntityModule - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.activeNotifications = 0; - self.entities = [NSMutableArray array]; - self.maxEntities = 0; - } - return self; -} - - -- (BFTask *)performAsyncInitializationForEntity:(MBLEntityEvent *)entity -{ - if (!self.addEntity) { - return [BFTask taskWithResult:nil]; - } - - return [[BFTask taskFromMetaWearWithBlock:^id _Nonnull { - NSError *error = nil; - if (entity.index != 0xFF) { - error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't initialize entity that's already initialized"}]; - } - if (self.entities.count >= self.maxEntities) { - error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorInsufficientMemory - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"MetaWear out of memory, can't perform action. Reset the MetaWear and use no more than %d entities", self.maxEntities]}]; - } - if (error) { - return [BFTask taskWithError:error]; - } - [self.entities addObject:entity]; - return [self.addEntity writeDataAsync:entity.addEntityParameters]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - [self.entities removeObject:entity]; - } else { - MBLDataSample *obj = task.result; - entity.index = *(uint8_t *)obj.data.bytes; - } - return task; - }]; -} - -- (BFTask *)performAsyncDeinitializationForEntity:(MBLEntityEvent *)entity -{ - if (!self.removeEntity) { - return [BFTask taskWithResult:nil]; - } - - return [[BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (entity.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't deinitialize entity that's not initialized"}]; - return [BFTask taskWithError:error]; - } - return [self.removeEntity writeByteAsync:entity.index]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - entity.index = 0xFF; - [self.entities removeObject:entity]; - return nil; - }]; -} - -- (BFTask *)performAsyncActivationForEntity:(MBLEntityEvent *)entity -{ - if (!self.activateEntity) { - return [BFTask taskWithResult:nil]; - } - - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (entity.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't deinitialize entity that's not initialized"}]; - return [BFTask taskWithError:error]; - } - return [self.activateEntity writeByteAsync:entity.index]; - }]; -} - -- (BFTask *)performAsyncDeactivationForEntity:(MBLEntityEvent *)entity -{ - if (!self.deactivateEntity) { - return [BFTask taskWithResult:nil]; - } - - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (entity.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't deinitialize entity that's not initialized"}]; - return [BFTask taskWithError:error]; - } - return [self.deactivateEntity writeByteAsync:entity.index]; - }]; -} - -- (BFTask *)startNotificationsForEntity:(MBLEntityEvent *)entity -{ - if (!self.globalNotifications || !self.notificationEnable) { - return [BFTask taskWithResult:nil]; - } - - return [[BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - // Turn on notifications for this filter - if (entity.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't start notifications for entity that's not initialized"}]; - return [BFTask taskWithError:error]; - } - uint8_t packet[] = { entity.index, 0x1 }; - return [self.notificationEnable writeDataAsync:[NSData dataWithBytes:&packet length:2]]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.activeNotifications++; - if (self.activeNotifications == 1) { - // Turn on global notifications - return [self.globalNotifications startNotificationsWithHandlerAsync:nil]; - } - return nil; - }]; -} - -- (BFTask *)stopNotificationsAsyncForEntity:(MBLEntityEvent *)entity -{ - if (!self.globalNotifications || !self.notificationEnable) { - return [BFTask taskWithResult:nil]; - } - - return [[BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - self.activeNotifications--; - if (self.activeNotifications == 0) { - // Turn off global notifications - return [self.globalNotifications stopNotificationsAsync]; - } - NSAssert(self.activeNotifications >= 0, @"Start/Stop notification calls unbalanced."); - self.activeNotifications = MAX(self.activeNotifications, 0); - return nil; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Turn off notifications for this filter - if (entity.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't stop notifications for entity that's not initialized"}]; - return [BFTask taskWithError:error]; - } - uint8_t data[] = { entity.index, 0x0 }; - return [self.notificationEnable writeDataAsync:[NSData dataWithBytes:&data length:2]]; - }]; -} - -- (BFTask *)isStateValid -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - NSMutableArray *tasks = [NSMutableArray array]; - [tasks addObject:[BFTask taskWithResult:@YES]]; // Base case - for (MBLEntityEvent *entity in self.entities) { - [tasks addObject:[entity isStateValid]]; - } - return [BFTask taskForCompletionOfAllTasksWithResults:tasks]; - }]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLEvent.h b/MetaWear/Classes/Core/MBLEvent.h deleted file mode 100644 index 55f5ff3..0000000 --- a/MetaWear/Classes/Core/MBLEvent.h +++ /dev/null @@ -1,428 +0,0 @@ -/** - * MBLEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 10/8/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - -@class MBLData; -@class MBLFilter; -@class MBLDataSwitch; -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Supported Comparison filter operations - */ -typedef NS_ENUM(uint8_t, MBLComparisonOperation) { - MBLComparisonOperationEqual = 0, - MBLComparisonOperationNotEqual = 1, - MBLComparisonOperationLessThan = 2, - MBLComparisonOperationLessThanOrEqual = 3, - MBLComparisonOperationGreaterThan = 4, - MBLComparisonOperationGreaterThanOrEqual = 5 -}; -/** - Supported Comparison filter output types - */ -typedef NS_ENUM(uint8_t, MBLComparisonOutput) { - MBLComparisonOutputValue = 0, - MBLComparisonOutputRightHandSide = 1, - MBLComparisonOutputZone = 2, - MBLComparisonOutputBinary = 3 -}; - -/** - Supported Arithmetic filter operations - */ -typedef NS_ENUM(uint8_t, MBLArithmeticOperation) { - MBLArithmeticOperationNoOp = 0, - MBLArithmeticOperationAdd = 1, - MBLArithmeticOperationMultiply = 2, - MBLArithmeticOperationDivide = 3, - MBLArithmeticOperationModulus = 4, - MBLArithmeticOperationExponent = 5, - MBLArithmeticOperationSquareRoot = 6, - MBLArithmeticOperationLeftShift = 7, - MBLArithmeticOperationRightShift = 8, - MBLArithmeticOperationSubtract = 9, - MBLArithmeticOperationAbsoluteValue = 10, - MBLArithmeticOperationConstantOutput = 11 -}; - -/** - Pluse filter output types - */ -typedef NS_ENUM(uint8_t, MBLPulseOutput) { - MBLPulseOutputWidth = 0, - MBLPulseOutputArea = 1, - MBLPulseOutputPeak = 2, - MBLPulseOutputOnDetection = 3 -}; - -/** - Delta value filter output types - */ -typedef NS_ENUM(uint8_t, MBLDeltaValueOutput) { - MBLDeltaValueOutputAbsolute = 0, // Output is Value - MBLDeltaValueOutputDifferential = 1, // Output is Delta From Last - MBLDeltaValueOutputBinary = 2 // Output is 1 if Increased, -1 if Decreased -}; - -/** - Threshold value filter output types - */ -typedef NS_ENUM(uint8_t, MBLThresholdValueOutput) { - MBLThresholdValueOutputAbsolute = 0, // Output is Value - MBLThresholdValueOutputBinary = 1, // Output is 1 rising edge, -1 if falling -}; - -/** - This object represents "events" generated by sensors and peripherals on the MetaWear board. - - There are several things you can do when an event occurs, all of which are programmable using - this object, they are: - - 1. Send notifications to the connected iOS device when the event occurs, see - startNotificationsWithHandlerAsync: and stopNotificationsAsync - 2. Program other commands to be executed offline on the MetaWear device when the event occurs, - see programCommandsToRunOnEventAsync: and eraseCommandsToRunOnEventAsync. - 3. Log the event in the MetaWear's flash storage, see startLoggingAsync and - downloadLogAndStopLogging:handler:progressHandler: - 4. Pass the event data into a filter, which and process the data in some way and outputs the result - in a new MBLEvent. See summationOfEvent and periodicSampleOfEvent:. - - ## Examples - Consider the switch update event, [MBLMechanicalSwitch switchUpdateEvent]. - -**Notifications**: - - If you call startNotificationsWithHandlerAsync: and keep a live connection to the MetaWear, - any time you press or release the switch you will get a callback to the provided block. - - [device.mechanicalSwitch.switchUpdateEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - // Handle the button press/release - }]; - - **Logging**: - - If you call startLoggingAsync, then anytime you press or release the button, an entry will - be created in the log which can be download later using downloadLogAndStopLogging:handler:progressHandler:. - - [device.mechanicalSwitch.switchUpdateEvent startLoggingAsync]; - // Some time later.. - [device.mechanicalSwitch.switchUpdateEvent downloadLogAndStopLogging:YES/NO handler:{...} progressHandler:{...}]; - - **Commands**: - - If you want the device to buzz when you press the switch then you would do the following: - - [device.mechanicalSwitch.switchUpdateEvent programCommandsToRunOnEventAsync:^{ - [device.hapticBuzzer startHapticWithDutyCycle:248 pulseWidth:500 completion:nil] - }]; - - **Processing**: - - If you want to log a running count of pushbutton events, you could do the following: - - MBLEvent *event = [device.mechanicalSwitch.switchUpdateEvent summationOfEvent]; - [event startLoggingAsync]; - // Some time later.. - [event downloadLogAndStopLogging:YES/NO handler:{...} progressHandler:{...}]; - - ## Gotchas - - @warning Calling summationOfEvent or any other filter method returns a freshly created - MBLEvent object which you must retain for later use. This is different from the MBLEvent - properties on the various modules which internally save the MBLEvent object and always return - the same pointer through the property. - @warning Since all MBLEvent's are invalidated on disconnect, you need a way to restore your - custom event on reconnect. This is where the MBLRestorable comes in, you can call - setConfiguration:handler: on the MBLMetaWear object to save any properties on your custom - MBLRestorable object. - */ -@interface MBLEvent : MBLRegister - -typedef void (^MBLNotificationHandler)(ResultType __nullable obj, NSError *__nullable error); - -///---------------------------------- -/// @name Notifications -///---------------------------------- - -/** - Start receiving callbacks when this event occurs. The type of the - object that is passed to the handler depends on the event being handled - @param handler Block invoked when this event occus - */ -- (BFTask *)startNotificationsWithHandlerAsync:(nullable MBLNotificationHandler)handler NS_SWIFT_NAME(startNotificationsAsync(handler:)); -/** - Stop receiving callbacks when this event occurs, and release the block provided - to startNotificationsWithHandlerAsync: - */ -- (BFTask *)stopNotificationsAsync; -/** - See if this event currently has notifications enabled - @returns YES if logging, NO otherwise - */ -- (BOOL)isNotifying; - -///---------------------------------- -/// @name Commands -///---------------------------------- - -/** - This method is used for programing the Metawear device to perform actions - automatically. - - Any time this even occurs you can have it trigger other - Metawear API calls even when the phone isn't connected. - When this method is called, the given block executed and checked for - validity. All Metawear API calls inside the block are sent to the device - for execution later. - @warning THE BLOCK IS ONLY EXECUTED ONCE DURNING THIS CALL AND - NEVER AGAIN, DON'T ATTEMPT TO USE CALLBACKS INSIDE THIS BLOCK - @param block Block consisting of API calls to make when this event occus - */ -- (BFTask *)programCommandsToRunOnEventAsync:(MBLVoidHandler)block NS_SWIFT_NAME(programCommandsToRunOnEventAsync(block:)); -/** - Removes all commands setup when calling programCommandsToRunOnEventAsync: - */ -- (BFTask *)eraseCommandsToRunOnEventAsync; -/** - See if this event currently has commands programmed to run - @returns YES if has commands, NO otherwise - */ -- (BOOL)hasCommands; - -///---------------------------------- -/// @name Logging -///---------------------------------- - -/** - Start recording notifications for this event. - - Each time this event occus an entry is made into non-volatile flash memory - that is on the metawear device. This is useful for tracking things while the - phone isn't connected to the Metawear - */ -- (BFTask *)startLoggingAsync; -/** - Fetch contents of log from MetaWear device, and optionally turn off logging. - - Executes the progressHandler periodically with the progress (0.0 - 1.0), - progressHandler will get called with 1.0 before handler is called. The handler - is passed an array of entries, the exact class of the entry depends on what is - being logged. For example, the accelerometer log returns an array of MBLAccelerometerData's - @param stopLogging YES: Stop logging the current event, NO: Keep logging the event after download - @param progressHandler Periodically called while log download is in progress - */ -- (BFTask *> *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging progressHandler:(nullable MBLFloatHandler)progressHandler; -- (BFTask *> *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging remainingHandler:(nullable MBLLogRemainingHandler)remainingHandler; -- (BFTask *> *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging; - -/** - Stop logging this event, but don't initiate a download. - - @returns Task whose completion value is the total number of entries in the log. - Note this size is for all events beging logged on the device. - */ -- (BFTask *)stopLoggingAsync; - -/** - See if this event is currently being logged - @returns YES if logging, NO otherwise - */ -- (BOOL)isLogging; - - -///---------------------------------- -/// @name Processing Filters -///---------------------------------- - -/** - Create a new event that allows input samples to pass or not. Event callbacks - will be provided the same object as the input. - @param pass Initially allow samples to pass or not - @returns New event that conditionally represents the input - */ -- (MBLDataSwitch *)conditionalDataSwitch:(BOOL)pass; - -/** - Create a new event that allows N input samples to pass to the output. - After N samples, no further events will be generated. Event callbacks - will be provided the same object as the input. - @param initialCount Number of samples to allow through - @returns New event representing N events of the input - */ -- (MBLDataSwitch *)countingDataSwitch:(uint16_t)initialCount; - -/** - Create a new event that accumulates the output data values of the current event. - Event callbacks will be provided the same object as the input. - @returns New event representing accumulated output - */ -- (MBLFilter *)summationOfEvent; - -/** - Create a new event that accumulates the number of times the current event fires. - Event callbacks will be provided an MBLNumericData data object whose int value - will be the number of times the input event fired. - @returns New event representing counted intput - */ -- (MBLFilter *)counterOfEvent; - -/** - Create a new event that averages the output data of the current event. This - uses a recursive average technique so the answers are approximate. This can be - thought of as a LOW-PASS filter. - Event callbacks will be provided the same object as the input. - @param depth Number of samples to average (works fastest if a power of 2) - @returns New event representing average of input - */ -- (MBLFilter *)averageOfEventWithDepth:(uint8_t)depth; - -/** - Create a new event that subtracts a rolling average of the current event. This - uses a recursive average technique so the answers are approximate. This can be - thought of as a HIGH-PASS filter. - Event callbacks will be provided the same object as the input. - @param depth Number of samples to average (works fastest if a power of 2) - @returns New event representing average of input - */ -- (nullable MBLFilter *)highPassOfEventWithDepth:(uint8_t)depth; - -/** - Create a new event that compares the current event's value to one or more data points - @param op Operation type to perform - @param data Array of values to compare against - @param output Type of data to output - @returns New event representing input values that meet the comparison condition - */ -- (MBLFilter *)compareEventUsingOperation:(MBLComparisonOperation)op data:(NSArray *)data output:(MBLComparisonOutput)output; - -/** - Create a new event that modifies the current event's value using a basic math operation - @param op Operation type to perform - @param data Right hand side of the operation - @returns New event representing input values that have been modified - */ -- (MBLFilter *)modifyEventUsingOperation:(MBLArithmeticOperation)op withData:(double)data; -/** - Create a new event that modifies the current event's value using a basic math operation - @param op Operation type to perform - @param data Right hand side of the operation - @param outputLength Size of the output, defaults to 4 unless specified here - @returns New event representing input values that have been modified - */ -- (MBLFilter *)modifyEventUsingOperation:(MBLArithmeticOperation)op withData:(double)data outputLength:(uint8_t)outputLength; - -/** - Create a new event that occurs at most once every period milliseconds. - Event callbacks will be provided the same object as the input. - @param periodInMsec Sample period in msec - @returns New event representing periodically sampled output - */ -- (MBLFilter *)periodicSampleOfEvent:(uint32_t)periodInMsec; - -/** - Create a new event that represents the difference bettween the current event - every periodInMsec milliseconds. This acts a differential filter giving you - the changed in value of a signal. Event callbacks will be provided the same - object as the input. - @param periodInMsec Sample period in msec - @returns New event representing differential output - */ -- (MBLFilter *)differentialSampleOfEvent:(uint32_t)periodInMsec; - -/** - Create a new event that delays the current even by a given number of samples. - Event callbacks will be provided the same object as the input. - @param count Number of samples to delay - @returns New event representing a delayed version of the input - */ -- (MBLFilter *)delayOfEventWithCount:(uint8_t)count; - -/** - Create a new event that represents a pulse of the input. A pulse event will be - generated when the input event crosses below threshold after first staying above - threshold for width samples. - If the output type is MBLPulseOutputArea or MBLPulseOutputPeak, then event - callbacks will be provided the same object as the input. MBLPulseOutputWidth - output, however, will be provided MBLNumericData objects. - @param threshold Min value considered to be a pulse - @param width Number of samples input must stay above threshold to be considered a valid pulse - @param output Select the type of data this filter should output - @returns New event representing a pulse of the input - */ -- (MBLFilter *)pulseDetectorOfEventWithThreshold:(double)threshold width:(uint16_t)width output:(MBLPulseOutput)output; - -/** - Create a new event that occurs when the given event changes by a specified delta. - If the output type is MBLDeltaValueOutputAbsolute or MBLDeltaValueOutputDifferential, - then event callbacks will be provided the same object as the input. MBLDeltaValueOutputBinary - output, however, will be provided MBLNumericData objects. - @param delta Magnitude of change that must occur for event to take place - @param output Select the type of data this filter should output - @returns New event representing a changed of the input - */ -- (MBLFilter *)changeOfEventByDelta:(double)delta output:(MBLDeltaValueOutput)output; - -/** - Create a new event that occurs when the given event crosses a specified threshold. - Event callbacks will be provided the same object as the input. - @param threshold Value the event must cross for event to take place - @param hysteresis Hysteresis on crossing to eliminate oscillation - @param output Select the type of data this filter should output - @returns New event representing a changed of the input - */ -- (MBLFilter *)changeOfEventAcrossThreshold:(double)threshold hysteresis:(double)hysteresis output:(MBLThresholdValueOutput)output; - -/** - Create a new event that occurs at the same time of this event, but whose value is - read from the data object passed in. - @param data Object to be read when this event occurs - @returns New event representing the data read - */ -- (MBLEvent *)readDataOnEvent:(MBLData *)data; - -///---------------------------------- -/// @name Deprecated -///---------------------------------- -// @deprecated -- (MBLFilter *)compareEventUsingOperation:(MBLComparisonOperation)op withData:(double)data DEPRECATED_MSG_ATTRIBUTE("Use compareEventUsingOperation:data:output instead"); -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLEvent.m b/MetaWear/Classes/Core/MBLEvent.m deleted file mode 100644 index d27d473..0000000 --- a/MetaWear/Classes/Core/MBLEvent.m +++ /dev/null @@ -1,977 +0,0 @@ -/** - * MBLEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 10/8/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLTriggeredRead.h" -#import "MBLFilter+Private.h" -#import "MBLDataSwitch.h" -#import "MBLConversion.h" -#import "MBLConstants+Private.h" -#import "BFTask+MBLPrivate.h" -#import "MBLDeviceInfo.h" - - -@interface MBLEvent () -@property (nonatomic) NSMutableArray *loggingIds; -@property (nonatomic) NSMutableArray *commandIds; -@property (nonatomic) NSMutableArray *commandActivatedRegisters; -@end - -@implementation MBLEvent - -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format identifier:(nullable NSString *)identifier -{ - self = [super initWithModule:module registerId:registerId index:index format:format identifier:identifier]; - if (self) { - self.loggingIds = [NSMutableArray array]; - self.commandIds = [NSMutableArray array]; - self.commandActivatedRegisters = [NSMutableArray array]; - } - return self; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format identifier:(NSString *)identifier -{ - return [self initWithModule:module registerId:registerId index:0xFF format:format identifier:identifier]; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format -{ - return [self initWithModule:module registerId:registerId index:index format:format identifier:nil]; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format -{ - return [self initWithModule:module registerId:registerId index:0xFF format:format identifier:nil]; -} - -- (nonnull BFTask *)startNotificationsWithHandlerAsync:(nullable MBLObjectHandler)handler -{ - return [super startNotificationsWithHandlerAsync:handler]; -} - -- (nonnull BFTask *)stopNotificationsAsync -{ - return [super stopNotificationsAsync]; -} - -- (BOOL)isNotifying -{ - BOOL __block result; - assert(![MBLConstants isMetaWearQueue]); - dispatch_sync([MBLConstants metaWearQueue], ^{ - result = self.isNotifyingImpl; - }); - return result; -} - -- (nonnull BFTask *)programCommandsToRunOnEventAsync:(nonnull MBLVoidHandler)block -{ - MBLMetaWear *device = self.module.device; - if (device.state != MBLConnectionStateConnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before streaming data."}]; - return [BFTask taskWithError:error]; - } - - [device incrementCount]; - return [[BFTask taskFromMetaWearWithBlock:^id{ - if (self.hasCommandsImpl) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Cannot call programCommandsToRunOnEventAsync: if it's already programmed. Please call eraseCommandsToRunOnEventAsync first."}]; - return [BFTask taskWithError:error]; - } - self.hasCommandsImpl = YES; - return [[[[self initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [device.command programCommandsToRunOnEventAsync:self commands:block]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self activateAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.hasCommandsImpl = NO; - } - return task; - }]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; -} - -- (nonnull BFTask *)eraseCommandsToRunOnEventAsync -{ - MBLMetaWear *device = self.module.device; - if (device.state != MBLConnectionStateConnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before erasing commands."}]; - return [BFTask taskWithError:error]; - } - - [device incrementCount]; - return [[BFTask taskFromMetaWearWithBlock:^id{ - if (!self.hasCommandsImpl) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Cannot call eraseCommandsToRunOnEventAsync since it's not already programmed. Please call programCommandsToRunOnEventAsync: first."}]; - return [BFTask taskWithError:error]; - } - self.hasCommandsImpl = NO; - return [[[[self deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [device.command eraseCommandsToRunOnEventAsync:self]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self deinitializeAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.hasCommandsImpl = YES; - } - return task; - }]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; -} - -- (BOOL)hasCommands -{ - BOOL __block result; - assert(![MBLConstants isMetaWearQueue]); - dispatch_sync([MBLConstants metaWearQueue], ^{ - result = self.hasCommandsImpl; - }); - return result; -} - -- (nonnull BFTask *)startLoggingAsync -{ - MBLMetaWear *device = self.module.device; - if (device.state != MBLConnectionStateConnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before starting log."}]; - return [BFTask taskWithError:error]; - } - - [device incrementCount]; - return [[BFTask taskFromMetaWearWithBlock:^id{ - if (self.isLoggingImpl) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Cannot call startLoggingAsync if it's already logging. Please call downloadLogAndStopLoggingAsync: first."}]; - return [BFTask taskWithError:error]; - } - self.isLoggingImpl = YES; - // Clear out the logging id's - [self.loggingIds removeAllObjects]; - return [[[[self initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.module.device.logging startLoggingAsyncEvent:self]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self activateAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.isLoggingImpl = NO; - } - return task; - }]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; -} - -- (BFTask *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging remainingHandler:(MBLLogRemainingHandler)remainingHandler -{ - MBLMetaWear *device = self.module.device; - if (device.state != MBLConnectionStateConnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before downloading log."}]; - return [BFTask taskWithError:error]; - } - - [device incrementCount]; - return [[[BFTask taskFromMetaWearWithBlock:^id{ - if (stopLogging) { - return [self stopLoggingAsync]; - } - return nil; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [device.logging downloadLogEvents:self remainingHandler:remainingHandler]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; -} - -- (BFTask *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging - progressHandler:(MBLFloatHandler)progressHandler -{ - MBLLogRemainingHandler remainingHandler = nil; - if (progressHandler) { - remainingHandler = ^(uint32_t totalEntries, uint32_t remainingEntries) { - float progress = (float)(totalEntries - remainingEntries) / (float)(totalEntries); - // Make sure progress is always [0.0,1.0] - progress = MIN(progress, 1.0); - progress = MAX(progress, 0.0); - progressHandler(progress); - }; - } - return [self downloadLogAndStopLoggingAsync:stopLogging remainingHandler:remainingHandler]; -} - -- (BFTask *)downloadLogAndStopLoggingAsync:(BOOL)stopLogging -{ - return [self downloadLogAndStopLoggingAsync:stopLogging progressHandler:nil]; -} - -- (BFTask *)stopLoggingAsync -{ - MBLMetaWear *device = self.module.device; - if (device.state != MBLConnectionStateConnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before using the API."}]; - return [BFTask taskWithError:error]; - } - - [device incrementCount]; - return [[[BFTask taskFromMetaWearWithBlock:^id{ - if (self.isLoggingImpl) { - self.isLoggingImpl = NO; - - return [[[[[self deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [device.logging stopLoggingEvent:self]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self deinitializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Since log downloads take a while, let's save state here - return [device synchronizeAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.isLoggingImpl = YES; - } - return task; - }]; - } - return nil; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [device.logging.logLength readAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; -} - -- (BOOL)isLogging -{ - BOOL __block result; - assert(![MBLConstants isMetaWearQueue]); - dispatch_sync([MBLConstants metaWearQueue], ^{ - result = self.isLoggingImpl; - }); - return result; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t mode:3; - uint8_t :5; - uint16_t initial_en_value; -} df_pass_param_t; - -- (MBLDataSwitch *)conditionalDataSwitch:(BOOL)pass -{ - df_pass_param_t params = {0}; - params.filter_id = 1; - params.mode = 1; - params.initial_en_value = pass; - - // We make a copy of the formatter because we the filter will remove any offset - MBLFormat *formatClone = [self.format copy]; - formatClone.offset = 0; - - MBLDataSwitch *filter = [[MBLDataSwitch alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_pass_param_t)] - format:formatClone]; - return filter; -} - -- (MBLDataSwitch *)countingDataSwitch:(uint16_t)initialCount -{ - df_pass_param_t params = {0}; - params.filter_id = 1; - params.mode = 2; - params.initial_en_value = initialCount; - - // We make a copy of the formatter because we the filter will remove any offset - MBLFormat *formatClone = [self.format copy]; - formatClone.offset = 0; - - MBLDataSwitch *filter = [[MBLDataSwitch alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_pass_param_t)] - format:formatClone]; - return filter; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t countlen:2; - uint8_t inputlen:2; - uint8_t mode:3; -} df_count_param_t; - -- (MBLFilter *)summationOfEvent -{ - const int outputSize = 4; - if (self.format.length > outputSize) { - [NSException raise:@"Invalid Filter" format:@"Can't use summation filter with events of size > 4, %d invalid", self.format.length]; - } - - df_count_param_t params = {0}; - params.filter_id = 2; - params.countlen = outputSize - 1; - params.inputlen = self.format.length - 1; - params.mode = 0; - - // We make a copy of the formatter because we want to force it to 4 byte length, and remove offset - MBLFormat *formatClone = [self.format copy]; - formatClone.length = outputSize; - formatClone.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_count_param_t)] - format:formatClone]; - return filter; -} - -- (MBLFilter *)counterOfEvent -{ - df_count_param_t params = {0}; - params.filter_id = 2; - params.countlen = 4 - 1; - params.inputlen = 0; - params.mode = 1; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_count_param_t)] - format:[[MBLNumericFormatter alloc] initIntWithLength:4 isSigned:NO]]; - return filter; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t output_length:2; - uint8_t input_length:2; - uint8_t average_depth; -} low_mem_average_param_t; - -- (MBLFilter *)averageOfEventWithDepth:(uint8_t)depth -{ - // A new vector implemntation showed up in firmware 1.3.4 - NSString *curVersion = self.module.device.deviceInfo.firmwareRevision; - if (![MBLConstants versionString:curVersion isLessThan:@"1.3.4"]) { - return [self vectorAverageWithDepth:depth highPass:NO]; - } - const int outputSize = 4; - if (self.format.length > outputSize) { - [NSException raise:@"Invalid Filter" format:@"Can't use event with size > 4, %d invalid", self.format.length]; - } - - low_mem_average_param_t params = {0}; - params.filter_id = 3; - params.input_length = self.format.length - 1; - params.output_length = outputSize - 1; - params.average_depth = depth; - - // We make a copy of the formatter because we want to force it to 4 byte length and remove offset - MBLFormat *formatClone = [self.format copy]; - formatClone.length = outputSize; - formatClone.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(low_mem_average_param_t)] - format:formatClone]; - return filter; -} - -- (MBLFilter *)highPassOfEventWithDepth:(uint8_t)depth -{ - // High pass filter showed up in firmware 1.3.4 - NSString *curVersion = self.module.device.deviceInfo.firmwareRevision; - if ([MBLConstants versionString:curVersion isLessThan:@"1.3.4"]) { - return nil; - } - return [self vectorAverageWithDepth:depth highPass:YES]; -} - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t outputlen:2; - uint8_t inputlen:2; - uint8_t issigned:1; - uint8_t mode:1; - uint8_t :2; - uint8_t depth; - uint8_t vectorlen; -} df_lowmem_avg_param_t; - -- (MBLFilter *)vectorAverageWithDepth:(uint8_t)depth highPass:(BOOL)highPass -{ - uint8_t length = self.format.type == MBLFormatTypeArray - ? self.format.length / self.format.elements - : self.format.length; - if (length > 4) { - [NSException raise:@"Invalid Filter" format:@"Can't use event with size > 4, %d invalid", self.format.length]; - } - df_lowmem_avg_param_t params = {0}; - params.filter_id = 3; - params.outputlen = length - 1; - params.inputlen = length - 1; - params.issigned = self.format.isSigned; - params.mode = highPass ? 1 : 0; - params.depth = depth; - params.vectorlen = self.format.elements - 1; - - // We make a copy of the formatter because we the filter will remove any offset - MBLFormat *formatClone = [self.format copy]; - formatClone.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_lowmem_avg_param_t)] - format:formatClone]; - return filter; -} - - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t is_signed:1; - uint8_t datalen:2; - uint8_t operation:3; - uint8_t mode:2; - union __attribute__((packed)) { - uint32_t u32value[3]; - int32_t s32value[3]; - uint16_t u16value[6]; - int16_t s16value[6]; - uint8_t u8value[12]; - int8_t s8value[12]; - }; -} mw_comparison_param_t; - -- (MBLFilter *)compareEventUsingOperation:(MBLComparisonOperation)op data:(NSArray *)data output:(MBLComparisonOutput)output -{ - if (data < 0 && !self.format.isSigned) { - [NSException raise:@"Invalid data" format:@"This event isn't signed, so we cannot compare to negative values"]; - } - if ((self.format.length * data.count) > 12) { - [NSException raise:@"Invalid data" format:@"Too many comparison data points, please reduce"]; - } - - mw_comparison_param_t params = {0}; - params.filter_id = 6; - params.is_signed = self.format.isSigned; - params.datalen = self.format.length - 1; - params.operation = op; - params.mode = output; - - if (self.format.isSigned) { - switch (self.format.length) { - case 4: - for (int i = 0; i < data.count; i++) { - if (![MBLConversion number:[self.format numberFromDouble:data[i].doubleValue] toInt32:¶ms.s32value[i]]) { - [NSException raise:@"Invalid data" format:@"data %f cannot fit in int32", data[i].doubleValue]; - } - } - break; - case 2: - for (int i = 0; i < data.count; i++) { - if (![MBLConversion number:[self.format numberFromDouble:data[i].doubleValue] toInt16:¶ms.s16value[i]]) { - [NSException raise:@"Invalid data" format:@"data %f cannot fit in int16", data[i].doubleValue]; - } - } - break; - case 1: - for (int i = 0; i < data.count; i++) { - if (![MBLConversion number:[self.format numberFromDouble:data[i].doubleValue] toInt8:¶ms.s8value[i]]) { - [NSException raise:@"Invalid data" format:@"data %f cannot fit in int8", data[i].doubleValue]; - } - } - break; - default: - [NSException raise:@"Invalid size" format:@"data size %d cannot be processed", self.format.length]; - } - } else { - switch (self.format.length) { - case 4: - for (int i = 0; i < data.count; i++) { - if (![MBLConversion number:[self.format numberFromDouble:data[i].doubleValue] toUint32:¶ms.u32value[i]]) { - [NSException raise:@"Invalid data" format:@"data %f cannot fit in uint32", data[i].doubleValue]; - } - } - break; - case 2: - for (int i = 0; i < data.count; i++) { - if (![MBLConversion number:[self.format numberFromDouble:data[i].doubleValue] toUint16:¶ms.u16value[i]]) { - [NSException raise:@"Invalid data" format:@"data %f cannot fit in uint16", data[i].doubleValue]; - } - } - break; - case 1: - for (int i = 0; i < data.count; i++) { - if (![MBLConversion number:[self.format numberFromDouble:data[i].doubleValue] toUint8:¶ms.u8value[i]]) { - [NSException raise:@"Invalid data" format:@"data %f cannot fit in uint8", data[i].doubleValue]; - } - } - break; - default: - [NSException raise:@"Invalid size" format:@"data size %d cannot be processed", self.format.length]; - } - } - - MBLFormat *format = nil; - if (output == MBLComparisonOutputZone || output == MBLComparisonOutputBinary) { - format = [[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]; - } else { - // We make a copy of the formatter because we the filter will remove any offset - format = [self.format copy]; - format.offset = 0; - } - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:2 + (self.format.length * data.count)] - format:format]; - return filter; -} - -- (MBLFilter *)compareEventUsingOperation:(MBLComparisonOperation)op withData:(double)data -{ - return [self compareEventUsingOperation:op data:@[[NSNumber numberWithDouble:data]] output:MBLComparisonOutputValue]; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t datalen:3; - uint8_t filter_mode:3; - uint8_t deltat_ms[4]; -} deltat_param_t; - -- (MBLFilter *)periodicSampleOfEvent:(uint32_t)periodInMsec -{ - deltat_param_t params = {0}; - params.filter_id = 8; - if (self.module.device.dataProcessor.moduleInfo.moduleRevision == 0) { - if (self.format.length > 8) { - [NSException raise:@"Invalid Filter" format:@"Can't use periodic sample filter with events of size > 8, %d invalid", self.format.length]; - } - params.datalen = self.format.length - 1; - params.filter_mode = 0; - } else { - params.datalen = 7; // This is now ignored by passthrough output mode - params.filter_mode = 2; - } - uint32_t *tmp = (uint32_t *)params.deltat_ms; - *tmp = periodInMsec; - - // We make a copy of the formatter because we the filter will remove any offset - MBLFormat *formatClone = [self.format copy]; - formatClone.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(deltat_param_t)] - format:formatClone]; - return filter; -} - -- (MBLFilter *)differentialSampleOfEvent:(uint32_t)periodInMsec -{ - if (self.format.length > 8) { - [NSException raise:@"Invalid Filter" format:@"Can't use differential sample filter with events of size > 8, %d invalid", self.format.length]; - } - - deltat_param_t params = {0}; - params.filter_id = 8; - params.datalen = self.format.length - 1; - params.filter_mode = 1; - uint32_t *tmp = (uint32_t *)params.deltat_ms; - *tmp = periodInMsec; - - // We make a copy of the formatter because we the filter will remove any offset - MBLFormat *formatClone = [self.format copy]; - formatClone.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(deltat_param_t)] - format:formatClone]; - return filter; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t outputlen:2; - uint8_t inputlen:2; - uint8_t issigned:1; - uint8_t operation; - uint8_t paramvalue[4]; - uint8_t channel_count; -} df_simplemath_param_t; - -- (MBLFilter *)modifyEventUsingOperation:(MBLArithmeticOperation)op withData:(double)data -{ - return [self modifyEventUsingOperation:op withData:data outputLength:4]; -} - -- (MBLFilter *)modifyEventUsingOperation:(MBLArithmeticOperation)op withData:(double)data outputLength:(uint8_t)outputLength -{ - if (self.format.length > 4) { - [NSException raise:@"Invalid Filter" format:@"Can't use a math filter on data greater than 4 bytes, %d invalid", self.format.length]; - } - BOOL scaleUnits = NO; - BOOL forceUnsigned = NO; - // TODO: Enable these arithmetic modes - switch (op) { - case MBLArithmeticOperationNoOp: - break; - case MBLArithmeticOperationAdd: - scaleUnits = YES; - break; - case MBLArithmeticOperationMultiply: - break; - case MBLArithmeticOperationDivide: - break; - case MBLArithmeticOperationModulus: - scaleUnits = YES; - break; - case MBLArithmeticOperationExponent: - break; - case MBLArithmeticOperationSquareRoot: - break; - case MBLArithmeticOperationLeftShift: - // TODO: Check if array - break; - case MBLArithmeticOperationRightShift: - // TODO: Check if array - break; - case MBLArithmeticOperationSubtract: - scaleUnits = YES; - break; - case MBLArithmeticOperationAbsoluteValue: - forceUnsigned = YES; - break; - case MBLArithmeticOperationConstantOutput: - scaleUnits = YES; - break; - } - - df_simplemath_param_t params = {0}; - params.filter_id = 9; - params.outputlen = outputLength - 1; - params.inputlen = self.format.length - 1; - params.issigned = forceUnsigned ? NO : self.format.isSigned; - params.operation = op; - params.channel_count = 1 - 1; // TODO: Enable this for array types - - if (scaleUnits) { - if (![MBLConversion number:[self.format numberFromDouble:data] toInt32:(int32_t *)¶ms.paramvalue]) { - [NSException raise:@"Invalid data" format:@"data %f cannot fit in int32", data]; - } - } else { - *((int32_t *)¶ms.paramvalue) = (int32_t)round(data); - } - - // We make a copy of the formatter because we want to force remove offset - MBLFormat *formatClone = [self.format copy]; - formatClone.offset = 0; - if (forceUnsigned) { - formatClone.isSigned = NO; - } - formatClone.length = outputLength; - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_simplemath_param_t)] - format:formatClone]; - return filter; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t datalen:2; - uint8_t delay_count; -} df_delay_param_t; - -- (MBLFilter *)delayOfEventWithCount:(uint8_t)count -{ - if (self.format.length > 4) { - [NSException raise:@"Invalid Filter" format:@"Can't use event with size > 4, %d invalid", self.format.length]; - } - - df_delay_param_t params = {0}; - params.filter_id = 0xA; - params.datalen = self.format.length - 1; - params.delay_count = count; - - // We make a copy of the formatter because we the filter will remove any offset - MBLFormat *formatClone = [self.format copy]; - formatClone.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_delay_param_t)] - format:formatClone]; - return filter; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t datalen; - uint8_t triggermode; - uint8_t outputmode; - int32_t threshold; - uint16_t width; -} df_pulse_detector_param_t; - -- (MBLFilter *)pulseDetectorOfEventWithThreshold:(double)threshold width:(uint16_t)width output:(MBLPulseOutput)output -{ - if (self.format.length > 4) { - [NSException raise:@"Invalid Filter" format:@"Can't use event with size > 4, %d invalid", self.format.length]; - } - - df_pulse_detector_param_t params = {0}; - params.filter_id = 0xB; - params.datalen = self.format.length - 1; - params.triggermode = 0; - params.outputmode = output; - params.width = width; - - int32_t thresholdTmp; - if (![MBLConversion number:[self.format numberFromDouble:threshold] toInt32:&thresholdTmp]) { - [NSException raise:@"Invalid data" format:@"threshold %f cannot fit in int32", threshold]; - } - params.threshold = thresholdTmp; - - MBLFormat *format = nil; - // We make a copy of the formatter because we want to force it to 4 byte length - switch (output) { - case MBLPulseOutputArea: - format = [self.format copy]; - format.length = 4; - format.isSigned = YES; - break; - case MBLPulseOutputPeak: - format = [self.format copy]; - format.length = 4; - format.isSigned = YES; - break; - case MBLPulseOutputWidth: - format = [[MBLNumericFormatter alloc] initIntWithLength:4 isSigned:YES]; - break; - case MBLPulseOutputOnDetection: - format = [[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]; - break; - } - format.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_pulse_detector_param_t)] - format:format]; - return filter; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t datalen:2; - uint8_t issigned:1; - uint8_t mode:3; - uint8_t delta[4]; -} df_deltav_param_t; - -- (MBLFilter *)changeOfEventByDelta:(double)delta output:(MBLDeltaValueOutput)output -{ - if (self.format.length > 4) { - [NSException raise:@"Invalid Filter" format:@"Can't use event with size > 4, %d invalid", self.format.length]; - } - if (delta < 0) { - [NSException raise:@"Invalid delta value" format:@"delta cannot be negative"]; - } - - df_deltav_param_t params = {0}; - params.filter_id = 0xC; - params.datalen = self.format.length - 1; - params.issigned = self.format.isSigned; - params.mode = output; - - // TODO: This shouldn't be needed...we only support scaling now - // To get a firmware equivalent unit for delta, we add the requested - // delta to the threshold and convert that to firmware units, then - // subtract off the threshold firmware unit value, giving us a proper delta. - int32_t base; - int32_t basePlusDelta; - if (![MBLConversion number:[self.format numberFromDouble:0] toInt32:&base]) { - [NSException raise:@"Unexpected Error" format:@"Could not encode 0"]; - } - if (![MBLConversion number:[self.format numberFromDouble:delta] toInt32:&basePlusDelta]) { - [NSException raise:@"Invalid delta value" format:@"delta %f cannot fit in uint32", delta]; - } - // Set the difference in the filter params - if (![MBLConversion number:[NSNumber numberWithInt:basePlusDelta - base] toUint32:(uint32_t *)params.delta]) { - [NSException raise:@"Invalid delta value" format:@"delta %f cannot fit in uint32", delta]; - } - - MBLFormat *format = nil; - switch (output) { - case MBLDeltaValueOutputAbsolute: - format = [self.format copy]; - format.isSigned = YES; - break; - case MBLDeltaValueOutputDifferential: - format = [self.format copy]; - format.isSigned = YES; - break; - case MBLDeltaValueOutputBinary: - format = [[MBLNumericFormatter alloc] initIntWithLength:self.format.length isSigned:YES]; - break; - } - format.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_deltav_param_t)] - format:format]; - return filter; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t datalen:2; - uint8_t issigned:1; - uint8_t mode:3; - uint8_t threshold[4]; - uint8_t hysteresis[2]; -} df_thresh_param_t; - -- (MBLFilter *)changeOfEventAcrossThreshold:(double)threshold hysteresis:(double)hysteresis output:(MBLThresholdValueOutput)output -{ - if (hysteresis < 0) { - [NSException raise:@"Invalid hysteresis value" format:@"hysteresis cannot be negative"]; - } - - df_thresh_param_t params = {0}; - params.filter_id = 0xD; - params.datalen = self.format.length - 1; - params.issigned = self.format.isSigned; - params.mode = output; - if (![MBLConversion number:[self.format numberFromDouble:threshold] toInt32:(int32_t *)params.threshold]) { - [NSException raise:@"Invalid threshold value" format:@"threshold %f cannot fit in int32", threshold]; - } - if (![MBLConversion number:[self.format numberFromDouble:hysteresis] toUint16:(uint16_t *)params.hysteresis]) { - [NSException raise:@"Invalid hysteresis value" format:@"hysteresis %f cannot fit in uint16", hysteresis]; - } - - // Binary mode forces the output to +-1, so change formatter to handle that - MBLFormat *format; - if (output == MBLThresholdValueOutputAbsolute) { - format = [self.format copy]; - } else { - format = [[MBLNumericFormatter alloc] initIntWithLength:self.format.length isSigned:YES]; - } - format.offset = 0; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_thresh_param_t)] - format:format]; - return filter; -} - - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t outputlen:2; - uint8_t inputlen:2; - uint8_t inputcount:3; - uint8_t issigned:1; - uint8_t mode:3; -} df_rms_param_t; - -static const int RMS_MODE_RMS = 0; -static const int RMS_MODE_RSS = 1; - -- (MBLFilter *)rmsOfEventWithInputLength:(uint8_t)inputLength inputCount:(uint8_t)inputCount format:(MBLFormat *)format -{ - df_rms_param_t params = {0}; - params.filter_id = 7; - params.outputlen = 4 - 1; - params.inputlen = inputLength - 1; - params.inputcount = inputCount - 1; - params.issigned = YES; - params.mode = RMS_MODE_RMS; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_rms_param_t)] - format:format]; - return filter; -} - -- (MBLFilter *)rssOfEventWithInputLength:(uint8_t)inputLength inputCount:(uint8_t)inputCount format:(MBLFormat *)format -{ - df_rms_param_t params = {0}; - params.filter_id = 7; - params.outputlen = 4 - 1; - params.inputlen = inputLength - 1; - params.inputcount = inputCount - 1; - params.issigned = YES; - params.mode = RMS_MODE_RSS; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_rms_param_t)] - format:format]; - return filter; -} - - -- (MBLEvent *)readDataOnEvent:(MBLData *)data -{ - return [[MBLTriggeredRead alloc] initWithData:data trigger:self]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLFilter.h b/MetaWear/Classes/Core/MBLFilter.h deleted file mode 100644 index e961876..0000000 --- a/MetaWear/Classes/Core/MBLFilter.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - * MBLFilter.h - * MetaWear - * - * Created by Stephen Schiffli on 10/9/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -@class MBLData; - -NS_ASSUME_NONNULL_BEGIN - -/** - The MBLFilter takes an MBLEvent as input, then performs some operation and produces an output. - */ -@interface MBLFilter : MBLEntityEvent - -/** - Reset the internal state of the filter - */ -- (BFTask *)resetAsync; - -/** - Create a new event that will periodically read this filter data until canceled. - @param period Period time in mSec - @returns New event that will read this data periodically - */ -- (MBLEvent *)periodicReadWithPeriod:(uint32_t)period; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLFilter.m b/MetaWear/Classes/Core/MBLFilter.m deleted file mode 100644 index 1215f6a..0000000 --- a/MetaWear/Classes/Core/MBLFilter.m +++ /dev/null @@ -1,185 +0,0 @@ -/** - * MBLFilter.m - * MetaWear - * - * Created by Stephen Schiffli on 10/9/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFilter+Private.h" -#import "MBLEntityEvent+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLTriggeredRead.h" -#import "MBLDependentData.h" -#import "BFTask+MBLPrivate.h" - -typedef struct __attribute__((packed)) { - uint8_t module_id; - uint8_t register_id; - uint8_t index; - uint8_t offset:5; - uint8_t len:3; -} filter_param_t; - -@interface MBLFilter () -@property (nonatomic) MBLEvent *trigger; -@property (nonatomic, weak) MBLData *stateSetResetGet; // The data hold strong reference to us -@property (nonatomic) MBLRegister *parameterModify; -@property (nonatomic) NSData *parameters; -@end - - -@implementation MBLFilter - -- (instancetype)initWithTrigger:(MBLEvent *)trigger - filterParameters:(NSData *)parameters - format:(MBLFormat *)format -{ - // Since all filters get their data through the single processingNotify register in - // the data processing module, we create a dummy register which is optionally notified - // when we see a global notification which matches our filter id - self = [super initWithModule:trigger.module.device.dataProcessor registerId:0x3 addEntityParameters:[NSData data] format:format]; - if (self) { - self.trigger = trigger; - MBLDependentData *stateSetResetGet = [[MBLDependentData alloc] initWithModule:trigger.module.device.dataProcessor registerId:0x4 format:format dependent:self]; - self.stateSetResetGet = stateSetResetGet; - self.parameterModify = [[MBLRegister alloc] initWithModule:trigger.module.device.dataProcessor registerId:0x5 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - self.parameters = parameters; - } - return self; -} - -- (NSData *)generateAddFilterParameters -{ - filter_param_t data = {0}; - data.module_id = self.trigger.module.moduleInfo.moduleId; - data.register_id = self.trigger.registerId; - data.index = self.trigger.index; - data.offset = self.trigger.format.offset; - data.len = self.trigger.format.length - 1; - - NSMutableData *addFilterData = [NSMutableData dataWithBytes:&data length:sizeof(filter_param_t)]; - [addFilterData appendData:self.parameters]; - return addFilterData; -} - -- (BFTask *)resetStateWithDataAsync:(NSData *)data -{ - if (self.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Filter must be initialized before being reset."}]; - return [BFTask taskWithError:error]; - } - - uint8_t uid = self.index; - NSMutableData *params = [NSMutableData dataWithBytes:&uid length:1]; - if (data) { - [params appendData:data]; - } - return [self.stateSetResetGet writeDataAsync:params]; -} - -- (BFTask *)resetParametersWithData:(NSData *)data -{ - if (self.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Filter must be initialized before being reset."}]; - return [BFTask taskWithError:error]; - } - - uint8_t uid = self.index; - NSMutableData *params = [NSMutableData dataWithBytes:&uid length:1]; - if (data) { - [params appendData:data]; - } - return [self.parameterModify writeDataAsync:params]; -} - -- (BFTask *)resetAsync -{ - return [self resetStateWithDataAsync:nil]; -} - -typedef struct __attribute__((packed)) { - uint8_t filter_id; - uint8_t datalen:5; -} df_buffer_param_t; - -- (MBLEvent *)periodicReadWithPeriod:(uint32_t)period -{ - df_buffer_param_t params = {0}; - params.filter_id = 0xF; - params.datalen = self.format.length - 1; - - MBLFilter *filter = [[MBLFilter alloc] initWithTrigger:self - filterParameters:[NSData dataWithBytes:¶ms length:sizeof(df_buffer_param_t)] - format:self.format]; - - return [[MBLTriggeredRead alloc] initWithData:filter.stateSetResetGet period:period eventCount:0xFFFF]; -} - -- (BFTask *)performAsyncInitialization -{ - // Setup trigger so that its index is filled in and its module is enabled - return [[[self.trigger initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Set the addEntityParams now that trigger is ready - self.addEntityParameters = [self generateAddFilterParameters]; - return [super performAsyncInitialization]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.stateSetResetGet.index = self.index; - return nil; - }]; -} - -- (BFTask *)performAsyncDeinitialization -{ - return [[super performAsyncDeinitialization] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.stateSetResetGet.index = 0xFF; - // Remove the addEntityParams - self.addEntityParameters = [NSData data]; - // Un-setup trigger - return [self.trigger deinitializeAsync]; - }]; -} - -- (BFTask *)performAsyncActivation -{ - return [self.trigger activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [self.trigger deactivateAsync]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLFirmwareUpdateInfo.h b/MetaWear/Classes/Core/MBLFirmwareUpdateInfo.h deleted file mode 100644 index 945e801..0000000 --- a/MetaWear/Classes/Core/MBLFirmwareUpdateInfo.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * MBLFirmwareUpdateInfo.h - * MetaWear - * - * Created by Stephen Schiffli on 9/28/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for all the objects needed in order to begin a DFU with the Nordic DFU library - */ -@interface MBLFirmwareUpdateInfo : NSObject - -- (instancetype)initWithFirmwareUrl:(NSURL *)firmwareUrl - target:(CBPeripheral *)target - centralManager:(CBCentralManager *)centralManager; - -@property (nonatomic, readonly) NSURL *firmwareUrl; -@property (nonatomic, readonly) CBPeripheral *target; -@property (nonatomic, readonly) CBCentralManager *centralManager; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLFirmwareUpdateInfo.m b/MetaWear/Classes/Core/MBLFirmwareUpdateInfo.m deleted file mode 100644 index a66d085..0000000 --- a/MetaWear/Classes/Core/MBLFirmwareUpdateInfo.m +++ /dev/null @@ -1,59 +0,0 @@ -/** - * MBLFirmwareUpdateInfo.m - * MetaWear - * - * Created by Stephen Schiffli on 9/28/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFirmwareUpdateInfo.h" - -@interface MBLFirmwareUpdateInfo () -@property (nonatomic) NSURL *firmwareUrl; -@property (nonatomic) CBPeripheral *target; -@property (nonatomic) CBCentralManager *centralManager; -@end - -@implementation MBLFirmwareUpdateInfo - -- (instancetype)initWithFirmwareUrl:(NSURL *)firmwareUrl - target:(CBPeripheral *)target - centralManager:(CBCentralManager *)centralManager -{ - self = [super init]; - if (self) { - self.firmwareUrl = firmwareUrl; - self.target = target; - self.centralManager = centralManager; - } - return self; -} - -@end diff --git a/MetaWear/Classes/Core/MBLMetaWear.h b/MetaWear/Classes/Core/MBLMetaWear.h deleted file mode 100644 index 393e7e7..0000000 --- a/MetaWear/Classes/Core/MBLMetaWear.h +++ /dev/null @@ -1,437 +0,0 @@ -/** - * MBLMetaWear.h - * MetaWear - * - * Created by Stephen Schiffli on 7/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - -@class MBLTemperature; -@class MBLAccelerometer; -@class MBLGyro; -@class MBLLED; -@class MBLMechanicalSwitch; -@class MBLGPIO; -@class MBLHapticBuzzer; -@class MBLiBeacon; -@class MBLNeopixel; -@class MBLEvent; -@class MBLANCS; -@class MBLI2C; -@class MBLSerial; -@class MBLTimer; -@class MBLConductance; -@class MBLBarometer; -@class MBLAmbientLight; -@class MBLMagnetometer; -@class MBLHygrometer; -@class MBLPhotometer; -@class MBLProximity; -@class MBLSensorFusion; -@class MBLSettings; -@class MBLMetaWear; -@class MBLFirmwareUpdateInfo; -@protocol MBLBluetoothPeripheralDelegate; -@class MBLAnonymousEvent; - -NS_ASSUME_NONNULL_BEGIN - -/** - Current state of the MetaWear connection - */ -typedef NS_ENUM(NSInteger, MBLConnectionState) { - MBLConnectionStateDisconnected = 0, - MBLConnectionStateConnecting, - MBLConnectionStateConnected, - MBLConnectionStateDisconnecting, - MBLConnectionStateDiscovery, -}; - - -/** - An MBLRestorable object is used to persist state across resets and disconnects. - You create an object that conforms to this protocol and then assign it to an - MBLMetaWear object using the setConfiguration:handler: method - */ -@protocol MBLRestorable -/** - This function is called shortly after you assign this object to a MetaWear device. - Override this function and use it as the main initialization point for setting up - custom events needed for your application. - - Any API calls in this method will be persisted in non-volatile memory on the - MetaWear, and be executed when the MetaWear powers on. For example, if you want - the device to automatically (after reset or power-loss) startLoggingAsync some - event, set the peripheral name, or modifiy a connection parameter, do that in this function. - */ -- (void)runOnDeviceBoot:(MBLMetaWear *)device; -@end - - - -/** - Each MBLMetaWear object corresponds a physical MetaWear board. It contains all the logical - methods you would expect for interacting with the device, such as, connecting, disconnecting, - reading and writing state. - - Sensors and peripherals on the MetaWear are encapsulated within their own objects accessable - here via properties. For example, all accelerometer functionality is contained in the - MBLAccelerometer class and is accessed using the accelerometer property - */ -@interface MBLMetaWear : NSObject - -///---------------------------------- -/// @name Sensor and Peripheral Accessors -///---------------------------------- - -/** - MBLMechanicalSwitch object contains all methods for interacting with the on-board button - */ -@property (nonatomic, readonly, nullable) MBLMechanicalSwitch *mechanicalSwitch; -/** - MBLLED object contains all methods for interacting with the on-board LED - */ -@property (nonatomic, readonly, nullable) MBLLED *led; -/** - MBLTemperature object contains all methods for interacting with the on-chip and external thermistor temperature sensors - */ -@property (nonatomic, readonly, nullable) MBLTemperature *temperature; -/** - MBLAccelerometer object contains all methods for interacting with the on-board accelerometer sensor - */ -@property (nonatomic, readonly, nullable) MBLAccelerometer *accelerometer; -/** - MBLGyro object contains all methods for interacting with the on-board gyroscope sensor - */ -@property (nonatomic, readonly, nullable) MBLGyro *gyro; -/** - MBLGPIO object contains all methods for interacting with the on-board pins - */ -@property (nonatomic, readonly, nullable) MBLGPIO *gpio; -/** - MBLHapticBuzzer object contains all methods for interacting with the external haptic or buzzer - */ -@property (nonatomic, readonly, nullable) MBLHapticBuzzer *hapticBuzzer; -/** - MBLiBeacon object contains all methods for programming the device to advertise as an iBeacon - */ -@property (nonatomic, readonly, nullable) MBLiBeacon *iBeacon; -/** - MBLNeopixel object contains all methods for interacting with an external NeoPixel chain - */ -@property (nonatomic, readonly, nullable) MBLNeopixel *neopixel; -/** - MBLANCS object contains all methods for interacting with ANCS notifications - */ -@property (nonatomic, readonly, nullable) MBLANCS *ancs; -/** - MBLTimer object contains all methods for programming timer based operations - */ -@property (nonatomic, readonly, nullable) MBLTimer *timer; -/** - MBLSerial object contains all methods for performing raw I2C and SPI read/writes - */ -@property (nonatomic, readonly, nullable) MBLSerial *serial; -/** - MBLConductance object contains all methods for perfoming Conductance reads - */ -@property (nonatomic, readonly, nullable) MBLConductance *conductance; -/** - MBLBarometer object contains all methods for interacting with the barometer sensor - */ -@property (nonatomic, readonly, nullable) MBLBarometer *barometer; -/** - MBLAmbientLight object contains all methods for interacting with the ambient light sensor - */ -@property (nonatomic, readonly, nullable) MBLAmbientLight *ambientLight; -/** - MBLMagnetometer object contains all methods for interacting with the magnetometer sensor - */ -@property (nonatomic, readonly, nullable) MBLMagnetometer *magnetometer; -/** - MBLHygrometer object contains all methods for interacting with the humidity sensor - */ -@property (nonatomic, readonly, nullable) MBLHygrometer *hygrometer; -/** - MBLPhotometer object contains all methods for interacting with the photometer (color) sensor - */ -@property (nonatomic, readonly, nullable) MBLPhotometer *photometer; -/** - MBLProximity object contains all methods for interacting with the proximity sensor - */ -@property (nonatomic, readonly, nullable) MBLProximity *proximity; -/** - MBLProximity object contains all methods for interacting with the proximity sensor - */ -@property (nonatomic, readonly, nullable) MBLSensorFusion *sensorFusion; -/** - MBLSettings object contains all methods for interacting with MetaWear device settings - */ -@property (nonatomic, readonly, nullable) MBLSettings *settings; -/** - MBLDeviceInfo object contains version information about the device - */ -@property (nonatomic, readonly, nullable) MBLDeviceInfo *deviceInfo; - - -///---------------------------------- -/// @name Persistent Configuration Settings -///---------------------------------- - -/** - MBLRestorable object containing custom settings and events that are programmed - to the MetaWear and preserved between disconnects and app termination. - */ -@property (nonatomic, readonly, nullable) id configuration; - -/** - Assign a new configuration object to this MetaWear. This only needs to be called once, - likely after you confirm the device from a scanning screen or such. Upon calling it will - erase all non-volatile memory the device (which requires disconnect), then perform reset, - once its comes back online we will connect and invoke the setupEvents method. - Then the runOnDeviceBoot method is invoked and all calls in that method are persisted - device side so after any future reset these settings will be applied automatically. - @param configuration Pointer to object containing programming commands. Writing nil - will reset to factory settings. - */ -- (BFTask *)setConfigurationAsync:(nullable id)configuration; - -///---------------------------------- -/// @name State Accessors -///---------------------------------- - -/** - Current connection state of this MetaWear - */ -@property (nonatomic, readonly) MBLConnectionState state; -/** - Since we do not support using a single MetaWear device with multiple application, you - should take care if a user accidently tries to do this. Once connected, your application - should check this BOOL and if it is YES, then you shouldn't change settings or perform any - operations unless you supply the user with an alert saying, "This device is in use by another - application, are you sure you want to reprogram it? This will cause errors and data loss for - the other application”. If they agree then you need to call setConfigurationAsync: to take - ownership of the device. - */ -@property (nonatomic, readonly) BOOL programedByOtherApp; -/** - iOS generated unique identifier for this MetaWear. This is device specific and - two different iOS devices with generate two different identifiers. - */ -@property (nonatomic, readonly) NSUUID *identifier; -/** - A dictionary containing any advertisement and scan response data. For - a list of advertisementData keys, see {@link CBAdvertisementDataLocalNameKey} - and other similar constants. - */ -@property (nonatomic, readonly) NSDictionary *advertisementData; -/** - MAC address of this MetaWear. NOTE: this is only populated after a successful connection - */ -@property (nonatomic, readonly, nullable) NSString *mac; -/** - Stored value of signal strength at discovery time - */ -@property (nonatomic, readonly, nullable) NSNumber *discoveryTimeRSSI; -/** - Smoothed out RSSI value, great for use with signal strength icons - */ -@property (nonatomic, readonly, nullable) NSNumber *averageRSSI; -/** - Advertised device name. You can simply assign a new string - if you wish to change the advertised name, max 8 characters! - */ -@property (nonatomic) NSString *name; -/** - The model of this MetaWear. This is only valid after a successful connection! - @see MBLModelString for turning this into a friendly string - */ -@property (nonatomic) MBLModel model; - -///---------------------------------- -/// @name Connect/Disconnect -///---------------------------------- - -/** - Connect/reconnect to the MetaWear board. Once connection is complete, the provided block - will be invoked. If the NSError provided to the block is null then the connection - succeeded, otherwise failure (see provided error for details) - */ -- (BFTask *)connectAsync; -/** - Connect/reconnect to the MetaWear board, but with a timeout if the board can't be - located. Once connection is complete, the provided block will be invoked. If the - NSError provided to the block is null then the connection succeeded, otherwise - failure (see provided error for details) - @param timeout Max time to search for MetaWear before giving up - */ -- (BFTask *)connectWithTimeoutAsync:(NSTimeInterval)timeout; - -/** - Disconnect from the MetaWear board. - */ -- (BFTask *)disconnectAsync; - -/** - Create a task that will complete once this device disconnects, either expectedly - or unexpectedly. This is useful for observing unexpected disconnects and - automatically issing a re-connect request or otherwise updating the UI. - */ -- (BFTask *)waitForDisconnect; - -///---------------------------------- -/// @name Remember/Forget -///---------------------------------- - -/** - Remember this MetaWear, it will be saved to disk and retrievable - through [MBLMetaWearManager retrieveSavedMetaWears] - */ -- (void)rememberDevice; -/** - Forget this MetaWear, it will no longer be retrievable - through [MBLMetaWearManager retrieveSavedMetaWears] - */ -- (void)forgetDevice; - -/** - The state of all MetaWear modules are persisted to disk for ease of use - across application launches. Most of the time you don't need to explicitly - call this function as it is called automatically after interactions with the - board. Function that count as interacation include start/stopLogging, - start/stopNotificationsAsync, program/eraseCommands. If you make changes to various - module setting but don't call one of these functions, then it may be usefully - to call this function so you don't lose the state of those setting changes. - */ -- (BFTask *)synchronizeAsync; - -///---------------------------------- -/// @name State Reading -///---------------------------------- - -/** - Query the current RSSI - */ -- (BFTask *)readRSSIAsync; -/** - Query the percent remaining battery life, returns int between 0-100 - */ -- (BFTask *)readBatteryLifeAsync; - -/** - Reads the current state of the board and creates anonymous events - based on what data is being logged. This lets you download the - log without knowing exactly where/how it was setup. - */ -- (BFTask *> *)createAnonymousEventsAsync; - -///---------------------------------- -/// @name Firmware Update and Reset -///---------------------------------- - -/** - Perform a software reset of the device. Note that all module properties of - this object will be invalidated, so remove any external references to them. - @warning This will cause the device to disconnect - */ -- (void)resetDevice; - -/** - After the next reset, the device will immediately enter a low-power sleep - mode. To wake the device back up you can press the button, connect usb - power (latest models only), or remove and reconnect the coin cell battery. - */ -- (BFTask *)sleepModeOnReset; - -/** - See if this device is running the most up to date firmware. If the task - returns a non-null string, then its contents are the latest firmware version - */ -- (BFTask *)checkForFirmwareUpdateAsync; - -/** - Download the latest firmware and put the device in bootloader mode. Note that - you will need to use Nordic's DFU library to actaully perform the update: - https://github.com/NordicSemiconductor/IOS-Pods-DFU-Library - For example, you can see our sample app for how to integrate DFU into your own app: - https://github.com/mbientlab/MetaWear-SampleApp-iOS - - Please make sure the device is plugged in or charged above 50% to prevent errors. - - This is one API you can call WITHOUT being connected, there are some cases where - you can't connect because the firmware is too old, but you still need to be able - to update it! - */ -- (BFTask *)prepareForFirmwareUpdateAsync; - -/** - Check if this device is in bootloader mode, if yes then you may only call - prepareForFirmwareUpdateAsync. Any call to connectAsync will retun an error - */ -@property (nonatomic, readonly) BOOL isMetaBoot; - -///---------------------------------- -/// @name Debug and Testing Utilities -///---------------------------------- - -/** - This causues the device to immediately disconnect with an error. Useful for testing - error handling flows. - */ -- (void)simulateDisconnect; - - -///---------------------------------- -/// @name Deprecated -///---------------------------------- - -@property (nonatomic, readonly, nullable) MBLI2C *i2c DEPRECATED_MSG_ATTRIBUTE("Use serial instead"); -@property (nonatomic, readonly) BOOL isGuestConnection DEPRECATED_MSG_ATTRIBUTE("Use programedByOtherApp instead"); - -- (void)updateFirmwareWithHandler:(MBLErrorHandler)handler - progressHandler:(nullable MBLFloatHandler)progressHandler DEPRECATED_MSG_ATTRIBUTE("Use prepareForFirmwareUpdateAsync instead"); - -- (void)setConfiguration:(nullable id)configuration handler:(nullable MBLErrorHandler)handler DEPRECATED_MSG_ATTRIBUTE("use setConfigurationAsync: instead"); -- (void)connectWithHandler:(nullable MBLErrorHandler)handler DEPRECATED_MSG_ATTRIBUTE("use connectAsync instead"); -- (void)connectWithTimeout:(NSTimeInterval)timeout handler:(nullable MBLErrorHandler)handler DEPRECATED_MSG_ATTRIBUTE("use connectWithTimeoutAsync instead"); -- (void)disconnectWithHandler:(nullable MBLErrorHandler)handler DEPRECATED_MSG_ATTRIBUTE("use disconnectAsync instead"); -- (void)readBatteryLifeWithHandler:(MBLNumberHandler)handler DEPRECATED_MSG_ATTRIBUTE("use readBatteryLifeAsync instead"); -- (void)readRSSIWithHandler:(MBLNumberHandler)handler DEPRECATED_MSG_ATTRIBUTE("use readRSSIAsync instead"); -- (void)checkForFirmwareUpdateWithHandler:(MBLBoolHandler)handler DEPRECATED_MSG_ATTRIBUTE("use checkForFirmwareUpdateAsync instead"); -- (void)prepareForFirmwareUpdateWithHandler:(MBLFirmwareUpdateHandler)handler DEPRECATED_MSG_ATTRIBUTE("use prepareForFirmwareUpdateAsync instead"); -- (void)synchronize DEPRECATED_MSG_ATTRIBUTE("use synchronizeAsync instead"); - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLMetaWear.m b/MetaWear/Classes/Core/MBLMetaWear.m deleted file mode 100644 index 98639e9..0000000 --- a/MetaWear/Classes/Core/MBLMetaWear.m +++ /dev/null @@ -1,1889 +0,0 @@ -/** - * MBLMetaWear.m - * MetaWear - * - * Created by Stephen Schiffli on 7/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMetaWear.h" -#import "MBLMetaWear+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLFirmwareUpdateManager.h" -#import "MBLAnalytics.h" -#import "MBLModuleInfo.h" -#import "MBLFirmwareBuild.h" -#import "MBLFormat.h" -#import "MBLNumericFormatter.h" -#import "MBLNumericData+Private.h" -#import "FastCoder.h" -#import "BFTask+MBLExtensions.h" -#import "BFTask+MBLPrivate.h" - -#import "MBLMechanicalSwitch.h" -#import "MBLAccelerometer+Private.h" -#import "MBLGyro+Private.h" -#import "MBLTemperature.h" -#import "MBLLED.h" -#import "MBLGPIO.h" -#import "MBLTestDebug.h" -#import "MBLEvent+Private.h" -#import "MBLANCS.h" -#import "MBLTimer+Private.h" -#import "MBLSettings.h" -#import "MBLNeopixel.h" -#import "MBLiBeacon.h" -#import "MBLHapticBuzzer.h" -#import "MBLSerial+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLConductance.h" -#import "MBLBarometer.h" -#import "MBLAmbientLight+Private.h" -#import "MBLMagnetometer.h" -#import "MBLHygrometer.h" -#import "MBLPhotometer+Private.h" -#import "MBLProximity+Private.h" -#import "MBLSensorFusion+Private.h" -#import "MBLSettings+Private.h" -#import "MBLDispatchQueue.h" -#import -#import "MBLMovingAverage.h" -#import "MBLConstants+Private.h" -#import "MBLLogger.h" -#import "MBLStringData.h" - - -typedef void (^MBLModuleInfoErrorHandler)(MBLModuleInfo *moduleInfo, NSError *error); -typedef void (^MBLModuleInfoHandler)(MBLModuleInfo *moduleInfo); - -@interface MBLMetaWear () -// Properties from MBLMetaWear.h -@property (nonatomic, nullable) MBLMechanicalSwitch *mechanicalSwitch; -@property (nonatomic, nullable) MBLLED *led; -@property (nonatomic, nullable) MBLTemperature *temperature; -@property (nonatomic, nullable) MBLAccelerometer *accelerometer; -@property (nonatomic, nullable) MBLGyro *gyro; -@property (nonatomic, nullable) MBLGPIO *gpio; -@property (nonatomic, nullable) MBLHapticBuzzer *hapticBuzzer; -@property (nonatomic, nullable) MBLiBeacon *iBeacon; -@property (nonatomic, nullable) MBLNeopixel *neopixel; -@property (nonatomic, nullable) MBLANCS *ancs; -@property (nonatomic, nullable) MBLTimer *timer; -@property (nonatomic, nullable) MBLSerial *serial; -@property (nonatomic, nullable) MBLConductance *conductance; -@property (nonatomic, nullable) MBLBarometer *barometer; -@property (nonatomic, nullable) MBLAmbientLight *ambientLight; -@property (nonatomic, nullable) MBLMagnetometer *magnetometer; -@property (nonatomic, nullable) MBLHygrometer *hygrometer; -@property (nonatomic, nullable) MBLPhotometer *photometer; -@property (nonatomic, nullable) MBLProximity *proximity; -@property (nonatomic, nullable) MBLSensorFusion *sensorFusion; -@property (nonatomic, nullable) MBLSettings *settings; - -@property (nonatomic, nullable) id configuration; - -@property (nonatomic) BOOL programedByOtherApp; -@property (nonatomic) MBLMovingAverage *rssiAverager; -//@property (nonatomic, nonnull) NSString *name; -// Setting the name property causes side effects, so we -// create an internal property for storing the actual value, allowing -// us to safely get/set during serialization of this class -@property (nonatomic) NSString *nameImpl; - - -// Properties from MBLMetaWear+Private.h -@property (nonatomic) MBLConnectionState state; -@property (nonatomic, nonnull) NSUUID *identifier; -@property (nonatomic) NSDictionary *advertisementData; -@property (nonatomic, nullable) NSString *mac; -@property (nonatomic, nullable) NSNumber *discoveryTimeRSSI; -@property (nonatomic) BOOL isMetaBoot; - -@property (nonatomic) BOOL bypassSetup; -@property (nonatomic) BOOL bypassSanityCheck; -@property (nonatomic) id peripheral; - -@property (nonatomic, nullable) MBLDataProcessor *dataProcessor; -@property (nonatomic, nullable) MBLLogging *logging; -@property (nonatomic, nullable) MBLCommand *command; -@property (nonatomic, nullable) MBLTestDebug *testDebug; -@property (nonatomic, nullable) MBLMacro *macro; -@property (nonatomic, nullable) MBLDeviceInfo *deviceInfo; - -@property (nonatomic) MBLNonVolatileState *nonVolatileState; - -@property (nonatomic) MBLDispatchQueue *zeroCountQueue; - -@property (nonatomic, nullable) NSArray *modules; -@end - - -@implementation MBLMetaWear { - // Ivars for internal things that arn't exposed anywhere as properties because they don't need encoded - NSMutableArray *connectionSources; - NSMutableArray *disconnectionSources; - NSMutableArray *RSSISources; - NSMutableArray *batteryLifeSources; - NSMutableArray *deviceInfoSources; - - int characteristicCount; - int serviceCount; - int connectionRetryCount; - BOOL setupRequestedDisconnect; - - MBLSimulationHandler simulatorHandler; - MBLDataHandler snifferHandler; - NSMutableDictionary *moduleInfoTaskSources; - int maxPendingWrites; - int commandCount; - - CBCharacteristic *metawearCommandCharacteristic; - CBCharacteristic *metawearNotification6Characteristic; - CBCharacteristic *batteryLifeCharacteristic; - CBCharacteristic *disModelNumberCharacteristic; - CBCharacteristic *disManufacturerNameCharacteristic; - CBCharacteristic *disSerialNumberCharacteristic; - CBCharacteristic *disHardwareRevisionCharacteristic; - CBCharacteristic *disFirmwareRevisionCharacteristic; - - MBLDispatchQueue *simulatorCountQueue; - NSMutableArray *simulatorFreeTasks; - BOOL simulatorBusy; - NSObject *simulatorHandlerMutex; -} - -// Properties that need custom encode/decode functions -@synthesize state = _noencode_state; -@synthesize programedByOtherApp = _noencode_programedByOtherApp; - -@synthesize peripheral = _noencode_peripheral; -@synthesize bypassSetup = _noencode_bypassSetup; -@synthesize bypassSanityCheck = _noencode_bypassSanityCheck; - -@synthesize zeroCountQueue = _noencode_zeroCountQueue; - -- (NSError *)writeToFile:(NSString *)filename -{ - MBLLog(MBLLogLevelInfo, @"Saving to disk: %@", self); - NSData *data = [FastCoder dataWithRootObject:self]; - NSError *error = nil; - -#if TARGET_OS_IOS || TARGET_OS_TV - [data writeToFile:filename - options:NSDataWritingAtomic | NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication - error:&error]; -#else - [data writeToFile:filename - options:NSDataWritingAtomic - error:&error]; -#endif - - if (error) { MBLLog(MBLLogLevelError, @"%@", error); } - return error; -} - -- (instancetype)initWithPeripheral:(id)peripheral -{ - self = [super init]; - if (self) { - peripheral.delegate = self; - - self.peripheral = peripheral; - self.identifier = peripheral.identifier; - self.nameImpl = peripheral.name; - self.model = MBLModelUnknown; - - self.state = MBLConnectionStateDisconnected; - - connectionSources = [NSMutableArray array]; - disconnectionSources = [NSMutableArray array]; - RSSISources = [NSMutableArray array]; - batteryLifeSources = [NSMutableArray array]; - deviceInfoSources = [NSMutableArray array]; - - moduleInfoTaskSources = [NSMutableDictionary dictionary]; - - self.zeroCountQueue = [[MBLDispatchQueue alloc] initWithName:@"com.mbientlab.metawear.zeroCountQueue"]; - simulatorCountQueue = [[MBLDispatchQueue alloc] initWithName:@"com.mbientlab.metawear.simulatorCountQueue"]; - simulatorFreeTasks = [NSMutableArray array]; - simulatorHandlerMutex = [[NSObject alloc] init]; - - self.nonVolatileState = [[MBLNonVolatileState alloc] init]; - } - return self; -} - -- (id)awakeAfterFastCoding -{ - self.state = MBLConnectionStateDisconnected; - - connectionSources = [NSMutableArray array]; - disconnectionSources = [NSMutableArray array]; - RSSISources = [NSMutableArray array]; - batteryLifeSources = [NSMutableArray array]; - deviceInfoSources = [NSMutableArray array]; - - moduleInfoTaskSources = [NSMutableDictionary dictionary]; - - self.zeroCountQueue = [[MBLDispatchQueue alloc] initWithName:@"com.mbientlab.metawear.zeroCountQueue"]; - simulatorCountQueue = [[MBLDispatchQueue alloc] initWithName:@"com.mbientlab.metawear.simulatorCountQueue"]; - simulatorFreeTasks = [NSMutableArray array]; - simulatorHandlerMutex = [[NSObject alloc] init]; - - return self; -} - -- (void)setDiscoveryTimeRSSI:(NSNumber *)discoveryTimeRSSI -{ - // Reject erroneous values - if (discoveryTimeRSSI.doubleValue > -15.0) { - return; - } - _discoveryTimeRSSI = discoveryTimeRSSI; - if (!self.rssiAverager) { - self.rssiAverager = [[MBLMovingAverage alloc] initWithPeriod:4]; - } - [self.rssiAverager addDatum:discoveryTimeRSSI]; - // We null out the average is 10 seconds pass without a reading - // We do this on main thread because performSelector afterDelay isn't working on other threads - dispatch_async(dispatch_get_main_queue(), ^{ - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(rssiTimeout) object:nil]; - [self performSelector:@selector(rssiTimeout) withObject:nil afterDelay:10]; - }); -} - -- (NSNumber *)averageRSSI -{ - if (self.rssiAverager) { - return [NSNumber numberWithDouble:self.rssiAverager.movingAverage]; - } - return nil; -} - -- (void)rssiTimeout -{ - self.rssiAverager = nil; -} - -- (BOOL)programedByOtherApp -{ - if (self.state != MBLConnectionStateConnected) { - MBLLog(MBLLogLevelWarning, @"programedByOtherApp not valid unless a connection is established"); - } - return _noencode_programedByOtherApp; -} - -- (BFTask *)initializeModulesIfNeededAsync -{ - if (!self.modules) { - // Start listening to the global notification register since the module init code - // reads data and need callbacks throught this characteristic - [self.peripheral setNotifyValue:YES forCharacteristic:metawearNotification6Characteristic]; - return [self resetModulesAsync]; - } - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)readModuleInfo:(uint8_t)moduleId -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - @synchronized(moduleInfoTaskSources) { - moduleInfoTaskSources[[NSNumber numberWithInt:moduleId]] = source; - } - - // We expect a callback since this is a read - [self incrementCount]; - uint8_t data[] = { moduleId, 0x80 }; - int dataSize = sizeof(data) / sizeof(data[0]); - // Ship the read! - [self writeCommandRegister:[NSData dataWithBytes:data length:dataSize] withResponse:NO]; - return source.task; -} - -- (void)clearAllModules -{ - self.modules = nil; - self.mechanicalSwitch = nil; - self.led = nil; - self.accelerometer = nil; - self.temperature = nil; - self.gpio = nil; - self.neopixel = nil; - self.iBeacon = nil; - self.hapticBuzzer = nil; - self.dataProcessor = nil; - self.command = nil; - self.logging = nil; - self.timer = nil; - self.serial = nil; - self.ancs = nil; - self.macro = nil; - self.conductance = nil; - self.settings = nil; - self.barometer = nil; - self.gyro = nil; - self.ambientLight = nil; - self.magnetometer = nil; - self.hygrometer = nil; - self.photometer = nil; - self.proximity = nil; - self.sensorFusion = nil; - self.testDebug = nil; - - self.configuration = nil; -} - -- (BFTask *)resetModulesAsync -{ - if (!(self.peripheral && self.peripheral.state == MBLConnectionStateConnected)) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't reset modules without being connected."}]; - return [BFTask taskWithError:error]; - } - uint32_t magicKey = self.testDebug.magicKey; - - return [[[BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - [self clearAllModules]; - // Initialize the madness - // These 3 must go first so that the other modules can access them duing init - NSMutableArray *tasks = [NSMutableArray array]; - [tasks addObject:[[self readModuleInfo:0x9] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.dataProcessor = [MBLDataProcessor objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0xB] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.logging = [MBLLogging objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0xA] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.command = [MBLCommand objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - return [BFTask taskForCompletionOfAllTasks:tasks]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - NSMutableArray *tasks = [NSMutableArray array]; - [tasks addObject:[[self readModuleInfo:0x1] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.mechanicalSwitch = [MBLMechanicalSwitch objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x2] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.led = [MBLLED objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x3] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.accelerometer = [MBLAccelerometer objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x4] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.temperature = [MBLTemperature objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x5] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.gpio = [MBLGPIO objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x6] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.neopixel = [MBLNeopixel objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x7] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.iBeacon = [MBLiBeacon objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x8] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.hapticBuzzer = [MBLHapticBuzzer objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0xE] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.ancs = [MBLANCS objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0xC] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.timer = [MBLTimer objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0xD] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.serial = [MBLSerial objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0xF] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.macro = [MBLMacro objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x10] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.conductance = [MBLConductance objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x11] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.settings = [MBLSettings objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x12] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.barometer = [MBLBarometer objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x13] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.gyro = [MBLGyro objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x14] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.ambientLight = [MBLAmbientLight objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x15] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.magnetometer = [MBLMagnetometer objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x16] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.hygrometer = [MBLHygrometer objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x17] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.photometer = [MBLPhotometer objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x18] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.proximity = [MBLProximity objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0x19] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.sensorFusion = [MBLSensorFusion objectWithDevice:self moduleInfo:moduleInfo]; - } - }]]; - [tasks addObject:[[self readModuleInfo:0xFE] successOnMetaWear:^(MBLModuleInfo *moduleInfo) { - if (moduleInfo) { - self.testDebug = [MBLTestDebug objectWithDevice:self moduleInfo:moduleInfo]; - self.testDebug.magicKey = magicKey; - } - }]]; - return [BFTask taskForCompletionOfAllTasks:tasks]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Note this order is very specific, the index must correspond to the module id - self.modules = @[[NSNull null], - self.mechanicalSwitch ? self.mechanicalSwitch : [NSNull null], - self.led ? self.led : [NSNull null], - self.accelerometer ? self.accelerometer : [NSNull null], - self.temperature ? self.temperature : [NSNull null], - self.gpio ? self.gpio : [NSNull null], - self.neopixel ? self.neopixel : [NSNull null], - self.iBeacon ? self.iBeacon : [NSNull null], - self.hapticBuzzer ? self.hapticBuzzer : [NSNull null], - self.dataProcessor ? self.dataProcessor : [NSNull null], - self.command ? self.command : [NSNull null], - self.logging ? self.logging : [NSNull null], - self.timer ? self.timer : [NSNull null], - self.serial ? self.serial : [NSNull null], - self.ancs ? self.ancs : [NSNull null], - self.macro ? self.macro : [NSNull null], - self.conductance ? self.conductance : [NSNull null], - self.settings ? self.settings : [NSNull null], - self.barometer ? self.barometer : [NSNull null], - self.gyro ? self.gyro : [NSNull null], - self.ambientLight ? self.ambientLight : [NSNull null], - self.magnetometer ? self.magnetometer : [NSNull null], - self.hygrometer ? self.hygrometer : [NSNull null], - self.photometer ? self.photometer : [NSNull null], - self.proximity ? self.proximity : [NSNull null], - self.sensorFusion ? self.sensorFusion : [NSNull null]]; - self.model = [self calculateModelType]; - - // Save this as the reset state of the device - // Do this on the bleQueue so that we don't process events while the save state is happening - NSString *filename = [[MBLMetaWearManager sharedManager] logFilename:[self.identifier.UUIDString stringByAppendingString:@"Reset"]]; - return [self writeToFile:filename]; - }]; -} - -- (void)copyModulesFrom:(MBLMetaWear *)other -{ - self.identifier = other.identifier; - self.advertisementData = other.advertisementData; - self.mac = other.mac; - self.nameImpl = other.name; - self.deviceInfo = other.deviceInfo; - - self.dataProcessor = other.dataProcessor; - self.logging = other.logging; - self.command = other.command; - - self.mechanicalSwitch = other.mechanicalSwitch; - self.led = other.led; - self.temperature = other.temperature; - self.accelerometer = other.accelerometer; - self.gpio = other.gpio; - self.hapticBuzzer = other.hapticBuzzer; - self.iBeacon = other.iBeacon; - self.neopixel = other.neopixel; - self.ancs = other.ancs; - self.macro = other.macro; - self.conductance = other.conductance; - self.timer = other.timer; - self.serial = other.serial; - self.settings = other.settings; - self.barometer = other.barometer; - self.gyro = other.gyro; - self.ambientLight = other.ambientLight; - self.magnetometer = other.magnetometer; - self.hygrometer = other.hygrometer; - self.photometer = other.photometer; - self.proximity = other.proximity; - self.sensorFusion = other.sensorFusion; - - self.testDebug = other.testDebug; - - self.modules = other.modules; - - for (id obj in self.modules) { - if ([obj isKindOfClass:[MBLModule class]]) { - MBLModule *module = obj; - module.device = self; - } - } - self.testDebug.device = self; - - self.configuration = other.configuration; -} - -- (void)showFastCodingWarnings:(id)configuration -{ - if (configuration) { - int unsigned numMethods; - Method *methods = class_copyMethodList([configuration class], &numMethods); - for (int i = 0; i < numMethods; i++) { - NSString *methodName = NSStringFromSelector(method_getName(methods[i])); - if ([methodName isEqualToString:@"encodeWithCoder:"] || [methodName isEqualToString:@"initWithCoder:"]) { - MBLLog(MBLLogLevelWarning, @"[DEPRECATED] We use FastCoding (https://github.com/nicklockwood/FastCoding) so you no longer need to implement NSCoding yourself. By default all properties are saved and restored. Use ivars, or synthesize your properties using non-KVC-compliant names to avoid coding them."); - break; - } - } - free(methods); - } -} - -- (BFTask *)setConfigurationAsync:(id)configuration -{ - if ([MBLConstants isSimulatorQueue]) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't set a configuration within a programCommandsToRunOnEventAsync: block"}]; - return [BFTask taskWithError:error]; - } - - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - dispatch_async([MBLConstants metaWearQueue], ^{ - if (self.state != MBLConnectionStateConnected) { - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before performing setConfiguartion:handler:."}]]; - return; - } - [self showFastCodingWarnings:configuration]; - // The reset file is no longer valid since we are re-programming the device - [self removeResetFile]; - - // When the disconnect occurs we know the device has been cleared and is ready for a fresh programming - [[self waitForDisconnect] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - // Reconnect if we need to program the beast - if (configuration) { - [[[self connectAsync] success:^(id _Nonnull result) { - self.configuration = configuration; - [self.macro programConfigurationWithHandler:^{ - [self synchronizeResetFileAsync]; - [[self synchronizeAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - [source trySetResult:self]; - return nil; - }]; - }]; - }] failure:^(NSError * _Nonnull error) { - [source trySetError:error]; - }]; - } else { - self.modules = nil; - [[self synchronizeAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - [source trySetResult:self]; - return nil; - }]; - } - return nil; - }]; - - // Wipe the device! - [self.macro clearAllMacros]; - [[[self.logging stopAndClearLog] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - NSString *curVersion = self.accelerometer.device.deviceInfo.firmwareRevision; - // Older versions don't have a reliable reset UID - if ([MBLConstants versionString:curVersion isLessThan:@"1.0.7"]) { - self.modules = nil; - [self synchronizeAsync]; - } - return [self.testDebug resetDeviceAfterGarbageCollect]; - }] failure:^(NSError * _Nonnull error) { - [source trySetError:error]; - }]; - }); - return source.task; -} - -- (NSString *)name -{ - return self.nameImpl; -} - -- (void)setName:(NSString *)name -{ - if (name.length > 8) { - MBLLog(MBLLogLevelWarning, @"MetaWear advertising name truncated to 8 characters"); - self.nameImpl = [name substringToIndex:8]; - } else { - self.nameImpl = name; - } - [self.settings.deviceName writeDataAsync:[self.nameImpl dataUsingEncoding:NSUTF8StringEncoding]]; -} - -- (void)updateName:(NSString *)name -{ - self.nameImpl = name; -} - -- (BFTask *)connectAsync -{ - return [self connectWithTimeoutInternalAsync:nil]; -} - -- (BFTask *)connectWithTimeoutAsync:(NSTimeInterval)timeout -{ - return [self connectWithTimeoutInternalAsync:[NSNumber numberWithDouble:timeout]]; -} - -- (BFTask *)connectWithTimeoutInternalAsync:(NSNumber *)timeout -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - // Our next move depends on what state we are in now - switch (self.state) { - case MBLConnectionStateConnected: - return [BFTask taskWithResult:nil]; - case MBLConnectionStateConnecting: - case MBLConnectionStateDiscovery: - return [self waitForConnectionWithTimeout:timeout]; - case MBLConnectionStateDisconnected: - case MBLConnectionStateDisconnecting: - self.state = MBLConnectionStateConnecting; - BFTask *task = [self waitForConnectionWithTimeout:timeout]; - characteristicCount = 0; - serviceCount = 0; - connectionRetryCount = 2; - [[MBLMetaWearManager sharedManager] connectMetaWear:self]; - return task; - } - }]; -} - -- (BFTask *)waitForConnectionWithTimeout:(NSNumber *)timeout -{ - BFTaskCompletionSource *taskSource = [BFTaskCompletionSource taskCompletionSource]; - @synchronized(connectionSources) { - [connectionSources addObject:taskSource]; - } - if (timeout) { - // We do this on main thread because performSelector afterDelay isn't working on other threads - dispatch_async(dispatch_get_main_queue(), ^{ - [self performSelector:@selector(connectionTimeout:) withObject:taskSource afterDelay:timeout.doubleValue]; - }); - } - return taskSource.task; -} - -- (void)connectionTimeout:(BFTaskCompletionSource *)source -{ - @synchronized(connectionSources) { - // We'll handle this source right now! - [connectionSources removeObject:source]; - // Set a timeout error - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorConnectionTimeout - userInfo:@{NSLocalizedDescriptionKey : @"Timeout during connection. Make sure MetaWear is charged and within range."}]]; - - // If we are the only connection listener then abort the connection entirely - if (connectionSources.count == 0) { - [self disconnectAsync]; - } - } -} - -- (void)invokeConnectionHandlers:(NSError *)error cancelled:(BOOL)cancelled -{ - @synchronized(connectionSources) { - for (BFTaskCompletionSource *source in connectionSources) { - dispatch_async(dispatch_get_main_queue(), ^{ - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(connectionTimeout:) object:source]; - }); - if (error) { - [source trySetError:error]; - } else if (cancelled) { - [source trySetCancelled]; - } else { - [source trySetResult:self]; - } - } - [connectionSources removeAllObjects]; - } -} - -- (BFTask *)disconnectAsync -{ - // Our next move depends on what state we are in now - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - switch (self.state) { - case MBLConnectionStateConnected: - { - BFTask *task = [self waitForDisconnect]; - [[self waitForCommandCompletion] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - self.state = MBLConnectionStateDisconnecting; - [[MBLMetaWearManager sharedManager] disconnectMetaWear:self fromPeripheralSide:YES]; - return nil; - }]; - return task; - } - case MBLConnectionStateConnecting: - case MBLConnectionStateDiscovery: - { - self.state = MBLConnectionStateDisconnecting; - BFTask *task = [self waitForDisconnect]; - [[self waitForCommandCompletion] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - [[MBLMetaWearManager sharedManager] disconnectMetaWear:self fromPeripheralSide:NO]; - return nil; - }]; - return task; - } - case MBLConnectionStateDisconnecting: - return [self waitForDisconnect]; - case MBLConnectionStateDisconnected: - return nil; - } - }]; -} - -- (MBLModel)calculateModelType -{ - if ([self.deviceInfo.modelNumber isEqualToString:@"0"]) { - return MBLModelMetaWearR; - } else if ([self.deviceInfo.modelNumber isEqualToString:@"1"]) { - if (self.modules) { - if (self.barometer) { - return MBLModelMetaWearRPro; - } else { - return MBLModelMetaWearRG; - } - } else { - return MBLModelUnknown; - } - } else if ([self.deviceInfo.modelNumber isEqualToString:@"2"]) { - if (self.modules) { - if (self.proximity) { - return MBLModelMetaDetector; - } else if (self.hygrometer) { - return MBLModelMetaEnvironment; - } else if (self.magnetometer) { - return MBLModelMetaWearCPro; - } else { - return MBLModelMetaWearC; - } - } else { - return MBLModelUnknown; - } - } else if ([self.deviceInfo.modelNumber isEqualToString:@"3"]) { - return MBLModelMetaHealth; - } else if ([self.deviceInfo.modelNumber isEqualToString:@"4"]) { - return MBLModelMetaTracker; - } else if ([self.deviceInfo.modelNumber isEqualToString:@"5"]) { - return MBLModelMetaMotionR; - } else if ([self.deviceInfo.modelNumber isEqualToString:@"6"]) { - return MBLModelMetaMotionC; - } else { - return MBLModelUnknown; - } -} - -- (BFTask *)waitForDisconnect; -{ - BFTaskCompletionSource *taskSource = [BFTaskCompletionSource taskCompletionSource]; - @synchronized(disconnectionSources) { - [disconnectionSources addObject:taskSource]; - } - return taskSource.task; -} - -- (void)invokeDisconnectionHandlers:(NSError *)error -{ - @synchronized(disconnectionSources) { - for (BFTaskCompletionSource *source in disconnectionSources) { - if (error) { - [source trySetError:error]; - } else { - [source trySetResult:self]; - } - } - [disconnectionSources removeAllObjects]; - } -} - -- (void)rememberDevice -{ - [[MBLMetaWearManager sharedManager] rememberMetaWear:self]; -} - -- (void)forgetDevice -{ - [[MBLMetaWearManager sharedManager] forgetMetaWear:self]; -} - -- (BFTask *)synchronizeAsync -{ - NSString *filename = [[MBLMetaWearManager sharedManager] logFilename:self.identifier.UUIDString]; - // Do this on the metaWearQueue so that we don't modify any data while the save is happening - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - return [self writeToFile:filename]; - }]; -} - -- (BFTask *)synchronizeResetFileAsync -{ - NSString *filename = [[MBLMetaWearManager sharedManager] logFilename:[self.identifier.UUIDString stringByAppendingString:@"Reset"]]; - // Do this on the metaWearQueue so that we don't modify any data while the save is happening - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - return [self writeToFile:filename]; - }]; -} - -- (void)removeResetFile -{ - NSString *filename = [[MBLMetaWearManager sharedManager] logFilename:[self.identifier.UUIDString stringByAppendingString:@"Reset"]]; - // Remove the reset state - dispatch_async([MBLConstants metaWearQueue], ^{ - NSError *error = nil; - BOOL success = [[NSFileManager defaultManager] removeItemAtPath:filename error:&error]; - if (!success) { - if (!([error.domain isEqualToString:NSCocoaErrorDomain] && error.code == 4)) { - MBLLog(MBLLogLevelError, @"%@", error); - } - } - }); -} - -- (void)didConnect -{ - dispatch_async([MBLConstants metaWearQueue], ^{ - // Only access state from the metaWearQueue - self.state = MBLConnectionStateDiscovery; - [self.peripheral discoverServices:@[[MBLConstants serviceUUID], - [MBLConstants batteryServiceUUID], - [MBLConstants DISServiceUUID], - [MBLConstants DFUServiceUUID]]]; - }); -} - -- (void)didDisconnect:(NSError *)error -{ - MBLConnectionState __block prevState; - [[BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - prevState = self.state; - // Clean up everything - self.peripheral = nil; - self.state = MBLConnectionStateDisconnected; - metawearCommandCharacteristic = nil; - metawearNotification6Characteristic = nil; - batteryLifeCharacteristic = nil; - disManufacturerNameCharacteristic = nil; - disSerialNumberCharacteristic = nil; - disHardwareRevisionCharacteristic = nil; - disFirmwareRevisionCharacteristic = nil; - disModelNumberCharacteristic = nil; - - // Inform all the modules of this disconnection - for (id obj in self.modules) { - if ([obj isKindOfClass:[MBLModule class]]) { - MBLModule *module = obj; - [module deviceDisconnected:error]; - } - } - [self.testDebug deviceDisconnected:error]; - - // On disconnect we cant expect to get past reads back right, so clear out everything - [self.zeroCountQueue reset]; - [simulatorCountQueue reset]; - simulatorBusy = NO; - simulatorFreeTasks = [NSMutableArray array]; - - // Persist the current state to disk - return [self synchronizeAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - // Make sure all the connection handlers are flushed out - if (!setupRequestedDisconnect) { - NSError *connectionError = error; - switch (prevState) { - case MBLConnectionStateConnecting: - case MBLConnectionStateDiscovery: - if (!connectionError) { - connectionError = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorUnexpectedDisconnect - userInfo:@{NSLocalizedDescriptionKey : @"Unexpected disconnect during connection. Please try connection again."}]; - } - [self connectionCompleteWithError:connectionError]; - break; - case MBLConnectionStateDisconnecting: - [self invokeConnectionHandlers:connectionError cancelled:YES]; - break; - default: - break; - } - } - setupRequestedDisconnect = NO; - - // And flush out all the disconnection handlers - [self invokeDisconnectionHandlers:error]; - return nil; - }]; -} - -- (void)bluetoothPoweredOff -{ - MBLLog(MBLLogLevelInfo, @"bluetoothPoweredOff"); - connectionRetryCount = 0; - [self didDisconnect:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothPoweredOff - userInfo:@{NSLocalizedDescriptionKey : @"Core Bluetooth Error. Please ensure bluetooth is enabled."}]]; -} - -- (void)writeCommandRegister:(NSData *)data withResponse:(BOOL)withResponse -{ - if (data.length > 20) { - [NSException raise:@"ERROR" format:@"Trying to write more than 20 bytes to BLE characteristic"]; - } - - if (simulatorHandler && [MBLConstants isSimulatorQueue]) { - MBLLog(MBLLogLevelInfo, @"Simulating: %@", data); - simulatorHandler(*(uint8_t *)data.bytes, *(uint8_t *)(data.bytes + 1), [data subdataWithRange:NSMakeRange(2, data.length - 2)]); - return; - } - if (snifferHandler) { - snifferHandler(data, nil); - } - - CBCharacteristicWriteType type = withResponse ? CBCharacteristicWriteWithResponse : CBCharacteristicWriteWithoutResponse; - // In old firmware we couldn't write without response - if (!(metawearCommandCharacteristic.properties & CBCharacteristicPropertyWriteWithoutResponse)) { - type = CBCharacteristicWriteWithResponse; - } - // Throttle by having every Nth request wait for response - if (++commandCount >= maxPendingWrites) { - commandCount = 0; - type = CBCharacteristicWriteWithResponse; - } - MBLLog(MBLLogLevelInfo, @"%@Writing: %@ %@", snifferHandler ? @"Sniff " : @"", data, type == CBCharacteristicWriteWithResponse ? @"RSP": @"NO-RSP"); - if (self.peripheral && metawearCommandCharacteristic) { - [self.peripheral writeValue:data - forCharacteristic:metawearCommandCharacteristic - type:type]; - } -} - -- (void)startSimulationWithHandler:(MBLSimulationHandler)handler -{ - @synchronized(simulatorHandlerMutex) { - assert(!simulatorHandler && "Nesting Simulation?"); - simulatorHandler = handler; - } -} - -- (void)stopSimulation -{ - @synchronized(simulatorHandlerMutex) { - simulatorHandler = nil; - BFTaskCompletionSource *souce = [simulatorFreeTasks firstObject]; - if (souce) { - [simulatorFreeTasks removeObjectAtIndex:0]; - [souce trySetResult:nil]; - } else { - simulatorBusy = NO; - } - } -} - -- (void)startSnifferWithHandler:(MBLDataHandler)handler -{ - snifferHandler = handler; -} -- (void)stopSniffer -{ - snifferHandler = nil; -} - -- (void)incrementCount -{ - if ([MBLConstants isSimulatorQueue]) { - MBLLog(MBLLogLevelDebug, @"+1 SimulatorQueue"); - [simulatorCountQueue suspend]; - } else { - MBLLog(MBLLogLevelDebug, @"+1 CountQueue"); - BOOL wasSuspended = [self.zeroCountQueue suspend]; - // If we were not previously suspended that means the link was - // idle, and since we are in this function work is about to happen - // so add a handler here to watch for when all activity is complete. - // At that point we reset the command count and update the cache - if (!wasSuspended) { - [self.zeroCountQueue addOperationWithBlock:^{ - commandCount = 0; - [self synchronizeAsync]; - }]; - } - } -} - -- (void)decrementCount -{ - if ([MBLConstants isSimulatorQueue]) { - MBLLog(MBLLogLevelDebug, @"-1 SimulatorQueue"); - [simulatorCountQueue resume]; - } else { - MBLLog(MBLLogLevelDebug, @"-1 CountQueue"); - [self.zeroCountQueue resume]; - } -} - -- (BFTask *)waitForCommandCompletion -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - [self.zeroCountQueue addOperationWithBlock:^{ - [source trySetResult:nil]; - }]; - return source.task; -} - -- (BFTask *)waitForSimulatorCompletion -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - [simulatorCountQueue addOperationWithBlock:^{ - [source trySetResult:nil]; - }]; - return source.task; -} - -- (BFTask *)waitForSimulatorTurn -{ - @synchronized(simulatorHandlerMutex) { - if (simulatorBusy) { - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - [simulatorFreeTasks addObject:source]; - return source.task; - } else { - simulatorBusy = YES; - return [BFTask taskWithResult:nil]; - } - } -} - -- (BFTask *)readRSSIAsync -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - dispatch_async([MBLConstants metaWearQueue], ^{ - if (self.state != MBLConnectionStateConnected) { - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before reading RSSI."}]]; - } else { - [self.peripheral readRSSI]; - } - }); - @synchronized (RSSISources) { - [RSSISources addObject:source]; - } - return source.task; -} - -- (void)peripheral:(id)peripheral didReadRSSI:(NSNumber *)RSSI error:(nullable NSError *)error -{ - @synchronized(RSSISources) { - for (BFTaskCompletionSource *source in RSSISources) { - if (error) { - [source trySetError:error]; - } else { - [source trySetResult:RSSI]; - } - } - [RSSISources removeAllObjects]; - } -} - - -- (BFTask *)readBatteryLifeAsync -{ - // Use the new age thing if we have it. - if (self.settings.batteryRemaining) { - return [[self.settings.batteryRemaining readAsync] continueWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return t.result.value; - }]; - } - // Fall back on the battery characteristic - if (!batteryLifeCharacteristic) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before reading battery life."}]]; - } - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - @synchronized (batteryLifeSources) { - [batteryLifeSources addObject:source]; - } - [self.peripheral readValueForCharacteristic:batteryLifeCharacteristic]; - return source.task; -} - -- (BFTask *)createAnonymousEventsAsync -{ - NSMutableArray *tasks = [NSMutableArray array]; - if (self.accelerometer) { - [tasks addObject:[self.accelerometer pullConfigAsync]]; - } - if (self.gyro) { - [tasks addObject:[self.gyro pullConfigAsync]]; - } - if (self.sensorFusion) { - [tasks addObject:[self.sensorFusion pullConfigAsync]]; - } - return [[BFTask taskForCompletionOfAllTasks:tasks] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.logging queryActiveLoggersAsync]; - }]; -} - -- (BFTask *)readDeviceInfoAsync; -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - @synchronized (deviceInfoSources) { - [deviceInfoSources addObject:source]; - } - if (self.deviceInfoReady) { - // If we have it deviceInfo cached just check the firmware rev to - // make sure the user didn't update using a different iOS device. - [self.peripheral readValueForCharacteristic:disFirmwareRevisionCharacteristic]; - } else { - self.deviceInfo = [[MBLDeviceInfo alloc] init]; - - [self.peripheral readValueForCharacteristic:disManufacturerNameCharacteristic]; - [self.peripheral readValueForCharacteristic:disSerialNumberCharacteristic]; - [self.peripheral readValueForCharacteristic:disHardwareRevisionCharacteristic]; - [self.peripheral readValueForCharacteristic:disFirmwareRevisionCharacteristic]; - if (disModelNumberCharacteristic) { - [self.peripheral readValueForCharacteristic:disModelNumberCharacteristic]; - } - } - return source.task; -} - -- (BOOL)loadResetState -{ - // Set this object back to the reset state if it exists - NSString *resetFile = [[MBLMetaWearManager sharedManager] logFilename:[self.identifier.UUIDString stringByAppendingString:@"Reset"]]; - //MBLMetaWear *savedState = [MBLMetaWear objectWithContentsOfFile:resetFile]; - //load fast archive - NSData *data = [NSData dataWithContentsOfFile:resetFile]; - //parse fast archive - MBLMetaWear *savedState = [FastCoder objectWithData:data]; - - if (savedState) { - MBLLog(MBLLogLevelInfo, @"Loaded Reset State"); - [self copyModulesFrom:savedState]; - } - return savedState != nil; -} - -- (void)resetDevice -{ - NSString *curVersion = self.accelerometer.device.deviceInfo.firmwareRevision; - if ([MBLConstants versionString:curVersion isLessThan:@"1.0.7"]) { - if (![self loadResetState]) { - // If no reset state, just null the module pointer which triggers a re-discovery - self.modules = nil; - [self synchronizeAsync]; - } - } - // Trigger the reset, this will cause a disconnect - [self.testDebug resetDevice]; -} - -- (BFTask *)sleepModeOnReset -{ - return [self.testDebug enterPowersaveOnReset]; -} - -- (BFTask *)checkForFirmwareUpdateAsync -{ - if (self.state != MBLConnectionStateConnected) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before performing checkForFirmwareUpdateAsync."}]]; - } - return [[MBLFirmwareUpdateManager getLatestFirmwareForDeviceAsync:self.deviceInfo] - continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [MBLConstants versionString:self.deviceInfo.firmwareRevision isLessThan:t.result.firmwareRev] ? t.result.firmwareRev : nil; - }]; -} - -- (BFTask *)prepareForFirmwareUpdateToVersionAsync:(MBLFirmwareBuild *)firmware -{ - // We must connect then jump to the bootloader. This special flag - // removes most of the init flow incase we connect to a super old - // unsuported firmware version. - self.bypassSetup = YES; - MBLFirmwareUpdateManager __block *updateManager; - return [[[[[[[self connectAsync] continueOnMetaWearWithBlock:^id (BFTask *t) { - // Make sure to always turn off the flag - self.bypassSetup = NO; - // Forwared errors we can't handle or move on to the update if we are already in DFU mode - if (t.error) { - return t; - } - // Read the device info if we wern't told what firmware to use - return firmware == nil ? [self readDeviceInfoAsync] : nil; - }] continueOnMetaWearWithSuccessBlock:^id (BFTask *t) { - // Grab the latest firmware if we wern't told what firmware to use - return firmware == nil ? [MBLFirmwareUpdateManager getLatestFirmwareForDeviceAsync:self.deviceInfo] : firmware; - }] continueOnMetaWearWithSuccessBlock:^id (BFTask *t) { - // Create master class which handles all the details for the firmware upate process - updateManager = [[MBLFirmwareUpdateManager alloc] initWithFirmware:t.result identifier:self.identifier]; - // Grab the correct firmware file first - return [t.result downloadFirmwareAsync]; - }] continueOnMetaWearWithSuccessBlock:^id (BFTask *t) { - // Getting into DFU causes the device to disconnect, so we execute this - // async to make sure our disconnection handler gets registered first. - BFTask *disconnectTask = [self waitForDisconnect]; - if (self.isMetaBoot) { - // See to simulate the disconnect that occurs when we jump to bootloader - [[MBLMetaWearManager sharedManager] disconnectMetaWear:self fromPeripheralSide:NO]; - } else { - [self.testDebug jumpToBootloader]; - } - return disconnectTask; - }] continueOnMetaWearWithSuccessBlock:^id (BFTask *t) { - return [updateManager startUpdate]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - updateManager = nil; - if (t.error) { - [[MBLAnalytics sharedManager] postEventForDevice:self.identifier - eventCategory:[@"update " stringByAppendingString:kMBLAPIVersion] - eventAction:@"fail" - eventLabel:t.error.localizedDescription]; - } else { - // Post update success to the analytics engine - [[MBLAnalytics sharedManager] postEventForDevice:self.identifier - eventCategory:[@"update " stringByAppendingString:kMBLAPIVersion] - eventAction:@"success" - eventLabel:@""]; - - // Clean out the old modules so that the connect will trigger a re-discovery - self.modules = nil; - // This is the one time nonVolatileState is cleared - self.nonVolatileState = [[MBLNonVolatileState alloc] init]; - [self synchronizeAsync]; - // TODO: Reprogram device after update if we have a configuration - } - return t; - }]; -} - -- (BFTask *)prepareForFirmwareUpdateAsync -{ - return [self prepareForFirmwareUpdateToVersionAsync:nil]; -} - -- (void)simulateDisconnect -{ - [[MBLMetaWearManager sharedManager] disconnectMetaWear:self fromPeripheralSide:YES]; -} - - -- (void)peripheral:(id)peripheral didDiscoverServices:(NSError *)error -{ - MBLLog(MBLLogLevelInfo, @"didDiscoverServices"); - if (error) { - [self connectionCompleteWithError:error]; - return; - } - - int services = 0; - for (CBService *service in peripheral.services) { - if ([service.UUID isEqual:[MBLConstants serviceUUID]]) { - services++; - self.isMetaBoot = NO; - [peripheral discoverCharacteristics:@[[MBLConstants commandUUID], [MBLConstants notificationUUID]] forService:service]; - } else if ([service.UUID isEqual:[MBLConstants batteryServiceUUID]]) { - services++; - [peripheral discoverCharacteristics:@[[MBLConstants batteryLifeUUID]] forService:service]; - } else if ([service.UUID isEqual:[MBLConstants DISServiceUUID]]) { - services++; - [peripheral discoverCharacteristics:@[[MBLConstants DISManufacturerNameUUID], - [MBLConstants DISSerialNumberUUID], - [MBLConstants DISHardwareRevUUID], - [MBLConstants DISFirmwareRevUUID], - [MBLConstants DISModelNumberUUID]] forService:service]; - } else if ([service.UUID isEqual:[MBLConstants DFUServiceUUID]]) { - services++; - self.isMetaBoot = YES; - // Expected service, but we don't need to discover its characteristics - } else { - [self connectionCompleteWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorUnexpectedServices - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear device contained an unexpected BLE service. Please try connection again."}]]; - return; - } - } - if (services != (self.isMetaBoot ? 2 : 3)) { - [self connectionCompleteWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorUnexpectedServices - userInfo:@{NSLocalizedDescriptionKey : @"Couldn't find all expected BLE services. Please try connection again."}]]; - } -} - -- (void)unexpectedCharacteristic -{ - [self connectionCompleteWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorUnexpectedCharacteristics - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear device contained an unexpected BLE characteristic. Please try connection again."}]]; -} - -- (void)peripheral:(id)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error -{ - MBLLog(MBLLogLevelInfo, @"didDiscoverCharacteristicsForService: %@", service.UUID); - if (error) { - [self connectionCompleteWithError:error]; - return; - } - - characteristicCount += (int)service.characteristics.count; - serviceCount++; - - if ([service.UUID isEqual:[MBLConstants serviceUUID]]) { - for (CBCharacteristic *characteristic in service.characteristics) { - if ([characteristic.UUID isEqual:[MBLConstants commandUUID]]) { - metawearCommandCharacteristic = characteristic; - } else if ([characteristic.UUID isEqual:[MBLConstants notificationUUID]]) { - // Make sure we don't start getting an bunch of random data on connect - // if the last disconnect wasn't so smooth - [peripheral setNotifyValue:NO forCharacteristic:characteristic]; - metawearNotification6Characteristic = characteristic; - } else { - [self unexpectedCharacteristic]; - } - } - } else if ([service.UUID isEqual:[MBLConstants batteryServiceUUID]]) { - for (CBCharacteristic *characteristic in service.characteristics) { - if ([characteristic.UUID isEqual:[MBLConstants batteryLifeUUID]]) { - batteryLifeCharacteristic = characteristic; - } else { - [self unexpectedCharacteristic]; - } - } - } else if ([service.UUID isEqual:[MBLConstants DISServiceUUID]]) { - for (CBCharacteristic *characteristic in service.characteristics) { - if ([characteristic.UUID isEqual:[MBLConstants DISManufacturerNameUUID]]) { - disManufacturerNameCharacteristic = characteristic; - } else if ([characteristic.UUID isEqual:[MBLConstants DISSerialNumberUUID]]) { - disSerialNumberCharacteristic = characteristic; - } else if ([characteristic.UUID isEqual:[MBLConstants DISHardwareRevUUID]]) { - disHardwareRevisionCharacteristic = characteristic; - } else if ([characteristic.UUID isEqual:[MBLConstants DISFirmwareRevUUID]]) { - disFirmwareRevisionCharacteristic = characteristic; - } else if ([characteristic.UUID isEqual:[MBLConstants DISModelNumberUUID]]) { - disModelNumberCharacteristic = characteristic; - } else { - [self unexpectedCharacteristic]; - } - } - } - - if (serviceCount == (self.isMetaBoot ? 1 : 3)) { - if ((self.isMetaBoot && characteristicCount != 5) || - (!self.isMetaBoot && !(characteristicCount == 7 || characteristicCount == 8))) { - [self connectionCompleteWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorUnexpectedCharacteristics - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear device contained an unexpected number of BLE characteristics. Please try connection again."}]]; - } else if (self.isMetaBoot) { - [self clearAllModules]; - [[self readDeviceInfoAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - [self connectionCompleteWithError:t.error]; - return nil; - }]; - } else if (self.bypassSetup) { - [self clearAllModules]; - // We need this one module to issue jump to bootloader commands - self.testDebug = [MBLTestDebug objectWithDevice:self moduleInfo:[[MBLModuleInfo alloc] initWithId:0xFE data:nil]]; - [self.peripheral setNotifyValue:YES forCharacteristic:metawearNotification6Characteristic]; - [self connectionCompleteWithError:nil]; - } else { - [self setupMetaWear]; - } - } -} - - -- (void)setupMetaWear -{ - [[[[[[[[self readDeviceInfoAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - // Starting firmware 1.1.0 we can flood the beast! - if ([MBLConstants versionString:t.result.firmwareRevision isLessThan:@"1.1.0"]) { - maxPendingWrites = 3; - } else { - maxPendingWrites = 10; - } - // Make sure the firmware isn't too old - NSString *required = MBLFirmwareVersionString([MBLMetaWearManager sharedManager].minimumRequiredVersion); - if ([MBLConstants versionString:t.result.firmwareRevision isLessThan:required]) { - // No sense to retry connection - connectionRetryCount = 0; - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOutdatedFirmware - userInfo:@{NSLocalizedDescriptionKey : @"Firmware update required before MetaWear can be used."}]]; - } - // Setup all the modules if required (that would be if we haven't done a discovery yet) - return [self initializeModulesIfNeededAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - // Start listening to the global notification register since the following - // checks need to read data (which uses callbacks throught this characteristic) - [self.peripheral setNotifyValue:YES forCharacteristic:metawearNotification6Characteristic]; - // Get MAC address if needed (but ignore errors) - return [self.mac ? nil : [self.settings.macAddress readAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - self.mac = t.result.value; - return nil; - }]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.testDebug isProgramedByOtherAppAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - BOOL isProgramedByOtherAppResult = t.result.boolValue; - self.programedByOtherApp = isProgramedByOtherAppResult; - // No matter if we are the owning application or not we first run checkForResetAsync - // since it sync's the logger timstamps since a guest app can download log now - return [[self.logging checkForResetAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - // If we are programmed by another app finish the connection now, note this will - // jump over all "success" blocks. Otherwise forward the "didReset" result to - // the next block and continue with extra cleanup and state checking. - return isProgramedByOtherAppResult ? [BFTask cancelledTask] : t; - }]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - BOOL didReset = t.result.boolValue; - if (didReset) { - if (![self loadResetState]) { - // No saved reset state so dont' even bother sanity checking it - return @NO; - } - } - // Sanity check the state to see if it's valid - return [self sanityCheck]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - BOOL stateValid = t.result.boolValue; - if (!stateValid) { - MBLLog(MBLLogLevelInfo, @"Unexpected MetaWear state - reseting modules"); - return [self resetModulesAsync]; - } - return nil; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - [self connectionCompleteWithError:t.error]; - return nil; - }]; -} - -- (BFTask *)sanityCheck -{ - if (_noencode_bypassSanityCheck) { - return [BFTask taskWithResult:@YES]; - } - if (_noencode_programedByOtherApp) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't sanityCheck in limited mode"}]; - return [BFTask taskWithError:error]; - } - // Perform some sanity checks on all the module state - NSMutableArray *tasks = [NSMutableArray array]; - for (id obj in self.modules) { - if ([obj isKindOfClass:[MBLModule class]]) { - [tasks addObject:[obj isStateValid]]; - } - }; - return [[BFTask taskForCompletionOfAllTasksWithResults:tasks] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Check for YES's - BOOL allValid = YES; - for (NSArray *array in task.result) { - for (NSNumber *isValid in array) { - if (!isValid.boolValue) { - allValid = NO; - break; - } - } - } - return [NSNumber numberWithBool:allValid]; - }]; -} - - --(void)peripheral:(id)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error -{ -#ifdef DEBUG - if (error) { MBLLog(MBLLogLevelError, @"didUpdateValueForCharacteristic Error: %@", error); } - if (characteristic == metawearNotification6Characteristic) { - MBLLog(MBLLogLevelInfo, @"Received: %@ ", characteristic.value); - } else { - MBLLog(MBLLogLevelInfo, @"didUpdateValueForCharacteristic = %@ with value %@",characteristic.UUID, characteristic.value); - } -#endif - if (characteristic == metawearCommandCharacteristic || characteristic == metawearNotification6Characteristic) { - NSAssert(characteristic.value.length, @"Didn't expect to receive an empty value."); - if (!characteristic.value.length) { - return; - } - uint8_t *bytes = (uint8_t *)characteristic.value.bytes; - uint8_t moduleId = *bytes; bytes++; - uint8_t registerId = *bytes; - // The first register is special and should only be read during initialization - if (registerId == 0x80) { - @synchronized(moduleInfoTaskSources) { - BFTaskCompletionSource *source = moduleInfoTaskSources[[NSNumber numberWithInt:moduleId]]; - if (!source) { - // If another app tries to connect to this MetaWear it could issue these discovery - // commands again, so lets track any unexpected reads of the these registers and use that - // as an indicator someone is trying to use 2 apps simultaneously which is very - // dangerous and unsupported. Our only option is to disconnect this app. - MBLLog(MBLLogLevelWarning, @"Simultaneous Connection - Disconnecting %@ because another App has initiated a connection", self); - [[MBLMetaWearManager sharedManager] disconnectMetaWear:self fromPeripheralSide:NO]; - } - [moduleInfoTaskSources removeObjectForKey:[NSNumber numberWithInt:moduleId]]; - if (error) { - // TODO: This can probably never be hit - [source trySetError:error]; - } else if (characteristic.value.length >= 4) { - // 4 or more bytes indicates the module is present and active - [source trySetResult:[[MBLModuleInfo alloc] initWithId:moduleId data:characteristic.value]]; - } else { - // Otherwise no module, so don't initialize it - [source trySetResult:nil]; - } - [self decrementCount]; - } - } else if (moduleId < self.modules.count) { - id module = self.modules[moduleId]; - if ([module respondsToSelector:@selector(recievedData:error:)]) { - [module recievedData:characteristic.value error:error]; - } else { - NSAssert(NO, @"No module found"); - } - } else if (moduleId == self.testDebug.moduleInfo.moduleId) { - if ([self.testDebug respondsToSelector:@selector(recievedData:error:)]) { - [self.testDebug recievedData:characteristic.value error:error]; - } else { - NSAssert(NO, @"No testDebug module found"); - } - } - } else if (characteristic == batteryLifeCharacteristic) { - if (!characteristic.value.length) { - // Retry if no data received - [peripheral readValueForCharacteristic:characteristic]; - return; - } - @synchronized(batteryLifeSources) { - for (BFTaskCompletionSource *source in batteryLifeSources) { - if (error) { - [source trySetError:error]; - } else { - [source trySetResult:[NSNumber numberWithInt:*(uint8_t *)characteristic.value.bytes]]; - } - } - [batteryLifeSources removeAllObjects]; - } - } else if (characteristic == disManufacturerNameCharacteristic) { - self.deviceInfo.manufacturerName = [[NSString alloc] initWithBytes:characteristic.value.bytes - length:characteristic.value.length - encoding:NSASCIIStringEncoding]; - [self sendDeviceInfoIfReadyWithError:error]; - } else if (characteristic == disSerialNumberCharacteristic) { - self.deviceInfo.serialNumber = [[NSString alloc] initWithBytes:characteristic.value.bytes - length:characteristic.value.length - encoding:NSASCIIStringEncoding]; - [self sendDeviceInfoIfReadyWithError:error]; - } else if (characteristic == disHardwareRevisionCharacteristic) { - self.deviceInfo.hardwareRevision = [[NSString alloc] initWithBytes:characteristic.value.bytes - length:characteristic.value.length - encoding:NSASCIIStringEncoding]; - [self sendDeviceInfoIfReadyWithError:error]; - } else if (characteristic == disFirmwareRevisionCharacteristic) { - NSString *firmwareRevision = [[NSString alloc] initWithBytes:characteristic.value.bytes - length:characteristic.value.length - encoding:NSASCIIStringEncoding]; - if (self.deviceInfo.firmwareRevision) { - if (![self.deviceInfo.firmwareRevision isEqualToString:firmwareRevision]) { - [self removeResetFile]; - // The firmware version changed, need to force a re-discovery - self.modules = nil; - [self synchronizeAsync]; - } - } - self.deviceInfo.firmwareRevision = firmwareRevision; - [self sendDeviceInfoIfReadyWithError:error]; - } else if (characteristic == disModelNumberCharacteristic) { - self.deviceInfo.modelNumber = [[NSString alloc] initWithBytes:characteristic.value.bytes - length:characteristic.value.length - encoding:NSASCIIStringEncoding]; - [self sendDeviceInfoIfReadyWithError:error]; - } -} - -- (void)peripheral:(id)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error -{ - if (error) { MBLLog(MBLLogLevelError, @"didWriteValueForCharacteristic Error: %@", error); } -} - -- (BOOL)deviceInfoReady -{ - if (self.deviceInfo.manufacturerName && - self.deviceInfo.serialNumber && - self.deviceInfo.hardwareRevision && - self.deviceInfo.firmwareRevision && - (!disModelNumberCharacteristic || self.deviceInfo.modelNumber)) { - return YES; - } - return NO; -} - -- (void)sendDeviceInfoIfReadyWithError:(NSError *)error -{ - if (error || self.deviceInfoReady) { - @synchronized(deviceInfoSources) { - for (BFTaskCompletionSource *source in deviceInfoSources) { - if (error) { - [source trySetError:error]; - } else { - [source trySetResult:self.deviceInfo]; - } - } - [deviceInfoSources removeAllObjects]; - } - } -} - -- (BOOL)retryConnectionIfAllowed -{ - if (connectionRetryCount) { - [[MBLAnalytics sharedManager] postEventForDevice:self.identifier - eventCategory:[@"connect " stringByAppendingString:kMBLAPIVersion] - eventAction:@"retry" - eventLabel:@""]; - MBLLog(MBLLogLevelInfo, @"Connection Failed -- Retrying"); - connectionRetryCount--; - characteristicCount = 0; - serviceCount = 0; - self.peripheral = nil; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - [[MBLMetaWearManager sharedManager] connectMetaWear:self]; - }); - return YES; - } - return NO; -} - -- (void)connectionCompleteWithError:(NSError *)error -{ - if (error) { - setupRequestedDisconnect = YES; - [[self disconnectAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (![self retryConnectionIfAllowed]) { - [[MBLAnalytics sharedManager] postEventForDevice:self.identifier - eventCategory:[@"connect " stringByAppendingString:kMBLAPIVersion] - eventAction:@"fail" - eventLabel:error.localizedDescription]; - MBLLog(MBLLogLevelInfo, @"Connection Failed"); - - [self invokeConnectionHandlers:error cancelled:NO]; - } - return nil; - }]; - return; - } - - // Handle the passing case - [[BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - // We set the state here so the deviceConnected handlers can - // shut off any streams without errors about us not beging connected - self.state = MBLConnectionStateConnected; - // Inform all the modules of this connection - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:self.modules.count]; - for (id obj in self.modules) { - if ([obj isKindOfClass:[MBLModule class]]) { - MBLModule *module = obj; - [tasks addObject:[module deviceConnected]]; - } - } - if (self.testDebug) { - [tasks addObject:[self.testDebug deviceConnected]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (t.error) { - self.state = MBLConnectionStateConnecting; - [self connectionCompleteWithError:t.error]; - } else { - MBLLog(MBLLogLevelInfo, @"Connection Success %@", self.deviceInfo.firmwareRevision); - [[MBLAnalytics sharedManager] postEventForDevice:self.identifier - eventCategory:[@"connect " stringByAppendingString:kMBLAPIVersion] - eventAction:@"success" - eventLabel:self.deviceInfo.firmwareRevision]; - [self invokeConnectionHandlers:nil cancelled:NO]; - } - return nil; - }]; -} - - -// Deprecated - -- (void)connectWithTimeout:(NSTimeInterval)timeout handler:(MBLErrorHandler)handler -{ - [[self connectWithTimeoutAsync:timeout] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (handler) { - handler(t.error); - } - return nil; - }]; -} - -- (void)disconnectWithHandler:(MBLErrorHandler)handler -{ - [[self disconnectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (handler) { - handler(t.error); - } - return nil; - }]; -} - -- (void)connectWithHandler:(MBLErrorHandler)handler -{ - [[self connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (handler) { - handler(t.error); - } - return nil; - }]; -} - -- (void)readBatteryLifeWithHandler:(MBLNumberHandler)handler -{ - [[self readBatteryLifeAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (handler) { - handler(t.result, t.error); - } - return nil; - }]; -} - -- (void)readRSSIWithHandler:(MBLNumberHandler)handler -{ - [[self readRSSIAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (handler) { - handler(t.result, t.error); - } - return nil; - }]; -} - -- (void)checkForFirmwareUpdateWithHandler:(MBLBoolHandler)handler -{ - [[self checkForFirmwareUpdateAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (handler) { - handler([t.result boolValue], t.error); - } - return nil; - }]; -} - -- (void)setConfiguration:(id)configuration handler:(MBLErrorHandler)handler -{ - [[self setConfigurationAsync:configuration] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (handler) { - handler(t.error); - } - return nil; - }]; -} - -- (void)prepareForFirmwareUpdateWithHandler:(MBLFirmwareUpdateHandler)handler -{ - [[self prepareForFirmwareUpdateAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (handler) { - MBLFirmwareUpdateInfo *info = t.result; - handler(info.firmwareUrl, info.target, info.centralManager, t.error); - } - return nil; - }]; -} - -- (void)updateFirmwareWithHandler:(MBLErrorHandler)handler - progressHandler:(MBLFloatHandler)progressHandler -{ - MBLLog(MBLLogLevelError, @"This function no longer works, use prepareForFirmwareUpdateWithHandler: instead"); -} - -- (void)synchronize -{ - [self synchronizeAsync]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLMetaWearManager.h b/MetaWear/Classes/Core/MBLMetaWearManager.h deleted file mode 100644 index e656a44..0000000 --- a/MetaWear/Classes/Core/MBLMetaWearManager.h +++ /dev/null @@ -1,152 +0,0 @@ -/** - * MBLMetaWearManager.h - * MetaWear - * - * Created by Stephen Schiffli on 7/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The MBLMetaWearManager is responsible for the scanning and discovery of MBLMetaWear devices. - */ -@interface MBLMetaWearManager : NSObject - -/** - Set the minimum firmware version required to run your app. If you attempt to connect - to a device with older firmware you will recieve a connection error. - This defaults to oldest firmware supported by this API. - */ -@property (nonatomic) MBLFirmwareVersion minimumRequiredVersion; - -/** - Sets the queue for which all callbacks on both the MBLMetaWearManager and - MBLMetaWear will occur on. Defaults to the main queue. - */ -@property (nonatomic) NSOperationQueue *dispatchQueue; - -/** - Log level that will be displayed, defaults to `MBLLogLevelWarning` - */ -@property (nonatomic) MBLLogLevel logLevel; - - -///---------------------------------- -/// @name Getting the Shared Instance -///---------------------------------- - -/** - Access the shared MBLMetaWearManager object - @returns The shared manager object. - @warning You should not create an MBLMetaWearManager object, only used the sharedManager - */ -+ (instancetype)sharedManager; - -///---------------------------------- -/// @name Bluetooth State Watching -///---------------------------------- - -- (void)startBluetoothStateNotificationsWithHandler:(nonnull MBLCentralManagerStateHandler)handler; - -- (void)stopBluetoothStateNotifications; - -///---------------------------------- -/// @name MetaWear Scanning and Finding -///---------------------------------- - -/** - Begin scanning for MetaWear devices. This will invoke the provided block each time a - new device shows up and passes an array of all discovered devices to the block. - This continues until stopScan is called. - @param handler Callback to handle each time a new device is found - @see startScanForMetaWearsAllowDuplicates:handler: - */ -- (void)startScanForMetaWearsWithHandler:(MBLArrayHandler)handler; - -/** - Begin scanning for MetaWear devices with the option to filter duplicate devices or not. - - This will invoke the provided block each time a new device shows up if filter == YES or - each time a new advertising packet is found if filter == NO (may be many times per second). - This can be useful in specific situations, such as making a connection based on a - MetaWear's RSSI, but may have an adverse affect on battery-life and application performance, - so use wisely. This continues until stopScan is called. - @param duplicates YES: only callback when a new device is found, NO: callback each time - @param handler Callback to handle each time a new device is found - a new advertising packet is found - */ -- (void)startScanForMetaWearsAllowDuplicates:(BOOL)duplicates handler:(MBLArrayHandler)handler; - -/** - This method is intended for recovery mode only. If a firmware update experiences an unexpected error, - the device may get stuck in the bootloader and thus won't show up in startScanForMetaWearsWithHandler:. - This method will start scanning for devices in bootloader mode - @param duplicates YES: only callback when a new device is found, NO: callback each time - a new advertising packet is found - @param handler Callback to handle each time a new device is found - @warning You can only call [MBLMetaWear updateFirmwareWithHandler:progressHandler:] on the `MBLMetaWear` objects - in the array - @warning This will cancel any current MetaWear scans - */ -- (void)startScanForMetaBootsAllowDuplicates:(BOOL)duplicates handler:(MBLArrayHandler)handler; - -/** - Stop scanning for devices, this will release all handlers given to - startScanForMetaWearsAllowDuplicates:handler: and startScanForMetaBootsAllowDuplicates:handler: - */ -- (void)stopScan; - -/** - Devices are cached between start/stop scan requests, use the method if you with to clear that cache - */ -- (void)clearDiscoveredDevices; - -/** - Returns a list of saved MetaWear objects, you add to this list by calling [MBLMetaWear rememberDevice] - @returns Task whose result will be an array of remembered MBLMetaWear objects - */ -- (BFTask *> *)retrieveSavedMetaWearsAsync; - -///---------------------------------- -/// @name Deprecated -///---------------------------------- - -- (void)stopScanForMetaBoots DEPRECATED_MSG_ATTRIBUTE("Use stopScan instead"); -- (void)stopScanForMetaWears DEPRECATED_MSG_ATTRIBUTE("Use stopScan instead"); -- (void)retrieveSavedMetaWearsWithHandler:(MBLArrayHandler)handler DEPRECATED_MSG_ATTRIBUTE("Use retrieveSavedMetaWearsAsync instead"); - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLMetaWearManager.m b/MetaWear/Classes/Core/MBLMetaWearManager.m deleted file mode 100644 index e1aa680..0000000 --- a/MetaWear/Classes/Core/MBLMetaWearManager.m +++ /dev/null @@ -1,655 +0,0 @@ -/** - * MBLMetaWearManager.m - * MetaWear - * - * Created by Stephen Schiffli on 7/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMetaWearManager.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLCategoryLoader.h" -#import "MBLAnalytics.h" -#import "MBLFirmwareBuild.h" -#import "MBLDeviceInfo.h" -#import "BFTask+MBLExtensions.h" -#import "FastCoder.h" -#import "MBLBluetoothCentralMock.h" -#import "MBLConstants+Private.h" -#import "MBLLogger.h" - -#import - -static NSString * const kMBLRememberedDevicesKey = @"com.mbientlab.metawear.rememberedDevices"; -static NSString * const kMBLBinaryVersionKey = @"com.mbientlab.metawear.binaryVersion"; - -#if TARGET_OS_SIMULATOR -static BOOL useMockManager = YES; -#else -static BOOL useMockManager = NO; -#endif -void MBLSetUseMockManager(BOOL useMock) { useMockManager = useMock; } - -@interface MBLMetaWearManager() - -@property (nonatomic) id centralManager; -@property (nonatomic) NSMutableArray *discoveredDevices; -@property (nonatomic) NSMutableArray *metaWearBlocks; -@property (nonatomic) NSMutableArray *metaBootBlocks; -@property (nonatomic) NSMutableArray *bothBlocks; -@property (nonatomic) NSMutableDictionary *peripheralToMetaWear; - -@property (nonatomic) NSNumber *allowDuplicates; -@property (nonatomic) NSArray *services; -@property BOOL isScanningMetaWears; -@property BOOL isScanningMetaBoots; -@property (nonatomic) NSMutableArray *centralStateUpdateSources; -@property (nonatomic) NSObject *centralStateUpdateSourcesMutex; -@property (nonatomic, copy) MBLCentralManagerStateHandler stateHandler; - -@property (nonatomic) MBLFirmwareBuild *latestFirmware; - -- (instancetype)init; -- (void)startScan; -@end - - -@implementation MBLMetaWearManager - -+ (void)initialize { - if (self == [MBLMetaWearManager class]) { - // Load all private categories, that we have... - // Without this call - private categories - will require `-ObjC` in linker flags. - // By explicitly calling empty method - we can avoid that. - [MBLCategoryLoader loadPrivateCategories]; - } -} - -+ (nonnull instancetype)sharedManager -{ - static MBLMetaWearManager *singleton = nil; - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - singleton = [[MBLMetaWearManager alloc] init]; - }); - return singleton; -} - -+ (NSOperationQueue *)dispatchQueue -{ - return [MBLMetaWearManager sharedManager].dispatchQueue; -} - -- (void)startBluetoothStateNotificationsWithHandler:(MBLCentralManagerStateHandler)handler -{ - self.stateHandler = handler; - if (handler) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - handler((CBCentralManagerState)self.centralManager.state); -#pragma clang diagnostic pop - } -} - -- (void)stopBluetoothStateNotifications -{ - self.stateHandler = nil; -} - -- (void)retrieveSavedMetaWearsWithHandler:(MBLArrayHandler)handler -{ - if (handler) { - [[self retrieveSavedMetaWearsAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask *> * _Nonnull task) { - handler(task.result); - return nil; - }]; - } -} - -- (BFTask *> *)retrieveSavedMetaWearsAsync -{ - // If the central isn't ready, save the handler and we will call later on once its ready - BFTask *head = [BFTask taskWithResult:nil]; - switch (self.centralManager.state) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - case CBCentralManagerStateUnknown: - case CBCentralManagerStateResetting: - // Updates are imminent, so wait - @synchronized(self.centralStateUpdateSourcesMutex) { - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - [self.centralStateUpdateSources addObject:source]; - head = source.task; - } - break; - case CBCentralManagerStateUnsupported: - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothUnsupported - userInfo:@{NSLocalizedDescriptionKey : @"The platform doesn't support the Bluetooth Low Energy Central/Client role."}]]; - case CBCentralManagerStateUnauthorized: - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothUnauthorized - userInfo:@{NSLocalizedDescriptionKey : @"The application is not authorized to use the Bluetooth Low Energy Central/Client role."}]]; - case CBCentralManagerStatePoweredOff: - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothPoweredOff - userInfo:@{NSLocalizedDescriptionKey : @"Core Bluetooth Error. Please ensure bluetooth is enabled."}]]; - case CBCentralManagerStatePoweredOn: - // Nothing to wait on! - break; -#pragma clang diagnostic pop - - } - - return [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // We first get the saved CBPeripheral identifiers. - NSArray *rememberedDevices = [[NSUserDefaults standardUserDefaults] arrayForKey:kMBLRememberedDevicesKey]; - NSMutableArray *identifiers = [NSMutableArray arrayWithCapacity:rememberedDevices.count]; - for (NSString *identifier in rememberedDevices) { - [identifiers addObject:[[NSUUID alloc] initWithUUIDString:identifier]]; - } - // Then get usable CBPeripheral objects from the central based on those identifiers - NSArray *peripherals = [self.centralManager retrievePeripheralsWithIdentifiers:identifiers]; - NSMutableArray *metaWears = [NSMutableArray arrayWithCapacity:peripherals.count]; - // And finally convert those CBPeripheral's to MBLMetaWears! - for (id peripheral in peripherals) { - [metaWears addObject:[self metawearFromPeripheral:peripheral]]; - } - return metaWears; - }]; -} - -- (void)startScanForMetaWears:(BOOL)metaWears metaBoots:(BOOL)metaBoots duplicates:(NSNumber *)duplicates handler:(MBLArrayHandler)handler; -{ - NSAssert(handler, @"Can't start scanning without handler"); - // All scan blocks and discovered devices should be accessed on dispatch queue - [self.dispatchQueue addOperationWithBlock:^{ - if (metaBoots && metaWears) { - [self.bothBlocks addObject:handler]; - if (self.discoveredDevices.count) { - handler(self.discoveredDevices); - } - } else if (metaWears) { - [self.metaWearBlocks addObject:handler]; - [self invokeHandler:handler isMetaBoot:NO]; - } else if (metaBoots) { - [self.metaBootBlocks addObject:handler]; - [self invokeHandler:handler isMetaBoot:YES]; - } - - if ((!self.isScanningMetaWears && metaWears) || (!self.isScanningMetaBoots && metaBoots)) { - self.allowDuplicates = duplicates; - NSMutableSet *set = [NSMutableSet setWithArray:self.services]; - if (metaWears) { - [set addObject:[MBLConstants serviceUUID]]; - } - if (metaBoots) { - [set addObject:[MBLConstants DFUServiceUUID]]; - } - self.services = set.allObjects; - - // Fire up scanning if the central is ready for it, otherwise it will get - // turned on later when its ready - #pragma clang diagnostic push - #pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (self.centralManager.state == CBCentralManagerStatePoweredOn) { - #pragma clang diagnostic pop - [self startScan]; - } - } - }]; -} - -- (void)invokeHandler:(MBLArrayHandler)handler isMetaBoot:(BOOL)isMetaBoot -{ - NSMutableArray *copyDevices = [self.discoveredDevices mutableCopy]; - [copyDevices filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(MBLMetaWear *obj, NSDictionary * _Nullable bindings) { - return obj.isMetaBoot == isMetaBoot; - }]]; - if (copyDevices.count) { - handler(copyDevices); - } -} - -- (void)startScanForMetaWearsWithHandler:(MBLArrayHandler)handler -{ - [self startScanForMetaWears:YES metaBoots:NO duplicates:@NO handler:handler]; -} - -- (void)startScanForMetaWearsAllowDuplicates:(BOOL)duplicates handler:(MBLArrayHandler)handler -{ - [self startScanForMetaWears:YES metaBoots:NO duplicates:duplicates ? @YES : @NO handler:handler]; -} - -- (void)startScanForMetaBootsAllowDuplicates:(BOOL)duplicates handler:(MBLArrayHandler)handler -{ - [self startScanForMetaWears:NO metaBoots:YES duplicates:duplicates ? @YES : @NO handler:handler]; -} - -- (void)stopScan -{ - [self.centralManager stopScan]; - // All scan blocks and discovered devices should be accessed on dispatch queue - [self.dispatchQueue addOperationWithBlock:^{ - [self.metaWearBlocks removeAllObjects]; - [self.metaBootBlocks removeAllObjects]; - [self.bothBlocks removeAllObjects]; - }]; - self.allowDuplicates = nil; - self.services = nil; - self.isScanningMetaWears = NO; - self.isScanningMetaBoots = NO; -} - -- (void)connectMetaWear:(MBLMetaWear *)device -{ - // When a MetaWear disconnects we nil out it's CBPeripheral, if the user wants - // to connect to it again ask the central for a fresh CBPeripheral - if (!device.peripheral) { - id peripheral = [[self.centralManager retrievePeripheralsWithIdentifiers:@[device.identifier]] firstObject]; - if (!peripheral) { - [device didDisconnect:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorInvalidMetaWearObject - userInfo:@{NSLocalizedDescriptionKey : @"Couldn't retrieve peripheral. Please remove and re-install app to clear cache."}]]; - return; - } - device.peripheral = peripheral; - peripheral.delegate = device; - self.peripheralToMetaWear[peripheral] = device; - } - // Short cut if its already connected - if (device.state == MBLConnectionStateConnected) { - [device didConnect]; - } else { - // Otherwise start the connection flow - [self.centralManager connectPeripheral:device.peripheral options:nil]; - } -} - -- (void)disconnectMetaWear:(MBLMetaWear *)device fromPeripheralSide:(BOOL)fromPeripheralSide -{ - // Take the short cut if we're already disconnected! - if (device.state == MBLConnectionStateDisconnected) { - [device didDisconnect:nil]; - } else { - if (fromPeripheralSide && device.testDebug) { - [device.testDebug triggerDisconnect]; - } else if (device.peripheral) { - [self.centralManager cancelPeripheralConnection:device.peripheral]; - } - } -} - -- (void)rememberMetaWear:(MBLMetaWear *)device -{ - // Get or create an array to hold all the remembered device identifiers - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSArray *devices = [defaults arrayForKey:kMBLRememberedDevicesKey]; - NSArray *newDevices = nil; - // Add the new device identifier if needed - if (devices) { - if (![devices containsObject:device.identifier.UUIDString]) { - NSMutableArray *tmp = [devices mutableCopy]; - [tmp addObject:device.identifier.UUIDString]; - newDevices = tmp; - } else { - newDevices = devices; - } - } else { - newDevices = @[device.identifier.UUIDString]; - } - // Save the array back to disk - [defaults setObject:newDevices forKey:kMBLRememberedDevicesKey]; - [defaults synchronize]; -} - -- (void)forgetMetaWear:(MBLMetaWear *)device -{ - // Remove the identifier from the remembered device array - NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - NSArray *devices = [defaults arrayForKey:kMBLRememberedDevicesKey]; - if (devices) { - NSMutableArray *tmp = [devices mutableCopy]; - [tmp removeObject:device.identifier.UUIDString]; - [defaults setObject:tmp forKey:kMBLRememberedDevicesKey]; - [defaults synchronize]; - } -} - -- (void)clearDiscoveredDevices -{ - // All scan blocks and discovered devices should be accessed on dispatch queue - [self.dispatchQueue addOperationWithBlock:^{ - [self.discoveredDevices removeAllObjects]; - }]; -} - -#pragma mark - Private helpers - -- (instancetype)init -{ - self = [super init]; - if (self) { - dispatch_queue_t bleQueue = dispatch_queue_create("com.mbientlab.metawear.bleQueue", DISPATCH_QUEUE_SERIAL); - //self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_queue_create("com.mbientlab.metawear.bleQueue", DISPATCH_QUEUE_SERIAL) options:@{ CBCentralManagerOptionRestoreIdentifierKey:@"com.mbientlab.centralManager"}]; - NSString *version = nil; - if (useMockManager) { - self.centralManager = [[MBLBluetoothCentralMock alloc] initWithDelegate:self queue:bleQueue options:nil]; - } else { - self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:bleQueue options:nil]; - version = [[NSUserDefaults standardUserDefaults] stringForKey:kMBLBinaryVersionKey]; - if (!version) { - version = @"0"; // Default value - } - } - self.discoveredDevices = [NSMutableArray array]; - self.metaWearBlocks = [NSMutableArray array]; - self.metaBootBlocks = [NSMutableArray array]; - self.bothBlocks = [NSMutableArray array]; - self.peripheralToMetaWear = [NSMutableDictionary dictionary]; - self.dispatchQueue = [NSOperationQueue mainQueue]; - - self.isScanningMetaWears = NO; - self.isScanningMetaBoots = NO; - self.minimumRequiredVersion = MBLFirmwareVersion1_0_4; - self.logLevel = MBLLogLevelWarning; - - self.centralStateUpdateSources = [NSMutableArray array]; - self.centralStateUpdateSourcesMutex = [[NSObject alloc] init]; - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - // Don't catch expections - BFTaskSetCatchesExceptions(NO); -#pragma clang diagnostic pop - - // If the app changes its binary version then we must delete all the cached MBLMetaWear objects, - // since they are no longer valid - if (!version || ![version isEqualToString:kMBLBinaryVersion]) { - // Don't use MBLLog since it needs to reference the MetaWearManager which we are setting up now - NSLog(@"Clearing! %@ -> %@", version, kMBLBinaryVersion); - [[NSUserDefaults standardUserDefaults] setObject:kMBLBinaryVersion forKey:kMBLBinaryVersionKey]; - // When the api version changes in an app you will need to reprogram devices - [[NSUserDefaults standardUserDefaults] removeObjectForKey:kMBLRememberedDevicesKey]; - [[NSUserDefaults standardUserDefaults] synchronize]; - // Delete the cachce folder - NSError *error; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-variable" - BOOL success = [[NSFileManager defaultManager] removeItemAtPath:[self logFilename:nil] error:&error]; -#pragma clang diagnostic pop - NSAssert(success, @"File remove error: %@", error); - } - } - return self; -} - -- (void)startScan -{ - if ([self.services containsObject:[MBLConstants serviceUUID]]) { - self.isScanningMetaWears = YES; - } - if ([self.services containsObject:[MBLConstants DFUServiceUUID]]) { - self.isScanningMetaBoots = YES; - } - [self.centralManager scanForPeripheralsWithServices:self.services - options:@{CBCentralManagerScanOptionAllowDuplicatesKey : self.allowDuplicates}]; - //CBCentralManagerOptionRestoreIdentifierKey : @"MetaWearCentral"}]; -} - -- (NSString *)logFilename:(NSString *)filename -{ -// tvOS isn't big on persistent local storage, long term we may want to use -// CloudKit or some other supported thing -// https://realm.io/news/is-tvos-the-future-of-apps/ -#if TARGET_OS_TV - NSArray *urls = [[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask]; -#else - NSArray *urls = [[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask]; -#endif - if (urls.count) { - NSURL *url = urls[0]; - url = [url URLByAppendingPathComponent:@"com.mbientlab.metawear.devices" isDirectory:YES]; - // Make sure we have the folder - BOOL isDirectory; - NSError *error; - if ([[NSFileManager defaultManager] fileExistsAtPath:url.path isDirectory:&isDirectory]) { - if (!isDirectory) { - if (![[NSFileManager defaultManager] removeItemAtURL:url error:&error]) { - // Don't use MBLLog since it needs to reference the MetaWearManager - // which we are setting up now - NSLog(@"removeItemAtURL error: %@", error); - } - } - } else { - isDirectory = NO; - } - if (!isDirectory) { - if (![[NSFileManager defaultManager] createDirectoryAtURL:url withIntermediateDirectories:YES attributes:nil error:&error]) { - NSLog(@"createDirectoryAtURL error: %@", error); - return nil; - } - } - // Add on the filename - if (filename) { - url = [url URLByAppendingPathComponent:filename]; - } - return url.path; - } - NSLog(@"URLsForDirectory:inDomains: nothing found"); - return nil; -} - -- (MBLMetaWear *)metawearFromPeripheral:(id)peripheral -{ - // Attempt to load MBLMetaWear from disk - NSData *data = [NSData dataWithContentsOfFile:[self logFilename:peripheral.identifier.UUIDString]]; - MBLMetaWear *device = [FastCoder objectWithData:data]; - // Create a new one if nothing was loaded - if (!device || [device isKindOfClass:[NSData class]]) { - device = [[MBLMetaWear alloc] initWithPeripheral:peripheral]; - } - self.peripheralToMetaWear[peripheral] = device; - return device; -} - -- (void)stopScanForMetaWears -{ - [self stopScan]; -} -- (void)stopScanForMetaBoots -{ - [self stopScan]; -} - -#pragma mark - CBCentralManagerDelegate - -- (void)centralManagerDidUpdateState:(id)central -{ - MBLCentralManagerStateHandler handler = self.stateHandler; - if (handler) { - [self.dispatchQueue addOperationWithBlock:^{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - handler((CBCentralManagerState)central.state); -#pragma clang diagnostic pop - }]; - } - -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (central.state == CBCentralManagerStatePoweredOn) { -#pragma clang diagnostic pop - // All scan blocks and discovered devices should be accessed on dispatch queue - [self.dispatchQueue addOperationWithBlock:^{ - if ((self.metaWearBlocks.count && !self.isScanningMetaWears) || - (self.metaBootBlocks.count && !self.isScanningMetaBoots) || - (self.bothBlocks.count && !(self.isScanningMetaBoots && self.isScanningMetaBoots))) { - [self startScan]; - } - }]; - } else { - // TODO: This seems like an iOS bug. If bluetooth powers off the peripherials disconnect but we don't - // get a deviceDidDisconnect callback. - for (MBLMetaWear *device in [self.peripheralToMetaWear allValues]) { - if (device.state != MBLConnectionStateDisconnected) { - [device bluetoothPoweredOff]; - } - } - } - - @synchronized(self.centralStateUpdateSourcesMutex) { - for (BFTaskCompletionSource *source in self.centralStateUpdateSources) { - switch (central.state) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - case CBCentralManagerStateUnknown: - case CBCentralManagerStateResetting: - // Updates are imminent, so wait - break; - case CBCentralManagerStateUnsupported: - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothUnsupported - userInfo:@{NSLocalizedDescriptionKey : @"The platform doesn't support the Bluetooth Low Energy Central/Client role."}]]; - case CBCentralManagerStateUnauthorized: - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothUnauthorized - userInfo:@{NSLocalizedDescriptionKey : @"The application is not authorized to use the Bluetooth Low Energy Central/Client role."}]]; - case CBCentralManagerStatePoweredOff: - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothPoweredOff - userInfo:@{NSLocalizedDescriptionKey : @"Core Bluetooth Error. Please ensure bluetooth is enabled."}]]; - case CBCentralManagerStatePoweredOn: - [source trySetResult:nil]; - break; -#pragma clang diagnostic pop - } - } - [self.centralStateUpdateSources removeAllObjects]; - } -} - -- (void)centralManager:(id)central - didDiscoverPeripheral:(id)peripheral - advertisementData:(NSDictionary *)advertisementData - RSSI:(NSNumber *)RSSI -{ - NSString *adName = advertisementData[CBAdvertisementDataLocalNameKey]; - CBUUID *uuid = [advertisementData[CBAdvertisementDataServiceUUIDsKey] firstObject]; - BOOL isMetaBoot = [uuid isEqual:[MBLConstants DFUServiceUUID]]; - // All scan blocks and discovered devices should be accessed on dispatch queue - [self.dispatchQueue addOperationWithBlock:^{ - // Get or create this MetaWear object - MBLMetaWear *device = nil; - for (MBLMetaWear *x in self.discoveredDevices) { - if ([x.identifier isEqual:peripheral.identifier]) { - device = x; - break; - } - } - if (!device) { - device = [self metawearFromPeripheral:peripheral]; - [self.discoveredDevices addObject:device]; - } - // Update info of this discovered device - [device updateName:adName ? adName : peripheral.name]; - device.discoveryTimeRSSI = RSSI; - device.advertisementData = advertisementData; - device.isMetaBoot = isMetaBoot; - - // Make copy incase stopScan is called inside which modifies these arrays - // Call blocks looking for either metawear or metaboot, we have to - // filter out the devices we are not intersted in - NSArray *copyHandlers = isMetaBoot ? [self.metaBootBlocks copy] : [self.metaWearBlocks copy]; - if (copyHandlers.count) { - NSMutableArray *copyDevices = [self.discoveredDevices mutableCopy]; - [copyDevices filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(MBLMetaWear *obj, NSDictionary * _Nullable bindings) { - return obj.isMetaBoot == isMetaBoot; - }]]; - for (MBLArrayHandler callback in copyHandlers) { - [self.dispatchQueue addOperationWithBlock:^{ - if ((isMetaBoot && self.isScanningMetaBoots) || (!isMetaBoot && self.isScanningMetaWears)) { - callback(copyDevices); - } - }]; - } - } - // Call both blocks with all devies - if (self.bothBlocks.count) { - NSArray *copyBothHandlers = [self.bothBlocks copy]; - NSArray *copyAllDevices = [self.discoveredDevices copy]; - for (MBLArrayHandler callback in copyBothHandlers) { - [self.dispatchQueue addOperationWithBlock:^{ - if (self.isScanningMetaBoots && self.isScanningMetaWears) { - callback(copyAllDevices); - } - }]; - } - } - }]; -} - -- (void)centralManager:(id)central didConnectPeripheral:(id)peripheral -{ - MBLLog(MBLLogLevelInfo, @"Connect: %@", peripheral.description); - MBLMetaWear *device = self.peripheralToMetaWear[peripheral]; - [device didConnect]; -} - -- (void)centralManager:(id)central didFailToConnectPeripheral:(id)peripheral error:(NSError *)error -{ - MBLLog(MBLLogLevelInfo, @"Connect Fail: %@", peripheral.description); - MBLMetaWear *device = self.peripheralToMetaWear[peripheral]; - [device didDisconnect:error]; - -} - -- (void)centralManager:(id)central didDisconnectPeripheral:(id)peripheral error:(NSError *)error -{ - MBLLog(MBLLogLevelInfo, @"Disconnect: %@\nError: %@", peripheral.description, error.localizedDescription); - MBLMetaWear *device = self.peripheralToMetaWear[peripheral]; - if (device.testDebug.triggerDisconnectInProgress && (error.code == CBErrorPeripheralDisconnected || error.code == CBErrorConnectionTimeout)) { - device.testDebug.triggerDisconnectInProgress = NO; - [device didDisconnect:nil]; - } else { - [device didDisconnect:error]; - } -} - -//- (void)centralManager:(id)central willRestoreState:(NSDictionary *)state -//{ -// NSArray *peripherals = state[CBCentralManagerRestoredStatePeripheralsKey]; -// for (id peripheral in peripherals) { -// [self metawearFromPeripheral:peripheral andAdvertisementData:nil RSSI:nil]; -// } -//} - -@end diff --git a/MetaWear/Classes/Core/MBLModule.h b/MetaWear/Classes/Core/MBLModule.h deleted file mode 100644 index 928de82..0000000 --- a/MetaWear/Classes/Core/MBLModule.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * MBLModule.h - * MetaWear - * - * Created by Stephen Schiffli on 10/22/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -/** - Base class for all sensors and peripherals - */ -@interface MBLModule : NSObject - -@end diff --git a/MetaWear/Classes/Core/MBLModule.m b/MetaWear/Classes/Core/MBLModule.m deleted file mode 100644 index fedb602..0000000 --- a/MetaWear/Classes/Core/MBLModule.m +++ /dev/null @@ -1,272 +0,0 @@ -/** - * MBLModule.m - * MetaWear - * - * Created by Stephen Schiffli on 10/22/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLModule+Private.h" -#import "MBLRegister+Private.h" -#import "MBLEvent+Private.h" -#import "MBLFilter.h" -#import "MBLConstants+Private.h" -#import "BFTask+MBLPrivate.h" - -@interface MBLModule () -@property (nonatomic, weak) MBLMetaWear *device; -@property (nonatomic) NSMutableArray *registers; -@property (nonatomic) MBLModuleInfo *moduleInfo; - -@property (nonatomic) int initializeCount; -@property (nonatomic) int activateCount; -@property (nonatomic) MBLRegister *globalEnable; -@end - -@implementation MBLModule { - BFTask *initializeTask; - BFTask *deinitializeTask; - BFTask *activateTask; - BFTask *deactivateTask; -} - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - return [[self alloc] initWithDevice:device moduleInfo:moduleInfo]; -} - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super init]; - if (self) { - self.device = device; - self.registers = [NSMutableArray array]; - self.moduleInfo = moduleInfo; - - self.initializeCount = 0; - self.activateCount = 0; - - initializeTask = [BFTask taskWithResult:nil]; - deinitializeTask = [BFTask taskWithResult:nil]; - activateTask = [BFTask taskWithResult:nil]; - deactivateTask = [BFTask taskWithResult:nil]; - } - return self; -} - -- (id)awakeAfterFastCoding -{ - initializeTask = [BFTask taskWithResult:nil]; - deinitializeTask = [BFTask taskWithResult:nil]; - activateTask = [BFTask taskWithResult:nil]; - deactivateTask = [BFTask taskWithResult:nil]; - - return self; -} - -- (BFTask *)isStateValid -{ - return [BFTask taskForCompletionOfAllTasksWithResults:@[[BFTask taskWithResult:@YES]]]; -} - -- (void)addRegister:(MBLRegister *)reg -{ - dispatch_async([MBLConstants metaWearQueue], ^{ - [self.registers addObject:reg]; - }); -} - -- (BFTask *)getRegister:(NSData *)data -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - const uint8_t *bytes = data.bytes; - // Decompose the data coming from the MetaWear firmware, see the firwmare API guide - // for details on the protocol - uint8_t registerId = *(bytes + 1) & 0x3F; // Strip off the "[local] read bit" - uint8_t index = 0xFF; - // If the register contains an index it would be at byte 3, note the index isn't required - if (data.length > 2) { - index = *(bytes + 2); - } - dispatch_async([MBLConstants metaWearQueue], ^{ - for (MBLRegister *obj in self.registers) { - // See if we have a register id match - if ((obj.registerId & 0x3F) == registerId) { - // If the register doesn't expect an index then give it the data! However, if it does - // then the indexs must match. - if (obj.index == 0xFF) { - [source trySetResult:obj]; - } else if (obj.index == index) { - [source trySetResult:obj]; - } - } - } - [source trySetResult:nil]; - }); - return source.task; -} - -- (void)recievedData:(NSData *)data error:(NSError *)error -{ - // Decompose the data coming from the MetaWear firmware, see the firwmare API guide - // for details on the protocol - uint8_t registerId = (*(uint8_t *)(data.bytes + 1)) & 0x7F; // Strip off the "read bit" - uint8_t index = 0xFF; - // If the register contains an index it would be at byte 3, note the index isn't required - if (data.length > 2) { - index = *(uint8_t *)(data.bytes + 2); - } - // sync because a new register is created inside [obj recievedData:error:], which then - // breaks this because the collection would be modified while iterating - dispatch_async([MBLConstants metaWearQueue], ^{ - for (MBLRegister *obj in self.registers) { - // See if we have a register id match - if ((obj.registerId & 0x7F) == registerId) { - // If the register doesn't expect an index then give it the data! However, if it does - // then the indexs must match. - if (obj.index == 0xFF) { - [obj recievedData:[data subdataWithRange:NSMakeRange(2, data.length - 2)] error:error]; - } else if (obj.index == index) { - [obj recievedData:[data subdataWithRange:NSMakeRange(3, data.length - 3)] error:error]; - } - } - } - }); -} - -- (void)deviceDisconnected:(NSError *)error -{ - for (MBLRegister *obj in self.registers) { - [obj deviceDisconnected:error]; - } -} - -- (BFTask *)deviceConnected -{ - NSMutableArray *tasks = [NSMutableArray arrayWithCapacity:self.registers.count]; - for (MBLRegister *obj in self.registers) { - [tasks addObject:[obj deviceConnected]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)initializeAsync -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - self.initializeCount++; - if (self.initializeCount == 1) { - initializeTask = [[self performAsyncInitialization] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.initializeCount = 0; - } - return task; - }]; - } - return initializeTask; - }]; -} - -- (BFTask *)deinitializeAsync -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - self.initializeCount--; - if (self.initializeCount == 0) { - deinitializeTask = [[self performAsyncDeinitialization] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.initializeCount = 1; - } - return task; - }]; - } - self.initializeCount = MAX(self.initializeCount, 0); - return deinitializeTask; - }]; -} - -- (BFTask *)activateAsync -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - self.activateCount++; - if (self.activateCount == 1) { - activateTask = [[self performAsyncActivation] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.activateCount = 0; - } - return task; - }]; - } - return activateTask; - }]; -} - -- (BFTask *)deactivateAsync -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - self.activateCount--; - if (self.activateCount == 0) { - activateTask = [[self performAsyncDeactivation] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.activateCount = 1; - } - return task; - }]; - } - self.activateCount = MAX(self.activateCount, 0); - return activateTask; - }]; -} - -- (BFTask *)performAsyncInitialization -{ - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)performAsyncDeinitialization -{ - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)performAsyncActivation -{ - if (self.globalEnable) { - return [self.globalEnable writeByteAsync:0x1]; - } - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)performAsyncDeactivation -{ - if (self.globalEnable) { - return [self.globalEnable writeByteAsync:0x0]; - } - return [BFTask taskWithResult:nil]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLNumericData.h b/MetaWear/Classes/Core/MBLNumericData.h deleted file mode 100644 index 31f2a86..0000000 --- a/MetaWear/Classes/Core/MBLNumericData.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * MBLNumericData.h - * MetaWear - * - * Created by Stephen Schiffli on 10/22/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - All MetaWear data that can be represented as a number - */ -@interface MBLNumericData : MBLDataSample - -/** - Value of the numeric data - */ -@property (nonatomic, readonly) NSNumber *value; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLNumericData.m b/MetaWear/Classes/Core/MBLNumericData.m deleted file mode 100644 index 6a6d06c..0000000 --- a/MetaWear/Classes/Core/MBLNumericData.m +++ /dev/null @@ -1,65 +0,0 @@ -/** - * MBLNumericData.m - * MetaWear - * - * Created by Stephen Schiffli on 10/22/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLNumericData+Private.h" -#import "MBLDataSample+Private.h" - - -@interface MBLNumericData() -@property (nonatomic) NSNumber *value; -@end - -@implementation MBLNumericData - -- (instancetype)initWithNumber:(NSNumber *)number timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.value = number; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %@", [super description], self.value.stringValue]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%@\n", self.timestamp.timeIntervalSince1970, self.value.stringValue]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLRegister.h b/MetaWear/Classes/Core/MBLRegister.h deleted file mode 100644 index 141e971..0000000 --- a/MetaWear/Classes/Core/MBLRegister.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * MBLRegister.h - * MetaWear - * - * Created by Stephen Schiffli on 10/8/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -/** - Base class for MetaWear registers - */ -@interface MBLRegister : NSObject - -@end diff --git a/MetaWear/Classes/Core/MBLRegister.m b/MetaWear/Classes/Core/MBLRegister.m deleted file mode 100644 index eb00555..0000000 --- a/MetaWear/Classes/Core/MBLRegister.m +++ /dev/null @@ -1,597 +0,0 @@ -/** - * MBLRegister.m - * MetaWear - * - * Created by Stephen Schiffli on 10/8/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLRegister+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLModule+Private.h" -#import "BFTask+MBLPrivate.h" -#import "BFTask+MBLExtensions.h" -#import "MBLConstants+Private.h" -#import "MBLLogger.h" - -typedef NS_OPTIONS(uint8_t, MBLRegisterState) { - MBLRegisterStateNeedsResponse = 1 << 0, - MBLRegisterStateWriteResponds = 1 << 1, - MBLRegisterStateIsNotifying = 1 << 2, - MBLRegisterStateIsLogging = 1 << 3, - MBLRegisterStateHasCommands = 1 << 4 -}; - -@interface MBLRegister () -@property (nonatomic, weak) MBLModule *module; -@property (nonatomic) uint8_t registerId; -@property (nonatomic) uint8_t index; -@property (nonatomic) MBLRegisterState state; -@property (nonatomic) MBLFormat *format; -@property (nonatomic, nullable) NSString *identifier; - -@property (nonatomic) int16_t initializeCount; -@property (nonatomic) int16_t activateCount; -@end - -@implementation MBLRegister { - NSMutableArray *taskSources; - NSMutableArray *notifyCallbacks; - - BFTask *initializeTask; - BFTask *deinitializeTask; - BFTask *activateTask; - BFTask *deactivateTask; - BFTask *startNotificationTask; - BFTask *stopNotificationTask; -} - -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format identifier:(nullable NSString *)identifier -{ - self = [super init]; - if (self) { - self.module = module; - self.registerId = registerId; - self.index = index; - self.needsResponse = NO; - self.format = format; - self.identifier = identifier; - - self.initializeCount = 0; - self.activateCount = 0; - - taskSources = [NSMutableArray array]; - notifyCallbacks = [NSMutableArray array]; - - initializeTask = [BFTask taskWithResult:nil]; - deinitializeTask = [BFTask taskWithResult:nil]; - activateTask = [BFTask taskWithResult:nil]; - deactivateTask = [BFTask taskWithResult:nil]; - startNotificationTask = [BFTask taskWithResult:nil]; - stopNotificationTask = [BFTask taskWithResult:nil]; - - // This is a special dummy register for testing - if (registerId != 0xFF) { - [module addRegister:self]; - } - } - return self; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format identifier:(NSString *)identifier -{ - return [self initWithModule:module registerId:registerId index:0xFF format:format identifier:identifier]; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format -{ - return [self initWithModule:module registerId:registerId index:index format:format identifier:nil]; -} -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format -{ - return [self initWithModule:module registerId:registerId index:0xFF format:format identifier:nil]; -} - -- (id)awakeAfterFastCoding -{ - taskSources = [NSMutableArray array]; - notifyCallbacks = [NSMutableArray array]; - - initializeTask = [BFTask taskWithResult:nil]; - deinitializeTask = [BFTask taskWithResult:nil]; - activateTask = [BFTask taskWithResult:nil]; - deactivateTask = [BFTask taskWithResult:nil]; - startNotificationTask = [BFTask taskWithResult:nil]; - stopNotificationTask = [BFTask taskWithResult:nil]; - - return self; -} - -- (BOOL)needsResponse -{ - assert([MBLConstants isMetaWearQueue]); - return self.state & MBLRegisterStateNeedsResponse; -} - -- (void)setNeedsResponse:(BOOL)needsResponse -{ - if (needsResponse) { - self.state |= MBLRegisterStateNeedsResponse; - } else { - self.state &= ~MBLRegisterStateNeedsResponse; - } -} - -- (BOOL)writeResponds -{ - assert([MBLConstants isMetaWearQueue]); - return self.state & MBLRegisterStateWriteResponds; -} - -- (void)setWriteResponds:(BOOL)writeResponds -{ - if (writeResponds) { - self.state |= MBLRegisterStateWriteResponds; - } else { - self.state &= ~MBLRegisterStateWriteResponds; - } -} - -- (BOOL)isNotifyingImpl -{ - assert([MBLConstants isMetaWearQueue]); - return self.state & MBLRegisterStateIsNotifying; -} - -- (void)setIsNotifyingImpl:(BOOL)isNotifying -{ - assert([MBLConstants isMetaWearQueue]); - if (isNotifying) { - self.state |= MBLRegisterStateIsNotifying; - } else { - self.state &= ~MBLRegisterStateIsNotifying; - } -} - -- (BOOL)isLoggingImpl -{ - assert([MBLConstants isMetaWearQueue]); - return self.state & MBLRegisterStateIsLogging; -} - -- (void)setIsLoggingImpl:(BOOL)isLogging -{ - assert([MBLConstants isMetaWearQueue]); - if (isLogging) { - self.state |= MBLRegisterStateIsLogging; - } else { - self.state &= ~MBLRegisterStateIsLogging; - } -} - -- (BOOL)hasCommandsImpl -{ - assert([MBLConstants isMetaWearQueue]); - return self.state & MBLRegisterStateHasCommands; -} - -- (void)setHasCommandsImpl:(BOOL)hasCommands -{ - assert([MBLConstants isMetaWearQueue]); - if (hasCommands) { - self.state |= MBLRegisterStateHasCommands; - } else { - self.state &= ~MBLRegisterStateHasCommands; - } -} - -- (BFTask *)sendByteToDevice:(uint8_t)byte isRead:(BOOL)isRead -{ - return [self sendDataToDevice:[NSData dataWithBytes:&byte length:1] isRead:isRead isLocal:NO]; -} - -- (BFTask *)sendDataToDevice:(NSData *)parameters isRead:(BOOL)isRead isLocal:(BOOL)isLocal -{ - MBLMetaWear *device = self.module.device; - if (device.state == MBLConnectionStateDisconnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before performing read operations."}]; - return [BFTask taskWithError:error]; - - } - if (!self.module.moduleInfo.moduleId || !self.registerId) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"Attempted to communicate with invalid module/register."}]; - return [BFTask taskWithError:error]; - } - - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - [device incrementCount]; - [BFTask taskFromMetaWearWithBlock:^id{ - if ([MBLConstants isSimulatorQueue]) { - [source trySetResult:nil]; - } else if (isRead || self.writeResponds) { - [taskSources addObject:source]; - } else { - [source trySetResult:nil]; - } - - uint8_t header[] = { self.module.moduleInfo.moduleId, self.registerId }; - int headerSize = sizeof(header) / sizeof(header[0]); - if (isRead) { - header[1] |= 0x80; - } - if (isLocal) { - header[1] |= 0x40; - } - NSMutableData *data = [NSMutableData dataWithBytes:header length:headerSize]; - [data appendData:parameters]; - [device writeCommandRegister:data withResponse:self.needsResponse]; - return nil; - }]; - // Make sure the decrement is placed on the queue in such a way that it happens after - // all the read callbacks have finished - [source.task continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [BFTask taskFromMetaWearWithBlock:^id{ - [device decrementCount]; - return nil; - }]; - return nil; - }]; - return source.task; -} - -- (BFTask *)readAsync -{ - return [self sendDataToDevice:[self readParameters] isRead:YES isLocal:NO]; -} - -- (nonnull BFTask *)readForcedIndexAsync:(uint8_t)index -{ - return [self sendDataToDevice:[NSData dataWithBytes:&index length:1] isRead:YES isLocal:NO]; -} - -- (BFTask *)localReadAsync -{ - return [self sendDataToDevice:[self readParameters] isRead:YES isLocal:YES]; -} - -- (NSData *)readParameters -{ - NSData *params = nil; - if (self.index != 0xFF) { - params = [NSData dataWithBytes:&_index length:1]; - } - return params; -} - - -- (BFTask *)writeByteAsync:(uint8_t)byte -{ - return [self writeDataAsync:[NSData dataWithBytes:&byte length:1]]; -} - -- (BFTask *)writeDataAsync:(NSData *)params -{ - return [self sendDataToDevice:params isRead:NO isLocal:NO]; -} - -- (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler -{ - return [self startNotificationsWithExecutorAsync:[BFExecutor dispatchExecutor] withHandler:handler]; -} - -- (BFTask *)startNotificationsWithExecutorAsync:(BFExecutor *)executor withHandler:(nullable MBLObjectHandler)handler -{ - MBLMetaWear *device = self.module.device; - if (device.state != MBLConnectionStateConnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Please connect to MetaWear before streaming data."}]; - if (handler) { - [executor execute:^{ - handler(nil, error); - }]; - } - return [BFTask taskWithError:error]; - } - - [device incrementCount]; - return [BFTask taskFromMetaWearWithBlock:^id{ - [self addNotificationWithExecutor:executor handler:handler]; - // Shortcut if we are already all setup - if (!self.isNotifyingImpl) { - self.isNotifyingImpl = YES; - - startNotificationTask = [[[[self initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self performAsyncStartNotifications]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self activateAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.isNotifyingImpl = NO; - [self removeNotificationHandlers]; - } - [device decrementCount]; - return task; - }]; - } else { - [device decrementCount]; - } - return startNotificationTask; - }]; -} - -- (BFTask *)performAsyncStartNotifications -{ - // Indexed registers and periodic read registers arn't equiped to take notification bytes - if (self.index == 0xFF && !(self.registerId & 0x80)) { - return [self sendByteToDevice:0x1 isRead:NO]; - } - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)stopNotificationsAsync -{ - MBLMetaWear *device = self.module.device; - if (device.state != MBLConnectionStateConnected) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNotConnected - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear not connected, can't perform operation. Notifications will automatically be stopped on next connect."}]; - return [BFTask taskWithError:error]; - } - - [device incrementCount]; - return [BFTask taskFromMetaWearWithBlock:^id{ - // Do nothing if we notifications are not enabled - if (self.isNotifyingImpl) { - self.isNotifyingImpl = NO; - - [self removeNotificationHandlers]; - - stopNotificationTask = [[[[self deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self performAsyncStopNotificationsAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self deinitializeAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.isNotifyingImpl = YES; - } - [device decrementCount]; - return task; - }]; - } else { - [device decrementCount]; - } - return stopNotificationTask; - }]; -} - -- (BFTask *)performAsyncStopNotificationsAsync -{ - // Indexed registers and periodic read registers arn't equiped to take notification bytes - if (self.index == 0xFF && !(self.registerId & 0x80)) { - return [self sendByteToDevice:0x0 isRead:NO]; - } - return [BFTask taskWithResult:nil]; -} - -- (void)addNotificationWithExecutor:(BFExecutor *)executor handler:(MBLObjectHandler)handler -{ - assert([MBLConstants isMetaWearQueue]); - if (handler) { - MBLObjectHandler wrappedHandler = ^(id obj, NSError *error) { - [executor execute:^{ - handler(obj, error); - }]; - }; - [notifyCallbacks addObject:wrappedHandler]; - } -} - -- (void)removeNotificationHandlers -{ - dispatch_async([MBLConstants metaWearQueue], ^{ - [notifyCallbacks removeAllObjects]; - }); -} - -- (void)recievedData:(NSData *)data error:(NSError *)error -{ - assert([MBLConstants isMetaWearQueue]); - id formattedObj = nil; - if (data) { - // Transform the NSData into a register specific object - MBLFormat *format = self.format; - NSData *trimmed = [data subdataWithRange:NSMakeRange(format.offset, MIN(format.length, data.length - format.offset))]; - formattedObj = [format entryFromData:trimmed date:[NSDate date]]; - } - - // Callbacks are used for one time read/write calls, so the block is deleted - // immediately after it's used - if (taskSources.count) { - // We assume the data comes back in the order it was requested - BFTaskCompletionSource *source = taskSources.firstObject; - [taskSources removeObjectAtIndex:0]; - if (error) { - [source trySetError:error]; - } else { - [source trySetResult:formattedObj]; - } - } - - // Notify Callbacks are used when we subscribe to MetaWear registers, so we don't - // delete them until removeNotificationHandlers is called - for (MBLObjectHandler callback in notifyCallbacks) { - // callback are alredy wrapped to execute on the correct queue - if ([formattedObj conformsToProtocol:@protocol(NSFastEnumeration)]) { - for (id obj in formattedObj) { - callback(obj, error); - } - } else { - callback(formattedObj, error); - } - } -} - -- (void)deviceDisconnected:(NSError *)error -{ - assert([MBLConstants isMetaWearQueue]); - BOOL noError = error == nil; - if (!error) { - error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorUnexpectedDisconnect - userInfo:@{NSLocalizedDescriptionKey : @"Unexpected disconnect. Please connect again to perform operation."}]; - } - - // Let anyone who is waiting on a callback know it's not going to happen - for (BFTaskCompletionSource *source in taskSources) { - [source trySetError:error]; - } - [taskSources removeAllObjects]; - - // Special warning letting the SDK user know they forgot to clean up a notifying resource - if (self.isNotifyingImpl && noError) { - MBLLog(MBLLogLevelWarning, @"Forgot to stop all notifications before disconnecting"); - } - for (MBLObjectHandler callback in notifyCallbacks) { - [[MBLMetaWearManager dispatchQueue] addOperationWithBlock:^{ - callback(nil, error); - }]; - } - [notifyCallbacks removeAllObjects]; -} - -- (BFTask *)deviceConnected -{ - if (self.isNotifyingImpl) { - return [self stopNotificationsAsync]; - } - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)initializeAsync -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - self.initializeCount++; - if (self.initializeCount == 1) { - // Initialize the module then initialize us - initializeTask = [[[self.module initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self performAsyncInitialization]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.initializeCount = 0; - } - return task; - }]; - } - return initializeTask; - }]; -} - -- (BFTask *)deinitializeAsync -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - self.initializeCount--; - if (self.initializeCount == 0) { - // Deinitialize us then deinitialize the module - deinitializeTask = [[[self performAsyncDeinitialization] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.module deinitializeAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.initializeCount = 1; - } - return task; - }]; - } - self.initializeCount = MAX(self.initializeCount, 0); - return deinitializeTask; - }]; -} - -- (BFTask *)activateAsync -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - self.activateCount++; - if (self.activateCount == 1) { - activateTask = [[[self performAsyncActivation] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.module activateAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.activateCount = 0; - } - return task; - }]; - } - return activateTask; - }]; -} - -- (BFTask *)deactivateAsync -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - self.activateCount--; - if (self.activateCount == 0) { - activateTask = [[[self.module deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self performAsyncDeactivation]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.faulted) { - self.activateCount = 1; - } - return task; - }]; - } - self.activateCount = MAX(self.activateCount, 0); - return activateTask; - }]; -} - -- (BFTask *)performAsyncInitialization -{ - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)performAsyncDeinitialization -{ - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)performAsyncActivation -{ - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [BFTask taskWithResult:nil]; -} - -@end diff --git a/MetaWear/Classes/Core/MBLStringData.h b/MetaWear/Classes/Core/MBLStringData.h deleted file mode 100644 index 4d3078b..0000000 --- a/MetaWear/Classes/Core/MBLStringData.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * MBLStringData.h - * MetaWear - * - * Created by Stephen Schiffli on 12/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - All MetaWear data that can be represented as a string - */ -@interface MBLStringData : MBLDataSample - -/** - Value of the string data - */ -@property (nonatomic, readonly) NSString *value; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Core/MBLStringData.m b/MetaWear/Classes/Core/MBLStringData.m deleted file mode 100644 index 815e2cf..0000000 --- a/MetaWear/Classes/Core/MBLStringData.m +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLStringData.m - * MetaWear - * - * Created by Stephen Schiffli on 12/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLStringData+Private.h" -#import "MBLDataSample+Private.h" - -@interface MBLStringData () -@property (nonatomic) NSString *value; -@end - -@implementation MBLStringData - -- (instancetype)initWithString:(NSString *)string timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.value = string; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %@", [super description], self.value]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%@\n", self.timestamp.timeIntervalSince1970, self.value]; -} - -@end diff --git a/MetaWear/Classes/MetaWear.h b/MetaWear/Classes/MetaWear.h deleted file mode 100755 index b925c2e..0000000 --- a/MetaWear/Classes/MetaWear.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - * MetaWear.h - * MetaWear - * - * Created by Stephen Schiffli on 7/30/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import -#import - -#import diff --git a/MetaWear/Classes/Modules/ANCS/MBLANCS.h b/MetaWear/Classes/Modules/ANCS/MBLANCS.h deleted file mode 100644 index a78597c..0000000 --- a/MetaWear/Classes/Modules/ANCS/MBLANCS.h +++ /dev/null @@ -1,141 +0,0 @@ -/** - * MBLANCS.h - * MetaWear - * - * Created by Stephen Schiffli on 11/17/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLANCSEventData; -@class MBLANCSEvent; - -NS_ASSUME_NONNULL_BEGIN - -/** - Category in which the iOS notification can be classified - */ -typedef NS_OPTIONS(uint16_t, MBLANCSCategoryID) { - MBLANCSCategoryIDOther = 1 << 0, - MBLANCSCategoryIDIncomingCall = 1 << 1, - MBLANCSCategoryIDMissedCall = 1 << 2, - MBLANCSCategoryIDVoicemail = 1 << 3, - MBLANCSCategoryIDSocial = 1 << 4, - MBLANCSCategoryIDSchedule = 1 << 5, - MBLANCSCategoryIDEmail = 1 << 6, - MBLANCSCategoryIDNews = 1 << 7, - MBLANCSCategoryIDHealthAndFitness = 1 << 8, - MBLANCSCategoryIDBusinessAndFinance = 1 << 9, - MBLANCSCategoryIDLocation = 1 << 10, - MBLANCSCategoryIDEntertainment = 1 << 11, - MBLANCSCategoryIDAny = 0xFFFF -}; - -/** - This field informs whether the given iOS notification was added, modified, or removed - */ -typedef NS_OPTIONS(uint8_t, MBLANCSEventID) { - MBLANCSEventIDNotificationAdded = 1 << 0, - MBLANCSEventIDNotificationModified = 1 << 1, - MBLANCSEventIDNotificationRemoved = 1 << 2, - MBLANCSEventIDAny = 0xFF -}; - -/** - A bitmask whose set bits inform the specificities of the iOS notification - */ -typedef NS_OPTIONS(uint8_t, MBLANCSEventFlag) { - MBLANCSEventFlagSilent = 1 << 0, - MBLANCSEventFlagImportant = 1 << 1, - MBLANCSEventFlagPreExisting = 1 << 2, - MBLANCSEventFlagPositiveAction = 1 << 3, - MBLANCSEventFlagNegativeAction = 1 << 4, - MBLANCSEventFlagAny = 0 -}; - -/** - Types of notification attribute data whos data can be filtered on - */ -typedef NS_ENUM(uint8_t, MBLANCSNotificationAttributeID) { - MBLANCSNotificationAttributeIDAppIdentifier = 0, - MBLANCSNotificationAttributeIDTitle = 1, - MBLANCSNotificationAttributeIDSubtitle = 2, - MBLANCSNotificationAttributeIDMessage = 3, - MBLANCSNotificationAttributeIDMessageSize = 4, - MBLANCSNotificationAttributeIDDate = 5, - MBLANCSNotificationAttributeIDPositiveActionLabel = 6, - MBLANCSNotificationAttributeIDNegativeActionLabel = 7, - MBLANCSNotificationAttributeIDNone = 0xFF -}; - -/** - Interface to Apple Notification Center Service (ANCS). - For more details on ANCS see https://developer.apple.com/library/ios/documentation/CoreBluetooth/Reference/AppleNotificationCenterServiceSpecification/AppleNotificationCenterServiceSpecification.pdf - */ -@interface MBLANCS : MBLEntityModule - -/** - Event representing an ANCS event of one or more CategoryID's. Event callbacks will - be provided an MBLANCSEventData object. - @param categoryIds Bitmask of categories you want to observe - */ -- (MBLEvent *)eventWithCategoryIds:(MBLANCSCategoryID)categoryIds; - -/** - Event representing an ANCS event of a specific CategoryID, EventID, and EventFlags. - Event callbacks will be provided an MBLANCSEventData object. - @param categoryIds Bitmask of categories you want to observe - @param eventIds Bitmask of event types you want to observe - @param eventFlags Bitmask of event flags you want to observe - */ -- (MBLEvent *)eventWithCategoryIds:(MBLANCSCategoryID)categoryIds - eventIds:(MBLANCSEventID)eventIds - eventFlags:(MBLANCSEventFlag)eventFlags; - -/** - Event representing an ANCS event of a specific CategoryID, EventID, EventFlags, and Notification Attribute. - Event callbacks will be provided an MBLANCSEventData object. - @param categoryIds Bitmask of categories you want to observe - @param eventIds Bitmask of event types you want to observe - @param eventFlags Bitmask of event flags you want to observe - @param attributeId Type of attribute that should be matched @see attributeData - @param attributeData Data of attribute that should be matched @see attributeId - */ -- (MBLEvent *)eventWithCategoryIds:(MBLANCSCategoryID)categoryIds - eventIds:(MBLANCSEventID)eventIds - eventFlags:(MBLANCSEventFlag)eventFlags - attributeId:(MBLANCSNotificationAttributeID)attributeId - attributeData:(NSString *)attributeData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/ANCS/MBLANCS.m b/MetaWear/Classes/Modules/ANCS/MBLANCS.m deleted file mode 100644 index 92c84d5..0000000 --- a/MetaWear/Classes/Modules/ANCS/MBLANCS.m +++ /dev/null @@ -1,155 +0,0 @@ -/** - * MBLANCS.m - * MetaWear - * - * Created by Stephen Schiffli on 11/17/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLANCS.h" -#import "MBLRegister+Private.h" -#import "MBLEvent+Private.h" -#import "MBLEntityEvent+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLANCSEventData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLDataSample.h" -#import "MBLMetaWearManager+Private.h" -#import "BFTask+MBLPrivate.h" - -static const uint8_t MW_ANCS_ATTRIBUTE_MATCH_SIZE = 14; - -typedef struct __attribute__((packed)) { - uint16_t category_id_mask; - uint8_t event_id_mask:3; - uint8_t event_flags_mask:5; - uint8_t attribute_id; - uint8_t attribute_data[MW_ANCS_ATTRIBUTE_MATCH_SIZE]; -} mw_ancs_param_t; - -@interface MBLANCS () -@property (nonatomic) MBLRegister *initialize; -@end - -@implementation MBLANCS - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - MBLRegister *initialize = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - MBLRegister *globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - MBLRegister *addFilter = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - MBLRegister *removeFilter = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[MBLFormat writeOnly]]; - MBLRegister *notification = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - MBLRegister *notificationEnable = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[MBLFormat writeOnly]]; - - int maxFilters = 4; // This was the old default - if (moduleInfo.moduleData.length) { - maxFilters = *(uint8_t *)moduleInfo.moduleData.bytes; - } - - addFilter.writeResponds = YES; - - self.initialize = initialize; - - self.globalEnable = globalEnable; - - self.addEntity = addFilter; - self.removeEntity = removeFilter; - - self.globalNotifications = notification; - self.notificationEnable = notificationEnable; - - self.maxEntities = maxFilters; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - return [self.initialize writeDataAsync:nil]; -} - -- (MBLEvent *)eventWithCategoryIds:(MBLANCSCategoryID)categoryIds -{ - return [self createEventWithCategoryIds:categoryIds - eventIds:MBLANCSEventIDAny - eventFlags:MBLANCSEventFlagAny - attributeId:MBLANCSNotificationAttributeIDNone - attributeData:nil]; -} - -- (MBLEvent *)eventWithCategoryIds:(MBLANCSCategoryID)categoryIds - eventIds:(MBLANCSEventID)eventIds - eventFlags:(MBLANCSEventFlag)eventFlags -{ - return [self createEventWithCategoryIds:categoryIds - eventIds:eventIds - eventFlags:eventFlags - attributeId:MBLANCSNotificationAttributeIDNone - attributeData:nil]; -} - -- (MBLEvent *)eventWithCategoryIds:(MBLANCSCategoryID)categoryIds - eventIds:(MBLANCSEventID)eventIds - eventFlags:(MBLANCSEventFlag)eventFlags - attributeId:(MBLANCSNotificationAttributeID)attributeId - attributeData:(NSString *)attributeData -{ - return [self createEventWithCategoryIds:categoryIds - eventIds:eventIds - eventFlags:eventFlags - attributeId:attributeId - attributeData:attributeData]; -} - -- (MBLEvent *)createEventWithCategoryIds:(MBLANCSCategoryID)categoryIds - eventIds:(MBLANCSEventID)eventIds - eventFlags:(MBLANCSEventFlag)eventFlags - attributeId:(MBLANCSNotificationAttributeID)attributeId - attributeData:(NSString *)attributeData -{ - mw_ancs_param_t params = {0}; - params.category_id_mask = categoryIds; - params.event_id_mask = eventIds; - params.event_flags_mask = eventFlags; - params.attribute_id = attributeId; - if (attributeData) { - NSData *src = [attributeData dataUsingEncoding:NSUTF8StringEncoding]; - memcpy(params.attribute_data, src.bytes, MIN(src.length, MW_ANCS_ATTRIBUTE_MATCH_SIZE)); - } - return [[MBLEntityEvent alloc] initWithModule:self - registerId:self.globalNotifications.registerId - addEntityParameters:[NSData dataWithBytes:¶ms length:sizeof(mw_ancs_param_t)] - format:[MBLANCSEventData formatter]]; -} - -@end diff --git a/MetaWear/Classes/Modules/ANCS/MBLANCSEventData.h b/MetaWear/Classes/Modules/ANCS/MBLANCSEventData.h deleted file mode 100644 index 36f58fb..0000000 --- a/MetaWear/Classes/Modules/ANCS/MBLANCSEventData.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * MBLANCSEventData.h - * MetaWear - * - * Created by Stephen Schiffli on 11/20/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Data encapsulation for an ANCS event. - */ -@interface MBLANCSEventData : MBLDataSample - -/** - This field informs whether the given iOS notification was added, modified, or removed - */ -@property (nonatomic, readonly) MBLANCSEventID eventId; -/** - A bitmask whose set bits inform the specificities with the iOS notification - */ -@property (nonatomic, readonly) MBLANCSEventFlag eventFlags; -/** - A value providing a category in which the iOS notification can be classified - */ -@property (nonatomic, readonly) MBLANCSCategoryID categoryId; -/** - The current number of active iOS notifications in the given category - */ -@property (nonatomic, readonly) uint8_t categoryCount; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/ANCS/MBLANCSEventData.m b/MetaWear/Classes/Modules/ANCS/MBLANCSEventData.m deleted file mode 100644 index 50488ab..0000000 --- a/MetaWear/Classes/Modules/ANCS/MBLANCSEventData.m +++ /dev/null @@ -1,196 +0,0 @@ -/** - * MBLANCSEventData.m - * MetaWear - * - * Created by Stephen Schiffli on 10/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLANCSEventData+Private.h" -#import "MBLDataSample+Private.h" - -typedef struct __attribute__((packed)) { - uint8_t event_id:3; - uint8_t event_flags:5; - uint8_t category_id; - uint8_t category_count; -} mw_ancs_notification_t; - - -@interface MBLANCSEventFormatter : MBLFormat -@end - -@implementation MBLANCSEventFormatter -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - return [[MBLANCSEventData alloc] initWithData:data timestamp:date]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - [NSException raise:@"Cannout use ANCS events with filters" format:@""]; - return nil; -} -@end - - -@interface MBLANCSEventData () -@property (nonatomic) MBLANCSEventID eventId; -@property (nonatomic) MBLANCSEventFlag eventFlags; -@property (nonatomic) MBLANCSCategoryID categoryId; -@property (nonatomic) uint8_t categoryCount; -@end - -@implementation MBLANCSEventData - -+ (MBLFormat *)formatter -{ - return [[MBLANCSEventFormatter alloc] initEncodedDataWithLength:4]; -} - -- (instancetype)initWithData:(NSData *)data timestamp:(NSDate *)timestamp -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - mw_ancs_notification_t status = *(mw_ancs_notification_t *)data.bytes; - self.eventId = (1 << status.event_id); - self.eventFlags = status.event_flags; - self.categoryId = (1 << status.category_id); - self.categoryCount = status.category_count; - } - return self; -} - - -- (NSString *)eventIdString -{ - NSString *eventId; - switch (self.eventId) { - case MBLANCSEventIDNotificationAdded: - eventId = @"EventID: Notification Added"; - break; - case MBLANCSEventIDNotificationModified: - eventId = @"EventID: Notification Modified"; - break; - case MBLANCSEventIDNotificationRemoved: - eventId = @"EventID: Notification Removed"; - break; - case MBLANCSEventIDAny: - eventId = @""; - break; - } - return eventId; -} - -- (NSString *)eventFlagsString -{ - NSString *eventFlags = @"EventFlags:"; - if (self.eventFlags & MBLANCSEventFlagSilent) { - eventFlags = [eventFlags stringByAppendingString:@" Silent"]; - } - if (self.eventFlags & MBLANCSEventFlagImportant) { - eventFlags = [eventFlags stringByAppendingString:@" Important"]; - } - if (self.eventFlags & MBLANCSEventFlagPreExisting) { - eventFlags = [eventFlags stringByAppendingString:@" PreExisting"]; - } - if (self.eventFlags & MBLANCSEventFlagPositiveAction) { - eventFlags = [eventFlags stringByAppendingString:@" PositiveAction"]; - } - if (self.eventFlags & MBLANCSEventFlagNegativeAction) { - eventFlags = [eventFlags stringByAppendingString:@" NegativeAction"]; - } - return eventFlags; -} - -- (NSString *)categoryString -{ - NSString *categoryId; - switch (self.categoryId) { - case MBLANCSCategoryIDOther: - categoryId = @"CategoryID: Other"; - break; - case MBLANCSCategoryIDIncomingCall: - categoryId = @"CategoryID: Incoming Call"; - break; - case MBLANCSCategoryIDMissedCall: - categoryId = @"CategoryID: Missed Call"; - break; - case MBLANCSCategoryIDVoicemail: - categoryId = @"CategoryID: Voicemail"; - break; - case MBLANCSCategoryIDSocial: - categoryId = @"CategoryID: Social"; - break; - case MBLANCSCategoryIDSchedule: - categoryId = @"CategoryID: Schedule"; - break; - case MBLANCSCategoryIDEmail: - categoryId = @"CategoryID: Email"; - break; - case MBLANCSCategoryIDNews: - categoryId = @"CategoryID: News"; - break; - case MBLANCSCategoryIDHealthAndFitness: - categoryId = @"CategoryID: Health And Fitness"; - break; - case MBLANCSCategoryIDBusinessAndFinance: - categoryId = @"CategoryID: Business And Finance"; - break; - case MBLANCSCategoryIDLocation: - categoryId = @"CategoryID: Location"; - break; - case MBLANCSCategoryIDEntertainment: - categoryId = @"CategoryID: Entertainment"; - break; - case MBLANCSCategoryIDAny: - categoryId = @""; - break; - } - return categoryId; -} - -- (NSString *)description -{ - NSString *eventId = [self eventIdString]; - NSString *eventFlags = [self eventFlagsString]; - NSString *categoryId = [self categoryString]; - return [NSString stringWithFormat:@"%@\n%@\n%@\n%@\nCategoryCount: %d", [super description], eventId, eventFlags, categoryId, self.categoryCount]; -} - -- (NSString *)csvRepresentation -{ - NSString *eventId = [self eventIdString]; - NSString *eventFlags = [self eventFlagsString]; - NSString *categoryId = [self categoryString]; - return [NSString stringWithFormat:@"%f,\"%@ %@ %@ CategoryCount: %d\"\n", self.timestamp.timeIntervalSince1970, eventId, eventFlags, categoryId, self.categoryCount]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255.h b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255.h deleted file mode 100644 index 12dbeb8..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * MBLAccelerometerBMA255.h - * MetaWear - * - * Created by Stephen Schiffli on 2/29/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -@class MBLAccelerometerBMA255MotionEvent; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to a BMA25 accelerometer - */ -@interface MBLAccelerometerBMA255 : MBLAccelerometerBosch - -/** - Event representing a motion (change of acceleration) event. - Event callbacks will be provided an empty MBLDataSample object - */ -@property (nonatomic, readonly) MBLAccelerometerBMA255MotionEvent *motionEvent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255.m deleted file mode 100644 index 93e150d..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255.m +++ /dev/null @@ -1,101 +0,0 @@ -/** - * MBLAccelerometerBMA255.m - * MetaWear - * - * Created by Stephen Schiffli on 2/29/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMA255+Private.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLModule+Private.h" -#import "MBLAccelerometerBMA255MotionEvent+Private.h" -#import "MBLAccelerometerBoschLowOrHighGEvent+Private.h" -#import "MBLRegister+Private.h" -#import "BFTask+MBLPrivate.h" - -@interface MBLAccelerometerBMA255 () -@property (nonatomic) MBLAccelerometerBMA255MotionEvent *motionEvent; -@end - -@implementation MBLAccelerometerBMA255 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.motionEvent = [[MBLAccelerometerBMA255MotionEvent alloc] initWithAccelerometer:self]; - - self.lowOrHighGEvent.lowOrHighGDurationMultiplier = 2.0; - } - return self; -} - -- (BFTask *)pullConfigAsync -{ - return [[self.accelDataConfig readAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - MBLDataSample *result = t.result; - const uint8_t *data = result.data.bytes; - self.fullScaleRange = data[1]; - return nil; - }]; -} - -- (BFTask *)performAsyncInitialization -{ - // Write the disable bits for motion interrupts - uint8_t data[] = { self.scaleSampleFrequency, self.fullScaleRange }; - int dataSize = sizeof(data) / sizeof(data[0]); - - return [self.accelDataConfig writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; -} - -- (uint8_t)scaleSampleFrequency -{ - if (self.sampleFrequency > 1000.0) { - return 0xF; - } else if (self.sampleFrequency > 500.0) { - return 0xE; - } else if (self.sampleFrequency > 250.0) { - return 0xD; - } else if (self.sampleFrequency > 125.0) { - return 0xC; - } else if (self.sampleFrequency > 62.5) { - return 0xB; - } else if (self.sampleFrequency > 31.26) { - return 0xA; - } else if (self.sampleFrequency > 15.62) { - return 0x9; - } else { - return 0x8; - } -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent.h b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent.h deleted file mode 100644 index 17b986b..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent.h +++ /dev/null @@ -1,86 +0,0 @@ -/** - * MBLAccelerometerBMA255MotionEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 3/1/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -@class MBLDataSample; - -NS_ASSUME_NONNULL_BEGIN - -/** - The BMI160 combines Slow/No-Motion and Any-Motion detection, so below - we expose the raw registers as a first enabling step. Over time this will become - better encapsulated. - */ -@interface MBLAccelerometerBMA255MotionEvent : MBLEvent - -#pragma mark - Beta API (Subject to change) - -#pragma mark - Slow-Motion/No-Motion -/** - Set to YES if you want slow/no-motion events - */ -@property (nonatomic) BOOL slowNoMotionEnabled; -/** - Set to YES if you want slow-motion, set to NO if you want no-motion - */ -@property (nonatomic) BOOL useSlowMotion; -/** - No-Motion: Time in ms for which no slope data point must exceeed slow/no-mothion threshold - Slow-Motion: Time in ms for which slope data points must be above the slow/no-motion threshold - */ -@property (nonatomic) double slowNoMotionDuration; -/** - Threshold in G's for detecting slow/no-motion events - */ -@property (nonatomic) double slowNoMotionThreshold; - - -#pragma mark - Any-Motion -/** - Set to YES if you want any-motion events - */ -@property (nonatomic) BOOL anyMotionEnabled; -/** - Time in ms for which slope data points must be above the anyMotionThreshold threshold - */ -@property (nonatomic) double anyMotionDuration; -/** - Threshold in G's for detecting any-motion events - */ -@property (nonatomic) double anyMotionThreshold; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent.m deleted file mode 100644 index c08d836..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent.m +++ /dev/null @@ -1,180 +0,0 @@ -/** - * MBLAccelerometerBMA255MotionEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 3/1/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMA255MotionEvent+Private.h" -#import "MBLEvent+Private.h" -#import "MBLAccelerometerBMA255+Private.h" -#import "MBLFormat.h" -#import "MBLMetaWear+Private.h" -#import "MBLConstants+Private.h" - -@interface MBLAccelerometerBMA255MotionEvent () -@property (nonatomic) MBLRegister *motionInterruptEn; -@property (nonatomic) MBLRegister *motionConfig; -@end - -@implementation MBLAccelerometerBMA255MotionEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBMA255 *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x0B format:[[MBLFormat alloc] initEncodedDataWithLength:1] identifier:@"bosch-motion"]; - if (self) { - // Default Settings - self.slowNoMotionEnabled = NO; - self.useSlowMotion = NO; - self.slowNoMotionDuration = 0.0; - self.slowNoMotionThreshold = 0.2; - - self.anyMotionEnabled = NO; - self.anyMotionDuration = 0; - self.anyMotionThreshold = 0.2; - - // Registers - self.motionInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x09 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.motionConfig = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0A format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - MBLAccelerometerBMA255 *accelerometer = (MBLAccelerometerBMA255 *)self.module; - bmi160_reg_int_motion_t regs = { 0 }; - - const double msPerSample = 1000.0 / accelerometer.sampleFrequency; - - // slope interrupt trigger if int_anym_dur + 1 consecutive slope data points are above - // the slope interrupt threshold (int_anymo_th) (Clamp to 3 only 2-bit field) - int int_anym_dur = round((msPerSample / self.anyMotionDuration)) - 1; - regs.int_motion_0.int_anym_dur = [MBLConstants clampInt:int_anym_dur low:0 high:0x3]; - - int int_slo_nomo_dur = 0; - if (self.useSlowMotion) { - // if slow-motion (int_no_mot_sel = 0) then int_slo_nomo_dur + 1 consecutive slope data - // points must be above the slow/no-motion threshold (int_slo_no_mot_th) for the - // slow-/no-motion interrupt to trigger. - int_slo_nomo_dur = round((msPerSample / self.slowNoMotionDuration)) - 1; - int_slo_nomo_dur = [MBLConstants clampInt:int_slo_nomo_dur low:0 high:0x3]; - } else { - // If no-motion (int_no_mot_sel = 1) then int_slo_nomo_dur defines time for which no slope - // data point must exceed the slow/no-motion threshold (int_slow_no_mot_th) for slow/no-motion - // interrupt to trigger: - // switch (int_slo_no_mot_dur<5:4>) - // case 0: - // return (int_slo_no_mot_dur<3:0> + 1) - // case 1: - // return (int_slo_no_mot_dur<3:0> * 4) + 20 - // case 2: - // return (int_slo_no_mot_dur<4:0> * 8) + 88 - double slo_nomo_second = self.slowNoMotionDuration / 1000.0; - if (slo_nomo_second >= 88.0 ) { - int_slo_nomo_dur = round((slo_nomo_second - 88.0) / 8.0); - int_slo_nomo_dur = [MBLConstants clampInt:int_slo_nomo_dur low:0 high:0x1F]; - int_slo_nomo_dur |= 0x20; - } else if (slo_nomo_second >= 20.0) { - int_slo_nomo_dur = round((slo_nomo_second - 20) / 4.0); - int_slo_nomo_dur = [MBLConstants clampInt:int_slo_nomo_dur low:0 high:0xF]; - int_slo_nomo_dur |= 0x10; - } else { - int_slo_nomo_dur = round(slo_nomo_second - 1); - int_slo_nomo_dur = [MBLConstants clampInt:int_slo_nomo_dur low:0 high:0xF]; - int_slo_nomo_dur |= 0x00; - } - } - regs.int_motion_0.int_slo_nomo_dur = int_slo_nomo_dur; - - // Threshold of the any-motion interrupt (int_anymo_th * 1.955 * maxG) - // switch (fullScaleRange): - // case 2g: - // return int_anymo_th * 3.91 mg - // case 4g: - // return int_anymo_th * 7.81 mg - // case 8g: - // return int_anymo_th * 15.63 mg - // case 16g: - // return int_anymo_th * 31.25 mg - // if int_anymo_th == 0, then value is half the scale factor - double scale; - switch (accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange2G: - scale = 3.91; - break; - case MBLAccelerometerBoschRange4G: - scale = 7.81; - break; - case MBLAccelerometerBoschRange8G: - scale = 15.63; - break; - case MBLAccelerometerBoschRange16G: - scale = 31.25; - break; - } - regs.int_motion_1.int_anymo_th = round((self.anyMotionThreshold * 1000.0) / scale); - - - // Threshold for slow/no-motion interrupt, functions same as int_anymo_th - regs.int_motion_2.int_slo_nomo_th = round((self.slowNoMotionThreshold * 1000.0) / scale); - - // - 1 on the size because the BMA255 doesn't have significant motion registers - [tasks addObject:[self.motionConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_reg_int_motion_t) - 1]]]; - - // Write the enable bits for motion interrupts - uint8_t enableBitmask = 0; - if (self.anyMotionEnabled) { - enableBitmask |= (0x7 << 0); - } - if (self.slowNoMotionEnabled) { - enableBitmask |= (0x7 << 3); - } - if (!self.useSlowMotion) { - enableBitmask |= (0x1 << 6); - } - uint8_t data[] = { enableBitmask, 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - [tasks addObject:[self.motionInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]]; - - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bits for motion interrupts - uint8_t data[] = { 0, 0x3F }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.motionInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160.h b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160.h deleted file mode 100644 index 20c98f9..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160.h +++ /dev/null @@ -1,87 +0,0 @@ -/** - * MBLAccelerometerBMI160.h - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -@class MBLNumericData; -@class MBLAccelerometerBMI160MotionEvent; - -NS_ASSUME_NONNULL_BEGIN - -/** - The BMI160 (Accelerometer and Gyro) have a digital filter for the output - */ -typedef NS_ENUM(uint8_t, MBLBMI160FilterMode) { - MBLBMI160FilterModeNormal = 2, /// Full bandwidth - MBLBMI160FilterModeOSR2 = 1, /// 1/2 normal bandwidth (low pass) - MBLBMI160FilterModeOSR4 = 0 /// 1/4 normal bandwidth (low pass) -}; - -/** - Interface to a BMI160 accelerometer - */ -@interface MBLAccelerometerBMI160 : MBLAccelerometerBosch - -/** - Accelerometer output filtering mode - */ -@property (nonatomic) MBLBMI160FilterMode filterMode; - -/** - Event representing a motion (change of acceleration) event. - Event callbacks will be provided an empty MBLDataSample object - */ -@property (nonatomic, readonly) MBLAccelerometerBMI160MotionEvent *motionEvent; - - -/** - This event will fire when a step pattern is detected. Event callbacks will be provided - an MBLNumericData object, whose int value is always 1. - */ -@property (nonatomic, readonly) MBLEvent *stepEvent; -/** - This data endpoint keeps a running counter in hardware of the number of steps taken. - Event callbacks will be provided an MBLNumericData object, whose unsigened value is - the number steps taken. Note this only counts up when stepEvent is active. - */ -@property (nonatomic, readonly) MBLData *stepCounter; -/** - Use this to reset stepCounter to 0 - */ -- (BFTask *)resetStepCount; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160.m deleted file mode 100644 index f26bbf6..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160.m +++ /dev/null @@ -1,131 +0,0 @@ -/** - * MBLAccelerometerBMI160.m - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLAccelerometer+Private.h" -#import "MBLAccelerometerBoschDataReadyEvent.h" -#import "MBLAccelerometerBoschAxisReadyEvent.h" -#import "MBLAccelerometerBoschLowOrHighGEvent+Private.h" -#import "MBLAccelerometerBoschOrientationEvent.h" -#import "MBLAccelerometerBoschTapEvent.h" -#import "MBLAccelerometerBoschFlatEvent.h" -#import "MBLAccelerometerBMI160StepEvent.h" -#import "MBLAccelerometerBMI160MotionEvent+Private.h" -#import "MBLFormat.h" -#import "MBLNumericFormatter.h" -#import "MBLData+Private.h" -#import "bmi160.h" - -@interface MBLAccelerometerBMI160 () -@property (nonatomic) MBLRegister *stepCounterReset; - -@property (nonatomic) MBLEvent *stepEvent; -@property (nonatomic) MBLData *stepCounter; -@property (nonatomic) MBLAccelerometerBMI160MotionEvent *motionEvent; -@end - -@implementation MBLAccelerometerBMI160 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.stepEvent = [[MBLAccelerometerBMI160StepEvent alloc] initWithAccelerometer:self]; - self.stepCounter = [[MBLData alloc] initWithModule:self registerId:0x1A format:[[MBLNumericFormatter alloc] initIntWithLength:2 isSigned:NO] identifier:@"step-counter"]; - self.motionEvent = [[MBLAccelerometerBMI160MotionEvent alloc] initWithAccelerometer:self]; - - self.stepCounterReset = [[MBLRegister alloc] initWithModule:self registerId:0x1B format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - - self.lowOrHighGEvent.lowOrHighGDurationMultiplier = 2.5; - - // Default settings - self.filterMode = MBLBMI160FilterModeNormal; - } - return self; -} - -- (BFTask *)pullConfigAsync -{ - return [[self.accelDataConfig readAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - MBLDataSample *result = t.result; - const bmi160_regs_acc_t *regs = result.data.bytes; - self.fullScaleRange = regs->acc_range.acc_range; - return nil; - }]; -} - -- (BFTask *)performAsyncInitialization -{ - // Setup the accelerometer config - bmi160_regs_acc_t regs = { 0 }; - regs.acc_conf.acc_odr = self.scaleSampleFrequency; - regs.acc_conf.acc_bwp = self.filterMode; - regs.acc_conf.acc_us = 0; // Hardcode to not use undersampling mode - - regs.acc_range.acc_range = self.fullScaleRange; - - return [self.accelDataConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_regs_gyr_t)]]; -} - -- (uint8_t)scaleSampleFrequency -{ - if (self.sampleFrequency > 800) { - return BMI160_ACCEL_OUTPUT_DATA_RATE_1600HZ; - } else if (self.sampleFrequency > 400) { - return BMI160_ACCEL_OUTPUT_DATA_RATE_800HZ; - } else if (self.sampleFrequency > 200) { - return BMI160_ACCEL_OUTPUT_DATA_RATE_400HZ; - } else if (self.sampleFrequency > 100) { - return BMI160_ACCEL_OUTPUT_DATA_RATE_200HZ; - } else if (self.sampleFrequency > 50) { - return BMI160_ACCEL_OUTPUT_DATA_RATE_100HZ; - } else if (self.sampleFrequency > 25) { - return BMI160_ACCEL_OUTPUT_DATA_RATE_50HZ; - } else if (self.sampleFrequency > 12.5) { - return BMI160_ACCEL_OUTPUT_DATA_RATE_25HZ; - } else { - return BMI160_ACCEL_OUTPUT_DATA_RATE_12_5HZ; - } - // TODO: There are values lower than 12.5, but only - // when undersampling is enabled -} - -- (nonnull BFTask *)resetStepCount -{ - return [self.stepCounterReset writeByteAsync:0]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent.h b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent.h deleted file mode 100644 index a8d8ae3..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent.h +++ /dev/null @@ -1,98 +0,0 @@ -/** - * MBLAccelerometerBMI160MotionEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 7/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -@class MBLDataSample; - -NS_ASSUME_NONNULL_BEGIN - -/** - The BMI160 combines Slow/No-Motion and Any/Signification-Motion detection, so below - we expose the raw registers as a first enabling step. Over time this will become - better encapsulated. - */ -@interface MBLAccelerometerBMI160MotionEvent : MBLEvent - -#pragma mark - Beta API (Subject to change) - -#pragma mark - Slow-Motion/No-Motion -/** - Set to YES if you want slow/no-motion events - */ -@property (nonatomic) BOOL slowNoMotionEnabled; -/** - Set to YES if you want slow-motion, set to NO if you want no-motion - */ -@property (nonatomic) BOOL useSlowMotion; -/** - No-Motion: Time in ms for which no slope data point must exceeed slow/no-mothion threshold - Slow-Motion: Time in ms for which slope data points must be above the slow/no-motion threshold - */ -@property (nonatomic) double slowNoMotionDuration; -/** - Threshold in G's for detecting slow/no-motion events - */ -@property (nonatomic) double slowNoMotionThreshold; - - -#pragma mark - Significant-Motion/Any-Motion -/** - Set to YES if you want significant/any-motion events - */ -@property (nonatomic) BOOL significantAnyMotionEnabled; -/** - Set to YES if you want significant-motion, set to NO if you want any-motion - */ -@property (nonatomic) BOOL useSignificantMotion; -/** - Time in ms for which slope data points must be above the anyMotionThreshold threshold - */ -@property (nonatomic) double anyMotionDuration; -/** - Threshold in G's for detecting any-motion events - */ -@property (nonatomic) double anyMotionThreshold; -/** - Significant-Motion is a combination of any-motion events. It's a state machine that works as - follows, 1) Any-Motion Detected. 2) Sleep for significantMotionSkipTime. 3) Look for Any-Motion - again within significantMotionProofTime, and if found trigger a significant-motion event. - Units are in seconds -*/ -@property (nonatomic) double significantMotionSkipTime; -@property (nonatomic) double significantMotionProofTime; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent.m deleted file mode 100644 index fbd444e..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent.m +++ /dev/null @@ -1,207 +0,0 @@ -/** - * MBLAccelerometerBMI160MotionEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 7/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMI160MotionEvent+Private.h" -#import "MBLEvent+Private.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLFormat.h" -#import "MBLMetaWear+Private.h" -#import "MBLConstants+Private.h" - -@interface MBLAccelerometerBMI160MotionEvent () -@property (nonatomic) MBLRegister *motionInterruptEn; -@property (nonatomic) MBLRegister *motionConfig; -@end - -@implementation MBLAccelerometerBMI160MotionEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBMI160 *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x0B format:[[MBLFormat alloc] initEncodedDataWithLength:1] identifier:@"bosch-motion"]; - if (self) { - // Default Settings - self.slowNoMotionEnabled = NO; - self.useSlowMotion = NO; - self.slowNoMotionDuration = 0.0; - self.slowNoMotionThreshold = 0.2; - - self.significantAnyMotionEnabled = NO; - self.useSignificantMotion = NO; - self.anyMotionDuration = 0; - self.anyMotionThreshold = 0.2; - self.significantMotionSkipTime = 3.0; - self.significantMotionProofTime = 0.5; - - // Registers - self.motionInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x09 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.motionConfig = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0A format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - MBLAccelerometerBMI160 *accelerometer = (MBLAccelerometerBMI160 *)self.module; - bmi160_reg_int_motion_t regs = { 0 }; - - const double msPerSample = 1000.0 / accelerometer.sampleFrequency; - - // slope interrupt trigger if int_anym_dur + 1 consecutive slope data points are above - // the slope interrupt threshold (int_anymo_th) (Clamp to 3 only 2-bit field) - int int_anym_dur = round(self.anyMotionDuration / msPerSample) - 1; - regs.int_motion_0.int_anym_dur = [MBLConstants clampInt:int_anym_dur low:0 high:0x3]; - - int int_slo_nomo_dur = 0; - if (self.useSlowMotion) { - // if slow-motion (int_no_mot_sel = 0) then int_slo_nomo_dur + 1 consecutive slope data - // points must be above the slow/no-motion threshold (int_slo_no_mot_th) for the - // slow-/no-motion interrupt to trigger. - int_slo_nomo_dur = round((msPerSample / self.slowNoMotionDuration)) - 1; - int_slo_nomo_dur = [MBLConstants clampInt:int_slo_nomo_dur low:0 high:0x3]; - } else { - // If no-motion (int_no_mot_sel = 1) then int_slo_nomo_dur defines time for which no slope - // data point must exceed the slow/no-motion threshold (int_slow_no_mot_th) for slow/no-motion - // interrupt to trigger: - // switch (int_slo_no_mot_dur<5:4>) - // case 0: - // return (int_slo_no_mot_dur<3:0> + 1) * 1.28s - // case 1: - // return (int_slo_no_mot_dur<3:0> + 5) * 5.12s - // case 2: - // return (int_slo_no_mot_dur<4:0> + 11) * 10.24s - double slo_nomo_second = self.slowNoMotionDuration / 1000.0; - if (slo_nomo_second > 102.4 ) { - int_slo_nomo_dur = (round(slo_nomo_second / 10.24) - 11); - int_slo_nomo_dur = [MBLConstants clampInt:int_slo_nomo_dur low:0 high:0x1F]; - int_slo_nomo_dur |= 0x20; - } else if (slo_nomo_second > 20.48) { - int_slo_nomo_dur = (round(slo_nomo_second / 5.12) - 5); - int_slo_nomo_dur = [MBLConstants clampInt:int_slo_nomo_dur low:0 high:0xF]; - int_slo_nomo_dur |= 0x10; - } else { - int_slo_nomo_dur = (round(slo_nomo_second / 1.28) - 1); - int_slo_nomo_dur = [MBLConstants clampInt:int_slo_nomo_dur low:0 high:0xF]; - int_slo_nomo_dur |= 0x00; - } - } - regs.int_motion_0.int_slo_nomo_dur = int_slo_nomo_dur; - - // Threshold of the any-motion interrupt (int_anymo_th * 1.955 * maxG) - // switch (fullScaleRange): - // case 2g: - // return int_anymo_th * 3.91 mg - // case 4g: - // return int_anymo_th * 7.81 mg - // case 8g: - // return int_anymo_th * 15.63 mg - // case 16g: - // return int_anymo_th * 31.25 mg - // if int_anymo_th == 0, then value is half the scale factor - double scale; - switch (accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange2G: - scale = 3.91; - break; - case MBLAccelerometerBoschRange4G: - scale = 7.81; - break; - case MBLAccelerometerBoschRange8G: - scale = 15.63; - break; - case MBLAccelerometerBoschRange16G: - scale = 31.25; - break; - } - regs.int_motion_1.int_anymo_th = round((self.anyMotionThreshold * 1000.0) / scale); - - - // Threshold for slow/no-motion interrupt, functions same as int_anymo_th - regs.int_motion_2.int_slo_nomo_th = round((self.slowNoMotionThreshold * 1000.0) / scale); - - // Proof time of the signification motion interrupt: 0=0.25s, 1=0.5s, 2=1s, 3=2s - int int_sig_mot_proof = 0; - if (self.significantMotionProofTime > 1.0) { - int_sig_mot_proof = 3; - } else if (self.significantMotionProofTime > 0.5) { - int_sig_mot_proof = 2; - } else if (self.significantMotionProofTime > 0.25) { - int_sig_mot_proof = 1; - } - regs.int_motion_3.int_sig_mot_proof = int_sig_mot_proof; - - // '1' ('0') Selects the signification (anymotion) interrupt function - regs.int_motion_3.int_sig_mot_sel = self.useSignificantMotion ? 1 : 0; - - // Skip time of the signification motion interrupt: 0=1.5s, 1=3s, 2=6s, 3=12s - int int_sig_mot_skip = 0; - if (self.significantMotionSkipTime > 6.0) { - int_sig_mot_skip = 3; - } else if (self.significantMotionProofTime > 3.0) { - int_sig_mot_skip = 2; - } else if (self.significantMotionProofTime > 1.5) { - int_sig_mot_skip = 1; - } - regs.int_motion_3.int_sig_mot_skip = int_sig_mot_skip; - - // '1' ('0') Selects no-motion (slow-motion) interrupt function - regs.int_motion_3.int_slo_nomo_sel = self.useSlowMotion ? 0 : 1; - - [tasks addObject:[self.motionConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_reg_int_motion_t)]]]; - - // Write the enable bits for motion interrupts - uint8_t enableBitmask = 0; - if (self.significantAnyMotionEnabled) { - enableBitmask |= (0x7 << 0); - } - if (self.slowNoMotionEnabled) { - enableBitmask |= (0x7 << 3); - } - uint8_t data[] = { enableBitmask, 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - [tasks addObject:[self.motionInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]]; - - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bits for motion interrupts - uint8_t data[] = { 0, 0x3F }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.motionInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.h b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.h deleted file mode 100644 index 2ba0874..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.h +++ /dev/null @@ -1,98 +0,0 @@ -/** - * MBLAccelerometerBosch.h - * MetaWear - * - * Created by Stephen Schiffli on 2/29/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -@class MBLNumericData; -@class MBLAccelerometerBoschLowOrHighGEvent; -@class MBLAccelerometerBoschFlatEvent; -@class MBLAccelerometerBoschTapEvent; - -NS_ASSUME_NONNULL_BEGIN - -/** - Accelerometer sensitiviy ranges - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerBoschRange) { - MBLAccelerometerBoschRange2G = BMI160_ACCEL_RANGE_2G, - MBLAccelerometerBoschRange4G = BMI160_ACCEL_RANGE_4G, - MBLAccelerometerBoschRange8G = BMI160_ACCEL_RANGE_8G, - MBLAccelerometerBoschRange16G = BMI160_ACCEL_RANGE_16G, -}; - -/** - Interface to a Bosch accelerometer - */ -@interface MBLAccelerometerBosch : MBLAccelerometer -/** - Maximum acceleration the accelerometer can report - */ -@property (nonatomic) MBLAccelerometerBoschRange fullScaleRange; - -/** - Event representing a low-g (free fall) or high-g (impact) event. - Event callbacks will be provided an empty MBLDataSample object - */ -@property (nonatomic, readonly) MBLAccelerometerBoschLowOrHighGEvent *lowOrHighGEvent; - -/** - Event representing a tap (single, double, or both based on tapType) on the tapDetectionAxis. - Event callbacks will be provided an empty MBLDataSample object - */ -@property (nonatomic, readonly) MBLAccelerometerBoschTapEvent *tapEvent; - -/** - Event representing an orientation change. - Event callbacks will be provided an MBLOrientationData object - */ -@property (nonatomic, readonly) MBLEvent *orientationEvent; - - -/** - Event representing the device being laid down flat (or removed from a flat posistion). - Event callbacks will be provided an MBLNumericData object, where a bool value of - YES means flat, and NO means not-flat. - */ -@property (nonatomic, readonly) MBLAccelerometerBoschFlatEvent *flatEvent; - -///---------------------------------- -/// @name Deprecated -///---------------------------------- -// @deprecated -@property (nonatomic) MBLAccelerometerTapType tapType DEPRECATED_MSG_ATTRIBUTE("Use tapEvent.type instead"); - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.m deleted file mode 100644 index 6ce9219..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch.m +++ /dev/null @@ -1,95 +0,0 @@ -/** - * MBLAccelerometerBosch.m - * MetaWear - * - * Created by Stephen Schiffli on 2/29/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBosch+Private.h" -#import "MBLAccelerometer+Private.h" -#import "MBLAccelerometerBoschDataReadyEvent.h" -#import "MBLAccelerometerBoschPackedDataReadyEvent.h" -#import "MBLAccelerometerBoschAxisReadyEvent.h" -#import "MBLAccelerometerBoschLowOrHighGEvent+Private.h" -#import "MBLAccelerometerBoschOrientationEvent.h" -#import "MBLAccelerometerBoschTapEvent+Private.h" -#import "MBLAccelerometerBoschFlatEvent+Private.h" -#import "MBLAccelerometerBMI160StepEvent.h" -#import "MBLFormat.h" -#import "MBLNumericFormatter.h" -#import "MBLData+Private.h" -#import "bmi160.h" -#import "MBLAccelerometerBoschRMSFormat.h" - -@interface MBLAccelerometerBosch () -@property (nonatomic) MBLRegister *accelDataConfig; - -@property (nonatomic) MBLAccelerometerBoschLowOrHighGEvent *lowOrHighGEvent; -@property (nonatomic) MBLAccelerometerBoschTapEvent *tapEvent; -@property (nonatomic) MBLEvent *orientationEvent; -@property (nonatomic) MBLAccelerometerBoschFlatEvent *flatEvent; -@property (nonatomic) MBLEvent *stepEvent; -@end - -@implementation MBLAccelerometerBosch - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - // MBLAccelerometer properties - self.dataReadyEvent = [[MBLAccelerometerBoschDataReadyEvent alloc] initWithAccelerometer:self]; - if (moduleInfo.moduleRevision >= 1) { - self.packedDataReadyEvent = [[MBLAccelerometerBoschPackedDataReadyEvent alloc] initWithAccelerometer:self]; - } - self.xAxisReadyEvent = [[MBLAccelerometerBoschAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisX]; - self.yAxisReadyEvent = [[MBLAccelerometerBoschAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisY]; - self.zAxisReadyEvent = [[MBLAccelerometerBoschAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisZ]; - self.rmsDataReadyEvent = [self.dataReadyEvent rmsOfEventWithInputLength:2 inputCount:3 format:[[MBLAccelerometerBoschRMSFormat alloc] initWithAccelerometer:self]]; - - // Default settings - self.fullScaleRange = MBLAccelerometerBoschRange16G; - // Registers - MBLRegister *accelPowerMode = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.accelDataConfig = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - - // Events - self.lowOrHighGEvent = [[MBLAccelerometerBoschLowOrHighGEvent alloc] initWithAccelerometer:self]; - self.tapEvent = [[MBLAccelerometerBoschTapEvent alloc] initWithAccelerometer:self]; - self.orientationEvent = [[MBLAccelerometerBoschOrientationEvent alloc] initWithAccelerometer:self]; - self.flatEvent = [[MBLAccelerometerBoschFlatEvent alloc] initWithAccelerometer:self]; - - self.globalEnable = accelPowerMode; - } - return self; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData.m deleted file mode 100644 index e73ab2b..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData.m +++ /dev/null @@ -1,86 +0,0 @@ -/** - * MBLAccelerometerBoschFlatData.m - * MetaWear - * - * Created by Stephen Schiffli on 1/18/17. - * Copyright 2017 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschFlatData+Private.h" -#import "MBLDataSample+Private.h" -#import "MBLLogger.h" - -@interface MBLAccelerometerBoschFlatData () -@property (nonatomic) BOOL isFlat; -@property (nonatomic) BOOL faceDown; -@property (nonatomic) BOOL faceDownValid; -@end - -@implementation MBLAccelerometerBoschFlatData - -- (instancetype)initWithIsFlat:(BOOL)isFlat timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.isFlat = isFlat; - self.faceDownValid = NO; - } - return self; -} - -- (instancetype)initWithIsFlat:(BOOL)isFlat faceDown:(BOOL)faceDown timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.isFlat = isFlat; - self.faceDown = faceDown; - self.faceDownValid = YES; - } - return self; -} - -- (BOOL)faceDown { - if (!self.faceDownValid) { - MBLLog(MBLLogLevelWarning, @"faceDown is only suppored on firmware versions >= 1.3.3"); - } - return _faceDown; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %@-%@", [super description], self.isFlat ? @"Flat" : @"Not-Flat", self.faceDown ? @"FaceDown" : @"FaceUp"]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%d,%d\n", self.timestamp.timeIntervalSince1970, self.isFlat, self.faceDown]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent.h b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent.h deleted file mode 100644 index 815cc94..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent.h +++ /dev/null @@ -1,69 +0,0 @@ -/** - * MBLAccelerometerBoschFlatEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 7/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -@class MBLAccelerometerBoschFlatData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Delay time for which flat value must remain stable for the flat interrupt to be generated - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerBoschFlatTime) { - MBLAccelerometerBoschFlatTime0ms = 0, - MBLAccelerometerBoschFlatTime640ms = 1, - MBLAccelerometerBoschFlatTime1280ms = 2, - MBLAccelerometerBoschFlatTime2560ms = 3 -}; - -/** - The BMI160 contains a special hardware block to detect when the device - is laying flat (setting on a table) or not. - */ -@interface MBLAccelerometerBoschFlatEvent : MBLEvent - -/** - Threshold in degrees from perfectly flat when a non-flat event is triggered. - */ -@property (nonatomic) double flatThreshold; - -/** - Delay time for which flat value must remain stable for the flat interrupt to be generated - */ -@property (nonatomic) MBLAccelerometerBoschFlatTime flatDelay; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent.m deleted file mode 100644 index 5389185..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent.m +++ /dev/null @@ -1,93 +0,0 @@ -/** - * MBLAccelerometerBoschFlatEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 7/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschFlatEvent+Private.h" -#import "MBLEvent+Private.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLAccelerometerBoschFlatFormat.h" - -@interface MBLAccelerometerBoschFlatEvent () -@property (nonatomic) MBLRegister *flatInterruptEn; -@property (nonatomic) MBLRegister *flatConfig; -@end - -@implementation MBLAccelerometerBoschFlatEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x14 format:[[MBLAccelerometerBoschFlatFormat alloc] initWithAccelerometer:accelerometer] identifier:@"bosch-flat"]; - if (self) { - self.flatInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x12 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.flatConfig = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x13 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - - self.flatThreshold = 6.0; - self.flatDelay = MBLAccelerometerBoschFlatTime640ms; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - bmi160_reg_int_flat_t regs = { 0 }; - - // defines threshold for detection of flat position in range from 0 to 44.8 - // Since there are 6 bits to this field, each LSB is 44.8 / 63 = 0.71111111 - regs.int_flat_0.int_flat_theta = round(self.flatThreshold / 0.71111111); - // defines flat interrupt hystersis, no units given..thanks bosch - regs.int_flat_1.int_flat_hy = 1; - // delay time for which the flat value must remain stable for flat - //. interrupt to be generated: 0 -> 0ms, 1 -> 640 ms, 2-> 1280 ms, 3 -> 2560 ms - regs.int_flat_1.int_flag_hold = self.flatDelay; - - [tasks addObject:[self.flatConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_reg_int_flat_t)]]]; - - // Write the enable bit for tap detection interrupts - uint8_t data[] = { (1 << 0) , 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - [tasks addObject:[self.flatInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]]; - - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bit for tap detection interrupts - uint8_t data[] = { 0, (1 << 0) }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.flatInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent.h b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent.h deleted file mode 100644 index 4af4574..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent.h +++ /dev/null @@ -1,92 +0,0 @@ -/** - * MBLAccelerometerBoschLowOrHighGEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 11/4/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - The BMI160 combines low-g and high-g detection, so below we expose the - raw registers as a first enabling step. Over time this will become - better encapsulated. - */ -@interface MBLAccelerometerBoschLowOrHighGEvent : MBLEvent - -#pragma mark - Beta API (Subject to change) - -/** - Set to YES if you want low-g events - */ -@property (nonatomic) BOOL lowGEnabled; -/** - Time in ms that acceleration must stay below lowGThreshold before an event is triggered. - */ -@property (nonatomic) double lowGDuration; -/** - Acceleration in G's that acceleration must stay below to be consided a low-g event. - */ -@property (nonatomic) double lowGThreshold; -/** - Hysteresis for the low-g threshold. - */ -@property (nonatomic) double lowGHysteresis; -/** - Set to YES for axis-summing mode (summed absolute value of all axis must be below lowGThreshold). - Set to NO for single-axis mode (absolute value of each axis is compared to lowGThreshold). - */ -@property (nonatomic) BOOL lowGMode; - - -/** - Bitmask for axis enabled for high-g detection. - */ -@property (nonatomic) MBLAccelerometerAxis highGEnabledAxis; -/** - Time in ms that acceleration must stay above highGThreshold before an event is triggered. - */ -@property (nonatomic) double highGDuration; -/** - Acceleration in G's that acceleration must stay above to be consided a high-g event. - */ -@property (nonatomic) double highGThreshold; -/** - Hysteresis for the high-g threshold. - */ -@property (nonatomic) double highGHysteresis; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent.m deleted file mode 100644 index 818b7d7..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent.m +++ /dev/null @@ -1,162 +0,0 @@ -/** - * MBLAccelerometerBoschLowOrHighGEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 11/4/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschLowOrHighGEvent+Private.h" -#import "MBLEvent+Private.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLFormat.h" -#import "bmi160.h" - -@interface MBLAccelerometerBoschLowOrHighGEvent () -@property (nonatomic) MBLRegister *lowGHighGInterruptEn; -@property (nonatomic) MBLRegister *lowGHighGConfig; - -@property (nonatomic) double lowOrHighGDurationMultiplier; -@end - -@implementation MBLAccelerometerBoschLowOrHighGEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x8 format:[[MBLFormat alloc] initEncodedDataWithLength:1] identifier:@"bosch-low-high"]; - if (self) { - // Default settings - self.lowGDuration = 100.0; - self.lowGHysteresis = 0.125; - self.lowGThreshold = 0.2; - self.lowGMode = NO; - - self.highGDuration = 30.0; - self.highGHysteresis = 0.125; - self.highGThreshold = 2.0; - - // Registers - self.lowGHighGInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.lowGHighGConfig = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x7 format:[[MBLFormat alloc] initEncodedDataWithLength:5]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - MBLAccelerometerBosch *accelerometer = (MBLAccelerometerBosch *)self.module; - bmi160_reg_int_lowhigh_t regs = { 0 }; - - // delay in ms = (int_low_dur + 1) * 2.5 - regs.int_lowhigh_0.int_low_dur = MAX((self.lowGDuration / self.lowOrHighGDurationMultiplier) - 1, 0); - - // threshold in g = int_low_th * 0.00781 - regs.int_lowhigh_1.int_low_th = self.lowGThreshold / 0.00781; - - // int_high_hy * 125mg (2g-range), int_high_hy * 250mg (4g-range), int_high_hy * 500mg (8g-range), int_high_hy * 1000mg (16g-range) - // if th = 0, then value is 1/2 the constant - double scale; - switch (accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange2G: - scale = 0.125; - break; - case MBLAccelerometerBoschRange4G: - scale = 0.250; - break; - case MBLAccelerometerBoschRange8G: - scale = 0.500; - break; - case MBLAccelerometerBoschRange16G: - scale = 1.000; - break; - } - regs.int_lowhigh_2.int_high_hy = self.highGHysteresis / scale; - - // Set low-g mode - regs.int_lowhigh_2.int_low_mode = self.lowGMode; - - // hystersis in g = int_low_hy * 0.125 - regs.int_lowhigh_2.int_low_hy = self.lowGHysteresis / 0.125; - - // delay in ms = (int_high_dur + 1) * 2.5 - regs.int_lowhigh_3.int_high_dur = MAX((self.highGDuration / self.lowOrHighGDurationMultiplier) - 1, 0); - - // int_high_th * 7.81mg (2g-range), int_high_th * 15.63mg (4g-range), int_high_th * 31.25mg (8g-range), int_high_th * 62.5mg (16g-range) - // if th = 0, then value is 1/2 the constant - switch (accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange2G: - scale = 0.00781; - break; - case MBLAccelerometerBoschRange4G: - scale = 0.01563; - break; - case MBLAccelerometerBoschRange8G: - scale = 0.03125; - break; - case MBLAccelerometerBoschRange16G: - scale = 0.0625; - break; - } - regs.int_lowhigh_4.int_high_th = self.highGThreshold / scale; - - [tasks addObject:[self.lowGHighGConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_reg_int_lowhigh_t)]]]; - - // Write the enable bits - uint8_t enableMask = 0; - if (self.highGEnabledAxis & MBLAccelerometerAxisX) { - enableMask |= (1 << 0); - } - if (self.highGEnabledAxis & MBLAccelerometerAxisY) { - enableMask |= (1 << 1); - } - if (self.highGEnabledAxis & MBLAccelerometerAxisZ) { - enableMask |= (1 << 2); - } - if (self.lowGEnabled) { - enableMask |= (1 << 3); - } - uint8_t data[] = { enableMask, 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - [tasks addObject:[self.lowGHighGInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]]; - - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bit for everything - uint8_t data[] = { 0, 0xF }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.lowGHighGConfig writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end - diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent.h b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent.h deleted file mode 100644 index 74efdfd..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent.h +++ /dev/null @@ -1,100 +0,0 @@ -/** - * MBLAccelerometerBoschTapEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 6/13/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Time delay between two taps - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerBoschTapDuration) { - MBLAccelerometerBoschTapDuration50ms = 0, - MBLAccelerometerBoschTapDuration100ms = 1, - MBLAccelerometerBoschTapDuration150ms = 2, - MBLAccelerometerBoschTapDuration200ms = 3, - MBLAccelerometerBoschTapDuration250ms = 4, // Default - MBLAccelerometerBoschTapDuration375ms = 5, - MBLAccelerometerBoschTapDuration500ms = 6, - MBLAccelerometerBoschTapDuration700ms = 7 -}; - -/** - Time for accelerometer to be still before a tap is considered to have occured - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerBoschTapQuiet) { - MBLAccelerometerBoschTapQuiet30ms = 0, // Default - MBLAccelerometerBoschTapQuiet20ms = 1 -}; - -/** - Time for status register to be locked in order to prevent other slopes from overwirting tap information - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerBoschTapShock) { - MBLAccelerometerBoschTapShock50ms = 0, // Default - MBLAccelerometerBoschTapShock75ms = 1 -}; - -@interface MBLAccelerometerBoschTapEvent : MBLEvent - -/** - Select the type of taps to be registered. When MBLAccelerometerTapModeBoth is used, - you will get two events on a double tap, one for the single and one for the double. - */ -@property (nonatomic) MBLAccelerometerTapType type; - -/** - Tap detection threshold in G's. Default 2.0 - */ -@property (nonatomic) double threshold; - -/** - Time delay between two taps - */ -@property (nonatomic) MBLAccelerometerBoschTapDuration duration; -/** - Time for accelerometer to be still before a tap is considered to have occured - */ -@property (nonatomic) MBLAccelerometerBoschTapQuiet quiet; -/** - Time for status register to be locked in order to prevent other slopes from overwirting tap information - */ -@property (nonatomic) MBLAccelerometerBoschTapShock shock; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent.m b/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent.m deleted file mode 100644 index a1be788..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent.m +++ /dev/null @@ -1,126 +0,0 @@ -/** - * MBLAccelerometerBoschTapEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 6/13/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschTapEvent+Private.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLEvent+Private.h" -#import "MBLFormat.h" - -@interface MBLAccelerometerBoschTapEvent () -@property (nonatomic) MBLRegister *tapInterruptEn; -@property (nonatomic) MBLRegister *tapConfig; -@end - -@implementation MBLAccelerometerBoschTapEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0xE format:[[MBLFormat alloc] initEncodedDataWithLength:1] identifier:@"bosch-tap"]; - if (self) { - self.tapInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0C format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.tapConfig = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0D format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - - self.type = MBLAccelerometerTapTypeSingle; - self.threshold = 2.0; - self.duration = MBLAccelerometerBoschTapDuration250ms; - self.quiet = MBLAccelerometerBoschTapQuiet30ms; - self.shock = MBLAccelerometerBoschTapShock50ms; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - MBLAccelerometerBosch *accelerometer = (MBLAccelerometerBosch *)self.module; - bmi160_reg_int_tap_t regs = { 0 }; - - // 0 -> 50 ms, 1 -> 100 ms, 2 -> 150 ms, 3 -> 200 ms, 4 -> 250 ms, 5 -> 375 ms, 6 -> 500 ms, 7 -> 700 ms - regs.int_tap_0.int_tap_dur = self.duration; - // selects a tap quiet duration of 0 -> 30 ms, 1 -> 20 ms - regs.int_tap_0.int_tap_quiet = self.quiet; - // selects a tap shock duration of 0 -> 50 ms, 1 -> 75 ms - regs.int_tap_0.int_tap_shock = self.shock; - - // th * 62.5mg (2g-range), th * 125mg (4g-range), th * 250mg (8g-range), th * 500mg (16g-range) - // if th = 0, then value is 1/2 the constant - double scale; - switch (accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange2G: - scale = 62.5; - break; - case MBLAccelerometerBoschRange4G: - scale = 125; - break; - case MBLAccelerometerBoschRange8G: - scale = 250; - break; - case MBLAccelerometerBoschRange16G: - scale = 500; - break; - } - regs.int_tap_1.int_tap_th = round((self.threshold * 1000.0) / scale); - [tasks addObject:[self.tapConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_reg_int_tap_t)]]]; - - uint8_t enableMask; - switch (self.type) { - case MBLAccelerometerTapTypeSingle: - enableMask = (1 << 1); - break; - case MBLAccelerometerTapTypeDouble: - enableMask = (1 << 0); - break; - case MBLAccelerometerTapTypeBoth: - enableMask = (1 << 1) | (1 << 0); - break; - } - - // Write the enable bit for tap detection interrupts - uint8_t data[] = { enableMask , 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - [tasks addObject:[self.tapInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]]; - - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bit for tap detection interrupts - uint8_t data[] = { 0, (1 << 0) | (1 << 1) }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.tapInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.h b/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.h deleted file mode 100644 index 1e417d2..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.h +++ /dev/null @@ -1,123 +0,0 @@ -/** - * MBLAccelerometer.h - * MetaWear - * - * Created by Stephen Schiffli on 7/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -#import -#import -@class MBLNumericData; -@class MBLRMSAccelerometerData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Accelerometer axis - */ -typedef NS_OPTIONS(uint8_t, MBLAccelerometerAxis) { - MBLAccelerometerAxisX = 1 << 0, - MBLAccelerometerAxisY = 1 << 1, - MBLAccelerometerAxisZ = 1 << 2 -}; - -/** - Accelerometer tap types - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerTapType) { - MBLAccelerometerTapTypeSingle = 0, - MBLAccelerometerTapTypeDouble = 1, - MBLAccelerometerTapTypeBoth = 2 -}; - -/** - Interface to an abstract on-board accelerometer. If you need more advanced - features then upcast to the specific accelerometer on your board, either - MBLAccelerometerMMA8452Q or MBLAccelerometerBMI160. - @see MBLAccelerometerMMA8452Q - @see MBLAccelerometerBMI160 - */ -@interface MBLAccelerometer : MBLModule -/** - The frequency, in hertz, for providing accelerometer samples to the event handlers. - - @discussion The value of this property is capped to minimum and maximum values; - the maximum value is determined by the maximum frequency supported by the hardware. - If your app is sensitive to the intervals of acceleration data, it should always - check the timestamps of the delivered MBLAccelerometerData instances to determine - the true update interval. - */ -@property (nonatomic) double sampleFrequency; - -/** - Event representing a new accelerometer data sample complete with x, y, - and z axis data. This event will occur at the neareast hardware value - to sampleFrequency. Event callbac - ks will be provided an MBLAccelerometerData object. - */ -@property (nonatomic, readonly) MBLEvent *dataReadyEvent; -/** - Event representing a new accelerometer data sample, but with 3 raw samples - packed into a single BLE packet at the link level. This makes streaming much - more efficient, but at a slight cost of latency. This should certainly be used - for streaming at speeds over 100Hz, but should not be used for logging. - */ -@property (nonatomic, readonly, nullable) MBLEvent *packedDataReadyEvent; -/** - Event representing a new accelerometer X axis sample. This event - will occur at sampleFrequency. Event callbacks will be provided an - MBLNumericData object whose double value will be acceleration in G's. - */ -@property (nonatomic, readonly) MBLEvent *xAxisReadyEvent; -/** - Event representing a new accelerometer Y axis sample. This event - will occur at sampleFrequency. Event callbacks will be provided an - MBLNumericData object whose double value will be acceleration in G's. - */ -@property (nonatomic, readonly) MBLEvent *yAxisReadyEvent; -/** - Event representing a new accelerometer Z axis sample. This event - will occur at sampleFrequency. Event callbacks will be provided an - MBLNumericData object whose double value will be acceleration in G's. - */ -@property (nonatomic, readonly) MBLEvent *zAxisReadyEvent; -/** - Event representing a new accelerometer data sample, but filtered down to - just an RMS value. Event callbacks will be provided an MBLRMSAccelerometerData object - */ -@property (nonatomic, readonly) MBLEvent *rmsDataReadyEvent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.m b/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.m deleted file mode 100644 index 4b386b7..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometer.m +++ /dev/null @@ -1,83 +0,0 @@ -/** - * MBLAccelerometer.m - * MetaWear - * - * Created by Stephen Schiffli on 7/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometer+Private.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLAccelerometerBMA255+Private.h" -#import "MBLMetaWear+Private.h" -#import "mma8452q.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLAccelerometerDataReadyEvent.h" -#import "MBLAccelerometerFreeFallEvent.h" -#import "MBLAccelerometerOrientationEvent.h" -#import "MBLAccelerometerTapEvent.h" -#import "MBLAccelerometerShakeEvent.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLAccelerometerAxisReadyEvent.h" - -@interface MBLAccelerometer() -@property (nonatomic) MBLEvent *dataReadyEvent; -@property (nonatomic) MBLEvent *packedDataReadyEvent; -@property (nonatomic) MBLEvent *xAxisReadyEvent; -@property (nonatomic) MBLEvent *yAxisReadyEvent; -@property (nonatomic) MBLEvent *zAxisReadyEvent; -@property (nonatomic) MBLEvent *rmsDataReadyEvent; -@end - -@implementation MBLAccelerometer - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - if (moduleInfo.moduleImplementation == 1) { - return [[MBLAccelerometerBMI160 alloc] initWithDevice:device moduleInfo:moduleInfo]; - } else if (moduleInfo.moduleImplementation == 3) { - return [[MBLAccelerometerBMA255 alloc] initWithDevice:device moduleInfo:moduleInfo]; - } else { - return [[MBLAccelerometerMMA8452Q alloc] initWithDevice:device moduleInfo:moduleInfo]; - } -} - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.sampleFrequency = 100; - } - return self; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometerData.h b/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometerData.h deleted file mode 100644 index 85666bf..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometerData.h +++ /dev/null @@ -1,83 +0,0 @@ -/** - * MBLAccelerometerData.h - * MetaWear - * - * Created by Stephen Schiffli on 7/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for a single accelerometer sensor reading - */ -@interface MBLAccelerometerData : MBLDataSample - -/** - Acceleration along X axis in G's - */ -@property (nonatomic, readonly) double x; -/** - Acceleration along Y axis in G's - */ -@property (nonatomic, readonly) double y; -/** - Acceleration along Z axis in G's - */ -@property (nonatomic, readonly) double z; - -/** - RMS value of x, y, and z in G's - */ -@property (nonatomic, readonly) double RMS; -/** - RSS (vector magnitude) value of x, y, and z in G's - */ -@property (nonatomic, readonly) double RSS; - -@end - - -/** - Container for a single accelerometer reading corrected using - Sensor Fusion algorithims - */ -@interface MBLCorrectedAccelerometerData : MBLAccelerometerData -/** - Rating of calibration status for this data sample - */ -@property (nonatomic, readonly) MBLCalibrationAccuracy accuracy; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometerData.m b/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometerData.m deleted file mode 100644 index c07c133..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MBLAccelerometerData.m +++ /dev/null @@ -1,93 +0,0 @@ -/** - * MBLAccelerometerData.m - * MetaWear - * - * Created by Stephen Schiffli on 7/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerData+Private.h" -#import "MBLDataSample+Private.h" - -@interface MBLAccelerometerData() -@property (nonatomic) double x, y, z; -@property (nonatomic) double RMS; -@property (nonatomic) double RSS; -@end - -@implementation MBLAccelerometerData - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.x = x; - self.y = y; - self.z = z; - self.RMS = sqrt(((self.x * self.x) + (self.y * self.y) + (self.z * self.z)) / 3); - self.RSS = sqrt((self.x * self.x) + (self.y * self.y) + (self.z * self.z)); - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%f,%f,%f,%f", self.x, self.y, self.z, self.RMS]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%f,%f,%f\n", self.timestamp.timeIntervalSince1970, self.x, self.y, self.z]; -} - -@end - - -@interface MBLCorrectedAccelerometerData() -@property (nonatomic) MBLCalibrationAccuracy accuracy; -@end - -@implementation MBLCorrectedAccelerometerData - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z accuracy:(MBLCalibrationAccuracy)accuracy timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithX:x y:y z:z timestamp:timestamp data:data]; - if (self) { - self.accuracy = accuracy; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %f,%f,%f", MBLCalibrationAccuracyString(self.accuracy), self.x, self.y, self.z]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLOrientationData.h b/MetaWear/Classes/Modules/Accelerometer/MBLOrientationData.h deleted file mode 100644 index 4900ec5..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MBLOrientationData.h +++ /dev/null @@ -1,69 +0,0 @@ -/** - * MBLOrientationData.h - * MetaWear - * - * Created by Stephen Schiffli on 10/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(uint8_t, MBLAccelerometerOrientation) { - MBLAccelerometerOrientationPortrait = 0, - MBLAccelerometerOrientationPortraitUpsideDown = 1, - MBLAccelerometerOrientationLandscapeRight = 2, - MBLAccelerometerOrientationLandscapeLeft = 3, -}; - -typedef NS_ENUM(uint8_t, MBLAccelerometerFacingDirection) { - MBLAccelerometerFacingDirectionUnknown = 0, - MBLAccelerometerFacingDirectionUpward = 1, - MBLAccelerometerFacingDirectionDownward = 2 -}; - -/** - Container for orientation data - */ -@interface MBLOrientationData : MBLDataSample - -/** - The Portrait/Landscape orientation - */ -@property (nonatomic) MBLAccelerometerOrientation orientation; -/** - The Upward/Downward facing orientation. - */ -@property (nonatomic) MBLAccelerometerFacingDirection facingDirection; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLOrientationData.m b/MetaWear/Classes/Modules/Accelerometer/MBLOrientationData.m deleted file mode 100644 index 497b5d7..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MBLOrientationData.m +++ /dev/null @@ -1,101 +0,0 @@ -/** - * MBLOrientationData.m - * MetaWear - * - * Created by Stephen Schiffli on 10/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLOrientationData+Private.h" -#import "MBLDataSample+Private.h" - -@implementation MBLOrientationData - -- (instancetype)initWithOrientation:(MBLAccelerometerOrientation)orientation - facingDirection:(MBLAccelerometerFacingDirection)facingDirection - timestamp:(NSDate *)timestamp - data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.orientation = orientation; - self.facingDirection = facingDirection; - } - return self; -} - -- (instancetype)initWithOrientation:(MBLAccelerometerOrientation)orientation timestamp:(NSDate *)timestamp data:(NSData *)data -{ - return [self initWithOrientation:orientation facingDirection:MBLAccelerometerFacingDirectionUnknown timestamp:timestamp data:data]; -} - -- (NSString *)orientationString -{ - NSString *direction; - switch (self.orientation) { - case MBLAccelerometerOrientationPortrait: - direction = @"Portrait"; - break; - case MBLAccelerometerOrientationPortraitUpsideDown: - direction = @"PortraitUpsideDown"; - break; - case MBLAccelerometerOrientationLandscapeLeft: - direction = @"LandscapeLeft"; - break; - case MBLAccelerometerOrientationLandscapeRight: - direction = @"LandscapeRight"; - break; - } - switch (self.facingDirection) { - case MBLAccelerometerFacingDirectionUpward: - direction = [direction stringByAppendingString:@" Upward"]; - break; - case MBLAccelerometerFacingDirectionDownward: - direction = [direction stringByAppendingString:@" Downward"]; - break; - case MBLAccelerometerFacingDirectionUnknown: - break; - } - return direction; -} - -- (NSString *)description -{ - NSString *direction = [self orientationString]; - return [NSString stringWithFormat:@"%@ %@", [super description], direction]; -} - -- (NSString *)csvRepresentation -{ - NSString *direction = [self orientationString]; - return [NSString stringWithFormat:@"%f,%@\n", self.timestamp.timeIntervalSince1970, direction]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLRMSAccelerometerData.h b/MetaWear/Classes/Modules/Accelerometer/MBLRMSAccelerometerData.h deleted file mode 100644 index 2cbebee..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MBLRMSAccelerometerData.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * MBLRMSAccelerometerData.h - * MetaWear - * - * Created by Stephen Schiffli on 10/21/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for accelerometer RMS data - */ -@interface MBLRMSAccelerometerData : MBLDataSample -/** - RMS value of x, y, and z in G's - */ -@property (nonatomic, readonly) double rms; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/MBLRMSAccelerometerData.m b/MetaWear/Classes/Modules/Accelerometer/MBLRMSAccelerometerData.m deleted file mode 100644 index 3bb05f0..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MBLRMSAccelerometerData.m +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLRMSAccelerometerData.m - * MetaWear - * - * Created by Stephen Schiffli on 10/21/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLRMSAccelerometerData+Private.h" -#import "MBLDataSample+Private.h" - -@interface MBLRMSAccelerometerData () -@property (nonatomic) double rms; -@end - -@implementation MBLRMSAccelerometerData - -- (instancetype)initWithRMS:(double)rms timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.rms = rms; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %f", [super description], self.rms]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%f\n", self.timestamp.timeIntervalSince1970, self.rms]; -} - -@end diff --git a/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.h b/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.h deleted file mode 100644 index 5e93482..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.h +++ /dev/null @@ -1,193 +0,0 @@ -/** - * MBLAccelerometerMMA8452Q.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Accelerometer sensitiviy ranges - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerRange) { - MBLAccelerometerRange2G = 0, - MBLAccelerometerRange4G = 1, - MBLAccelerometerRange8G = 2 -}; - -/** - Accelerometer sleep sample frequencies - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerSleepSampleFrequency) { - MBLAccelerometerSleepSampleFrequency50Hz = 0, - MBLAccelerometerSleepSampleFrequency12_5Hz = 1, - MBLAccelerometerSleepSampleFrequency6_25Hz = 2, - MBLAccelerometerSleepSampleFrequency1_56Hz = 3 -}; - -/** - Accelerometer power modes - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerPowerScheme) { - MBLAccelerometerPowerSchemeNormal = 0, - MBLAccelerometerPowerSchemeLowNoiseLowPower = 1, - MBLAccelerometerPowerSchemeHighResolution = 2, - MBLAccelerometerPowerSchemeLowerPower = 3, -}; - -/** - Accelerometer high-pass filter cutoff frequency types - */ -typedef NS_ENUM(uint8_t, MBLAccelerometerCutoffFreq) { - MBLAccelerometerCutoffFreqHigheset = 0, - MBLAccelerometerCutoffFreqHigh = 1, - MBLAccelerometerCutoffFreqMedium = 2, - MBLAccelerometerCutoffFreqLow = 3 -}; - -/** - Interface to an MMA8452Q accelerometer - */ -@interface MBLAccelerometerMMA8452Q : MBLAccelerometer -/** - Maximum acceleration the accelerometer can report - */ -@property (nonatomic) MBLAccelerometerRange fullScaleRange; -/** - High-pass filter enable; YES: Output data high-pass filtered, NO: No filter. - With a high-pass filter, the frequencies below the cutoff (see highPassCutoffFreq), - are removed. Only the high frequencies pass through. This means that when - enabled, you will only see changes in acceleration and not constant forces, like - gravity. - */ -@property (nonatomic) BOOL highPassFilter; -/** - High-pass filter cutoff frequency selection. The higher the frequency the - less you will see of slow acceleration changes. - */ -@property (nonatomic) MBLAccelerometerCutoffFreq highPassCutoffFreq; -/** - Reduced noise reduced mode; NO: Normal Mode, YES: Reduced noise - in low noise mode, the maximum signal that can be measured is ±4g. Note: Any - thresholds set above 4g will not be reached. - */ -@property (nonatomic) BOOL lowNoise; -/** - Fast Read mode; NO: Normal Mode, YES: Fast Read Mode F_READ bit selects between - Normal and Fast Read mode. When selected, the auto-increment counter - will skip over the LSB data bytes. - */ -@property (nonatomic) BOOL fastReadMode; - -/** - ACTIVE mode power scheme selection - */ -@property (nonatomic) MBLAccelerometerPowerScheme activePowerScheme; - -/** Configures the Auto-WAKE sample frequency when the device is in - SLEEP Mode - */ -@property (nonatomic) MBLAccelerometerSleepSampleFrequency sleepSampleFrequency; -/** - SLEEP mode power scheme selection - */ -@property (nonatomic) MBLAccelerometerPowerScheme sleepPowerScheme; -/** - Auto-SLEEP; NO: Disabled, YES: Enabled - */ -@property (nonatomic) BOOL autoSleep; - - -/** - Select one or more axis used for tap detection - */ -@property (nonatomic) MBLAccelerometerAxis tapDetectionAxis; -/** - Select the type of taps to be registered. When MBLAccelerometerTapModeBoth is used, - you will get two events on a double tap, one for the single and one for the double. - */ -@property (nonatomic) MBLAccelerometerTapType tapType; -/** - Event representing a tap (single, double, or both based on tapType) on the tapDetectionAxis. - Event callbacks will be provided an empty MBLDataSample object - */ -@property (nonatomic, readonly, nonnull) MBLEvent *tapEvent; - - -/** - Select threshold (in G's [0.0, 8.0]) for the shakeEvent. This is used in conjuction - with shakeWidth to determine when a shakeEvent will be generated. Default value 0.5 - */ -@property (nonatomic) double shakeThreshold; -/** - Select time (in mSec) required for acceleration to be above shakeThreshold - before a shakeEvent will be generated. Default value 200.0 - */ -@property (nonatomic) double shakeWidth; -/** - Event representing a shake. The sensitvity can be tuned using - shakeThreshold and shakeWidth properties. - Event callbacks will be provided an empty MBLDataSample object. - */ -@property (nonatomic, readonly) MBLEvent *shakeEvent; - - -/** - Select threshold (in G's [0.0, 8.0]) for the freeFallEvent. This is used in conjuction - with freeFallWidth to determine when a freeFallEvent will be generated. All accelerometer - axis' must stay below freeFallThreshold for freeFallWidth mili-seconds. Default value 0.2 - */ -@property (nonatomic) double freeFallThreshold; -/** - Select time (in mSec) required for all accelerometer axis' to be above freeFallThreshold - before a freeFallEvent will be generated. Default value 100.0 - */ -@property (nonatomic) double freeFallWidth; -/** - Event representing free fall, event occurs every freeFallWidth ms while the device - is in free fall. - Event callbacks will be provided an empty MBLDataSample object - */ -@property (nonatomic, readonly) MBLEvent *freeFallEvent; - - -/** - Event representing an orientation change. - Event callbacks will be provided an MBLOrientationData object - */ -@property (nonatomic, readonly) MBLEvent *orientationEvent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.m b/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.m deleted file mode 100644 index 8e7e374..0000000 --- a/MetaWear/Classes/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q.m +++ /dev/null @@ -1,262 +0,0 @@ -/** - * MBLAccelerometerMMA8452Q.m - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometer+Private.h" -#import "mma8452q.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLAccelerometerDataReadyEvent.h" -#import "MBLAccelerometerPackedDataReadyEvent.h" -#import "MBLAccelerometerFreeFallEvent.h" -#import "MBLAccelerometerOrientationEvent.h" -#import "MBLAccelerometerTapEvent.h" -#import "MBLAccelerometerShakeEvent.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLAccelerometerAxisReadyEvent.h" -#import "MBLLogger.h" -#import "MBLAccelerometerMMA8452QRMSFormat.h" - - - -@interface MBLAccelerometerMMA8452Q() -@property (nonatomic) MBLRegister *dataSettings; -@property (nonatomic) MBLEvent *freeFallEvent; -@property (nonatomic) MBLEvent *orientationEvent; -@property (nonatomic) MBLEvent *tapEvent; -@property (nonatomic) MBLEvent *shakeEvent; -@end - -@implementation MBLAccelerometerMMA8452Q - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.fullScaleRange = MBLAccelerometerRange8G; - self.activePowerScheme = MBLAccelerometerPowerSchemeNormal; - self.tapDetectionAxis = MBLAccelerometerAxisX; - self.tapType = MBLAccelerometerTapTypeSingle; - self.shakeThreshold = 0.5; - self.shakeWidth = 200.0; - self.freeFallThreshold = 0.2; - self.freeFallWidth = 100.0; - - MBLRegister *globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.dataSettings = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - self.dataReadyEvent = [[MBLAccelerometerDataReadyEvent alloc] initWithAccelerometer:self]; - if (moduleInfo.moduleRevision >= 1) { - self.packedDataReadyEvent = [[MBLAccelerometerPackedDataReadyEvent alloc] initWithAccelerometer:self]; - } - self.xAxisReadyEvent = [[MBLAccelerometerAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisX]; - self.yAxisReadyEvent = [[MBLAccelerometerAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisY]; - self.zAxisReadyEvent = [[MBLAccelerometerAxisReadyEvent alloc] initWithAccelerometer:self axis:MBLAccelerometerAxisZ]; - self.freeFallEvent = [[MBLAccelerometerFreeFallEvent alloc] initWithAccelerometer:self]; - self.orientationEvent = [[MBLAccelerometerOrientationEvent alloc] initWithAccelerometer:self]; - self.tapEvent = [[MBLAccelerometerTapEvent alloc] initWithAccelerometer:self]; - self.shakeEvent = [[MBLAccelerometerShakeEvent alloc] initWithAccelerometer:self]; - - self.rmsDataReadyEvent = [self.dataReadyEvent rmsOfEventWithInputLength:2 inputCount:3 format:[[MBLAccelerometerMMA8452QRMSFormat alloc] initWithAccelerometer:self]]; - self.globalEnable = globalEnable; - } - return self; -} - -- (BFTask *)pullConfigAsync -{ - return [[self.dataSettings readAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - MBLDataSample *result = t.result; - const mma8452q_data_regs_t *regs = result.data.bytes; - self.fullScaleRange = regs->xyz_data_cfg.fs; - return nil; - }]; -} - -- (BFTask *)performAsyncInitialization -{ - mma8452q_data_regs_t regs = { 0 }; - - regs.xyz_data_cfg.fs = self.fullScaleRange; - regs.xyz_data_cfg.hpf_out = self.highPassFilter; - - // TODO: setup the High-Pass Filter Cutoff Register - //regs.hp_filter_cutoff.pulsehpfen - //regs.hp_filter_cutoff.pulselpfen - regs.hp_filter_cutoff.sel = self.highPassCutoffFreq; - - regs.ctrl_reg1.f_read = self.fastReadMode; - regs.ctrl_reg1.lnoise = self.lowNoise; - regs.ctrl_reg1.dr = self.scaleSampleFrequency; - regs.ctrl_reg1.aslp_rate = self.sleepSampleFrequency; - - regs.ctrl_reg2.smods = self.sleepPowerScheme; - regs.ctrl_reg2.slpe = self.autoSleep; - regs.ctrl_reg2.mods = self.activePowerScheme; - - // TODO: setup the aslp_count, minimum time period of inactivity required before sleeping - //regs.aslp_count.aslp_count - return [self.dataSettings writeDataAsync:[NSData dataWithBytes:®s length:sizeof(mma8452q_data_regs_t)]]; -} - -#pragma mark - Private helpers - -double timeStepForPulseLimeLimit_LPF_EN_1[8][4] = { - //Normal LPLN HighRes LP - { 1.25, 1.25, 1.25, 1.25 }, // 800Hz - { 2.50, 2.50, 2.50, 2.50 }, // 400Hz - { 5.00, 5.00, 2.50, 5.00 }, // 200Hz - { 10.0, 10.0, 2.50, 10.0 }, // 100Hz - { 20.0, 20.0, 2.50, 20.0 }, // 50Hz - { 20.0, 80.0, 2.50, 80.0 }, // 12.5Hz - { 20.0, 80.0, 2.50, 160 }, // 6.25Hz - { 20.0, 80.0, 2.50, 160 }, // 1.56Hz -}; - -double timeStepForPulseLimeLimit_LPF_EN_0[8][4] = { - //Normal LPLN HighRes LP - { 0.625, 0.625, 0.625, 0.625 }, // 800Hz - { 0.625, 0.625, 0.625, 1.250 }, // 400Hz - { 1.250, 1.250, 0.625, 2.500 }, // 200Hz - { 2.500, 2.500, 0.625, 5.000 }, // 100Hz - { 5.000, 5.000, 0.625, 10.00 }, // 50Hz - { 5.000, 20.00, 0.625, 40.00 }, // 12.5Hz - { 5.000, 20.00, 0.625, 40.00 }, // 6.25Hz - { 5.000, 20.00, 0.625, 40.00 }, // 1.56Hz -}; - -// Time Step for PULSE Latency is exactly double the tables above -// Time Step for PULSE Detection Window is exactly double the tables above -// Portrait/Landscape Debounce Counter is equal to timeStepForPulseLimeLimit_LPF_EN_1 -// FreeFall/Motion Debounce Counter is equal to timeStepForPulseLimeLimit_LPF_EN_1 -// Transient Debounce Counter is equal to timeStepForPulseLimeLimit_LPF_EN_1 - -- (uint8_t)scalePulseThreshold:(double)accelerationInGs -{ - if (accelerationInGs < 0.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] no negative pulse thresholds"); - accelerationInGs = accelerationInGs * -1; - } - if (accelerationInGs > 8.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] pulse threshold must be <= 8.0 G's"); - return 0xff; - } - // scale it to 0 - 127 - return (uint8_t)(accelerationInGs / 0.063); -} - -- (uint8_t)scalePulseTimeLimit:(double)timeInMsec -{ - if (timeInMsec < 0.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] no negative pulse time limit please"); - timeInMsec = 0.0; - } else if (timeInMsec > timeStepForPulseLimeLimit_LPF_EN_0[self.scaleSampleFrequency][self.activePowerScheme] * 255.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] pulse time limit requested is greater than max allowed"); - return 0xff; - } - // The ticks are scaled based on the current mode of the accelerometer - return (uint8_t)(timeInMsec / timeStepForPulseLimeLimit_LPF_EN_0[self.scaleSampleFrequency][self.activePowerScheme]); -} - -- (uint8_t)scalePulseLatency:(double)timeInMsec -{ - if (timeInMsec < 0.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] no negative puse latency please"); - timeInMsec = 0.0; - } else if (timeInMsec > timeStepForPulseLimeLimit_LPF_EN_0[self.scaleSampleFrequency][self.activePowerScheme] * 255.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] pulse latency requested is greater than max allowed"); - return 0xff; - } - // The ticks are scaled based on the current mode of the accelerometer - return (uint8_t)(timeInMsec / (timeStepForPulseLimeLimit_LPF_EN_0[self.scaleSampleFrequency][self.activePowerScheme] * 2)); -} - -- (uint8_t)scaleSecondPulseTimeWindow:(double)timeInMsec -{ - if (timeInMsec < 0.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] no negative pulse time windows please"); - timeInMsec = 0.0; - } else if (timeInMsec > timeStepForPulseLimeLimit_LPF_EN_0[self.scaleSampleFrequency][self.activePowerScheme] * 255.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] pulse time windown requested is greater than max allowed"); - return 0xff; - } - // The ticks are scaled based on the current mode of the accelerometer - return (uint8_t)(timeInMsec / (timeStepForPulseLimeLimit_LPF_EN_0[self.scaleSampleFrequency][self.activePowerScheme] * 2)); -} - -- (uint8_t)scalePortraitLandscapeDebounceCounter:(double)timeInMsec -{ - if (timeInMsec < 0.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] cannot have negative debounce counter value"); - timeInMsec = 0.0; - } else if (timeInMsec > timeStepForPulseLimeLimit_LPF_EN_0[self.scaleSampleFrequency][self.activePowerScheme] * 255.0) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] debounce counter value requested is greater than max allowed"); - return 0xff; - } - // The ticks are scaled based on the current mode of the accelerometer - return (uint8_t)(timeInMsec / timeStepForPulseLimeLimit_LPF_EN_1[self.scaleSampleFrequency][self.activePowerScheme]); -} - -- (uint8_t)scaleFreeFallMotionDebounceCounter:(double)timeInMsec -{ - return [self scalePortraitLandscapeDebounceCounter:timeInMsec]; -} - -- (uint8_t)scaleTransientDebounceCounter:(double)timeInMsec -{ - return [self scalePortraitLandscapeDebounceCounter:timeInMsec]; -} - -- (uint8_t)scaleSampleFrequency -{ - if (self.sampleFrequency > 400) { - return 0; - } else if (self.sampleFrequency > 200) { - return 1; - } else if (self.sampleFrequency > 100) { - return 2; - } else if (self.sampleFrequency > 50) { - return 3; - } else if (self.sampleFrequency > 12.5) { - return 4; - } else if (self.sampleFrequency > 6.25) { - return 5; - } else if (self.sampleFrequency > 1.56) { - return 6; - } else { - return 7; - } -} - -@end diff --git a/MetaWear/Classes/Modules/AmbientLight/AmbientLightLTR329/MBLAmbientLightLTR329.h b/MetaWear/Classes/Modules/AmbientLight/AmbientLightLTR329/MBLAmbientLightLTR329.h deleted file mode 100644 index 42a1ed8..0000000 --- a/MetaWear/Classes/Modules/AmbientLight/AmbientLightLTR329/MBLAmbientLightLTR329.h +++ /dev/null @@ -1,108 +0,0 @@ -/** - * MBLAmbientLightLTR329.h - * MetaWear - * - * Created by Stephen Schiffli on 7/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Gain applied to the ambient light sensor signal, changes the dynamic range - */ -typedef NS_ENUM(uint8_t, MBLAmbientLightLTR329Gain) { - MBLAmbientLightLTR329Gain1X = 0, // 1 lux to 64k lux (default) - MBLAmbientLightLTR329Gain2X = 1, // 0.5 lux to 32k lux - MBLAmbientLightLTR329Gain4X = 2, // 0.25 lux to 16k lux - MBLAmbientLightLTR329Gain8X = 3, // 0.125 lux to 8k lux - MBLAmbientLightLTR329Gain48X = 6,// 0.02 lux to 1.3k lux - MBLAmbientLightLTR329Gain96X = 7 // 0.01 lux to 600 lux -}; - -/** - Integration Time is the measurement time for each ambient light sensor cycle - */ -typedef NS_ENUM(uint8_t, MBLAmbientLightLTR329Integration) { - MBLAmbientLightLTR329Integration50ms = 1, - MBLAmbientLightLTR329Integration100ms = 0, - MBLAmbientLightLTR329Integration150ms = 4, - MBLAmbientLightLTR329Integration200ms = 2, - MBLAmbientLightLTR329Integration250ms = 5, - MBLAmbientLightLTR329Integration300ms = 6, - MBLAmbientLightLTR329Integration350ms = 7, - MBLAmbientLightLTR329Integration400ms = 3 -}; - -/** - Measurement Repeat Rate, defines the the period of the XXX and YYY event. - NOTE: must be set to be equal or larger than the Integration Time. - */ -typedef NS_ENUM(uint8_t, MBLAmbientLightLTR329Rate) { - MBLAmbientLightLTR329Rate50ms = 0, - MBLAmbientLightLTR329Rate100ms = 1, - MBLAmbientLightLTR329Rate200ms = 2, - MBLAmbientLightLTR329Rate500ms = 3, - MBLAmbientLightLTR329Rate1000ms = 4, - MBLAmbientLightLTR329Rate2000ms = 5 -}; - -/** - Interface to a LTR329 ambient light sensor - */ -@interface MBLAmbientLightLTR329 : MBLAmbientLight - -/** - Gain applied to the ambient light sensor signal, changes the dynamic range - */ -@property (nonatomic) MBLAmbientLightLTR329Gain gain; -/** - The measurement time for each ambient light sensor cycle - */ -@property (nonatomic) MBLAmbientLightLTR329Integration integrationTime; -/** - Measurement Repeat Rate, defines the the period of the - periodicIlluminance event. - */ -@property (nonatomic) MBLAmbientLightLTR329Rate measurementRate; - - -/** - Data representing the visible light response measured by the sensor. Period - of event will depend on measurementRate. Event callbacks will be provided - an MBLNumericData object whose double value will be illuminance in lux. - */ -@property (nonatomic, readonly) MBLEvent *periodicIlluminance; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/AmbientLight/AmbientLightLTR329/MBLAmbientLightLTR329.m b/MetaWear/Classes/Modules/AmbientLight/AmbientLightLTR329/MBLAmbientLightLTR329.m deleted file mode 100644 index 97c99b9..0000000 --- a/MetaWear/Classes/Modules/AmbientLight/AmbientLightLTR329/MBLAmbientLightLTR329.m +++ /dev/null @@ -1,104 +0,0 @@ -/** - * MBLAmbientLightLTR329.m - * MetaWear - * - * Created by Stephen Schiffli on 7/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAmbientLightLTR329.h" -#import "MBLAmbientLight+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLLogger.h" - -typedef struct __attribute__((packed)) { - uint8_t als_mode:1; - uint8_t sw_reset:1; - uint8_t als_gain:3; - uint8_t :3; -} ltr329_reg_als_contr_t; - -typedef struct __attribute__((packed)) { - uint8_t als_measurement_rate:3; - uint8_t als_integration_time:3; - uint8_t :2; -} ltr329_reg_als_meas_rate_t; - -typedef struct __attribute__((packed)) { - ltr329_reg_als_contr_t ltr329_als_contr; - ltr329_reg_als_meas_rate_t ltr329_als_meas_rate; -} mw_ambientlight_ctrl_regs_t; - - -@interface MBLAmbientLightLTR329 () -@property (nonatomic) MBLRegister *mode; -@property (nonatomic) MBLEvent *periodicIlluminance; -@end - -@implementation MBLAmbientLightLTR329 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - - self.illuminance = nil; - - self.gain = MBLAmbientLightLTR329Gain1X; - self.measurementRate = MBLAmbientLightLTR329Rate500ms; - self.integrationTime = MBLAmbientLightLTR329Integration100ms; - - self.mode = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.periodicIlluminance = [[MBLEvent alloc] initWithModule:self registerId:0x3 format:[[MBLNumericFormatter alloc] initDoubleWithLength:4 isSigned:NO scale:0.001] identifier:@"illuminance"]; - } - return self; -} - -- (MBLData *)illuminance -{ - MBLLog(MBLLogLevelWarning, @"[AmbientLight] illuminance not yet implemented, please use periodicIlluminance instead"); - return nil; -} - -- (BFTask *)performAsyncInitialization -{ - mw_ambientlight_ctrl_regs_t params = { 0 }; - params.ltr329_als_contr.als_gain = self.gain; - - params.ltr329_als_meas_rate.als_integration_time = self.integrationTime; - params.ltr329_als_meas_rate.als_measurement_rate = self.measurementRate; - - return [self.mode writeDataAsync:[NSData dataWithBytes:¶ms length:sizeof(mw_ambientlight_ctrl_regs_t)]]; -} - -@end diff --git a/MetaWear/Classes/Modules/AmbientLight/MBLAmbientLight.h b/MetaWear/Classes/Modules/AmbientLight/MBLAmbientLight.h deleted file mode 100644 index 7818d1c..0000000 --- a/MetaWear/Classes/Modules/AmbientLight/MBLAmbientLight.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - * MBLAmbientLight.h - * MetaWear - * - * Created by Stephen Schiffli on 7/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to an abstract ambient light sensor. If you need more advanced - features then upcast to the specific sensor on your board, MBLAmbientLightLTR329. - @see MBLAmbientLightLTR329 - */ -@interface MBLAmbientLight : MBLModule - -/** - Data representing the intensity of visible light present. - Event callbacks will be provided an MBLNumericData object whose - double value will be illuminance in lux. - NOT YET IMPLEMENTED - */ -@property (nonatomic, readonly, nullable) MBLData *illuminance; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/AmbientLight/MBLAmbientLight.m b/MetaWear/Classes/Modules/AmbientLight/MBLAmbientLight.m deleted file mode 100644 index 4a63af7..0000000 --- a/MetaWear/Classes/Modules/AmbientLight/MBLAmbientLight.m +++ /dev/null @@ -1,53 +0,0 @@ -/** - * MBLAmbientLight.m - * MetaWear - * - * Created by Stephen Schiffli on 7/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAmbientLight+Private.h" -#import "MBLAmbientLightLTR329.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" - -@interface MBLAmbientLight () -@property (nonatomic) MBLData *illuminance; -@end - -@implementation MBLAmbientLight -@synthesize illuminance = _noencode_illuminance; // TODO: Once we implement illuminace we can remove this - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - return [[MBLAmbientLightLTR329 alloc] initWithDevice:device moduleInfo:moduleInfo]; -} - -@end diff --git a/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBME280/MBLBarometerBME280.h b/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBME280/MBLBarometerBME280.h deleted file mode 100644 index 11e3748..0000000 --- a/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBME280/MBLBarometerBME280.h +++ /dev/null @@ -1,67 +0,0 @@ -/** - * MBLBarometerBME280.h - * MetaWear - * - * Created by Stephen Schiffli on 2/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Barometer standby times - */ -typedef NS_ENUM(uint8_t, MBLBarometerBME280Standby) { - MBLBarometerBME280Standby0_5 = 0, - MBLBarometerBME280Standby10 = 6, - MBLBarometerBME280Standby20 = 7, - MBLBarometerBME280Standby62_5 = 1, - MBLBarometerBME280Standby125 = 2, - MBLBarometerBME280Standby250 = 3, - MBLBarometerBME280Standby500 = 4, // default - MBLBarometerBME280Standby1000 = 5 -}; - -/** - Interface to a BME280 pressure sensor - */ -@interface MBLBarometerBME280 : MBLBarometerBosch - -/** - Set the standby time for the periodicAltitidue and periodicPressure events. - That is how long the device sleeps between successive measurements - */ -@property (nonatomic) MBLBarometerBME280Standby standbyTime; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBME280/MBLBarometerBME280.m b/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBME280/MBLBarometerBME280.m deleted file mode 100644 index 1db92ac..0000000 --- a/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBME280/MBLBarometerBME280.m +++ /dev/null @@ -1,78 +0,0 @@ -/** - * MBLBarometerBME280.m - * MetaWear - * - * Created by Stephen Schiffli on 2/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBarometerBME280.h" -#import "MBLBarometerBosch+Private.h" -#import "MBLRegister+Private.h" - -typedef struct __attribute__((packed)) { - uint8_t mode:2; - MBLBarometerBoschOversample osrs_p:3; - MBLBarometerBoschOversample osrs_t:3; - uint8_t spi3w_en:1; - uint8_t :1; - MBLBarometerBoschFilter filter:3; - MBLBarometerBME280Standby t_sb:3; -} bmp280_ctrl_regs_t; - - -@implementation MBLBarometerBME280 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.standbyTime = MBLBarometerBME280Standby500; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - bmp280_ctrl_regs_t params = { 0 }; - params.osrs_p = self.pressureOversampling; - // If pressure at x16 then temp should be x2 otherwise x1 is fine - // http://ae-bst.resource.bosch.com/media/products/dokumente/bmp280/BST-BMP280-DS001-10.pdf - if (self.pressureOversampling == MBLBarometerBoschOversampleUltraHighResolution) { - params.osrs_t = MBLBarometerBoschOversampleLowPower; - } else { - params.osrs_t = MBLBarometerBoschOversampleUltraLowPower; - } - params.filter = self.hardwareAverageFilter; - params.t_sb = self.standbyTime; - return [self.mode writeDataAsync:[NSData dataWithBytes:¶ms length:sizeof(params)]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBMP280/MBLBarometerBMP280.h b/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBMP280/MBLBarometerBMP280.h deleted file mode 100644 index e6faf35..0000000 --- a/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBMP280/MBLBarometerBMP280.h +++ /dev/null @@ -1,67 +0,0 @@ -/** - * MBLBarometerBMP280.h - * MetaWear - * - * Created by Stephen Schiffli on 7/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Barometer standby times - */ -typedef NS_ENUM(uint8_t, MBLBarometerBMP280Standby) { - MBLBarometerBMP280Standby0_5 = 0, - MBLBarometerBMP280Standby62_5 = 1, - MBLBarometerBMP280Standby125 = 2, - MBLBarometerBMP280Standby250 = 3, - MBLBarometerBMP280Standby500 = 4, // default - MBLBarometerBMP280Standby1000 = 5, - MBLBarometerBMP280Standby2000 = 6, - MBLBarometerBMP280Standby4000 = 7 -}; - -/** - Interface to a BMP280 pressure sensor - */ -@interface MBLBarometerBMP280 : MBLBarometerBosch - -/** - Set the standby time for the periodicAltitidue and periodicPressure events. - That is how long the device sleeps between successive measurements - */ -@property (nonatomic) MBLBarometerBMP280Standby standbyTime; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBMP280/MBLBarometerBMP280.m b/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBMP280/MBLBarometerBMP280.m deleted file mode 100644 index 2f8b577..0000000 --- a/MetaWear/Classes/Modules/Barometer/BarometerBosch/BarometerBMP280/MBLBarometerBMP280.m +++ /dev/null @@ -1,78 +0,0 @@ -/** - * MBLBarometerBMP280.m - * MetaWear - * - * Created by Stephen Schiffli on 7/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBarometerBMP280.h" -#import "MBLBarometerBosch+Private.h" -#import "MBLRegister+Private.h" - -typedef struct __attribute__((packed)) { - uint8_t mode:2; - MBLBarometerBoschOversample osrs_p:3; - MBLBarometerBoschOversample osrs_t:3; - uint8_t spi3w_en:1; - uint8_t :1; - MBLBarometerBoschFilter filter:3; - MBLBarometerBMP280Standby t_sb:3; -} bmp280_ctrl_regs_t; - - -@implementation MBLBarometerBMP280 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.standbyTime = MBLBarometerBMP280Standby500; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - bmp280_ctrl_regs_t params = { 0 }; - params.osrs_p = self.pressureOversampling; - // If pressure at x16 then temp should be x2 otherwise x1 is fine - // http://ae-bst.resource.bosch.com/media/products/dokumente/bmp280/BST-BMP280-DS001-10.pdf - if (self.pressureOversampling == MBLBarometerBoschOversampleUltraHighResolution) { - params.osrs_t = MBLBarometerBoschOversampleLowPower; - } else { - params.osrs_t = MBLBarometerBoschOversampleUltraLowPower; - } - params.filter = self.hardwareAverageFilter; - params.t_sb = self.standbyTime; - return [self.mode writeDataAsync:[NSData dataWithBytes:¶ms length:sizeof(params)]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Barometer/BarometerBosch/MBLBarometerBosch.h b/MetaWear/Classes/Modules/Barometer/BarometerBosch/MBLBarometerBosch.h deleted file mode 100644 index e36a90a..0000000 --- a/MetaWear/Classes/Modules/Barometer/BarometerBosch/MBLBarometerBosch.h +++ /dev/null @@ -1,95 +0,0 @@ -/** - * MBLBarometerBosch.h - * MetaWear - * - * Created by Stephen Schiffli on 2/25/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Barometer oversampling rates - */ -typedef NS_ENUM(uint8_t, MBLBarometerBoschOversample) { - MBLBarometerBoschOversampleUltraLowPower = 1, - MBLBarometerBoschOversampleLowPower = 2, - MBLBarometerBoschOversampleStandard = 3, // default - MBLBarometerBoschOversampleHighResolution = 4, - MBLBarometerBoschOversampleUltraHighResolution = 5, -}; - -/** - Barometer output filter - */ -typedef NS_ENUM(uint8_t, MBLBarometerBoschFilter) { - MBLBarometerBoschFilterOff = 0, // default - MBLBarometerBoschFilterAverage2 = 1, - MBLBarometerBoschFilterAverage4 = 2, - MBLBarometerBoschFilterAverage8 = 3, - MBLBarometerBoschFilterAverage16 = 4, -}; - -/** - Interface to a Bosch pressure sensor - */ -@interface MBLBarometerBosch : MBLBarometer - -/** - Use this to set pressure sampling mode, higher values produce more accurate - results but will use more power. - */ -@property (nonatomic) MBLBarometerBoschOversample pressureOversampling; -/** - Use this to set hardware average filtering of pressure samples. - */ -@property (nonatomic) MBLBarometerBoschFilter hardwareAverageFilter; - - -/** - Data representing the atmospheric pressure measured by barometer. Period - of event will depend on pressureOversampling and standbyTime. - Event callbacks will be provided an MBLNumericData object whose double - value will be pressure in pascals. - */ -@property (nonatomic, readonly) MBLEvent *periodicPressure; -/** - Event representing the altidue calulated from atmospheric pressure. Period - of event will depend on pressureOversampling and standbyTime. - Event callbacks will be provided an MBLNumericData object whose double - value will be altitude in meters. - */ -@property (nonatomic, readonly) MBLEvent *periodicAltitude; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Barometer/BarometerBosch/MBLBarometerBosch.m b/MetaWear/Classes/Modules/Barometer/BarometerBosch/MBLBarometerBosch.m deleted file mode 100644 index 2418df1..0000000 --- a/MetaWear/Classes/Modules/Barometer/BarometerBosch/MBLBarometerBosch.m +++ /dev/null @@ -1,69 +0,0 @@ -/** - * MBLBarometerBosch.m - * MetaWear - * - * Created by Stephen Schiffli on 2/25/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBarometerBosch+Private.h" -#import "MBLBarometer+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLBarometerBoschPeriodicPressureEvent.h" -#import "MBLBarometerBoschPeriodicAltitudeEvent.h" - -@interface MBLBarometerBosch () -@property (nonatomic) MBLEvent *periodicPressure; -@property (nonatomic) MBLEvent *periodicAltitude; -@property (nonatomic) MBLRegister *mode; -@end - -@implementation MBLBarometerBosch - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.pressure = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initDoubleWithLength:4 isSigned:NO scale:1.0 / 256.0] identifier:@"pressure"]; - self.altitude = [[MBLData alloc] initWithModule:self registerId:0x2 format:[[MBLNumericFormatter alloc] initDoubleWithLength:4 isSigned:YES scale:1.0 / 256.0] identifier:@"altitude"]; - self.periodicPressure = [[MBLBarometerBoschPeriodicPressureEvent alloc] initWithBarometer:self]; - self.periodicAltitude = [[MBLBarometerBoschPeriodicAltitudeEvent alloc] initWithBarometer:self]; - self.mode = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - - self.pressureOversampling = MBLBarometerBoschOversampleStandard; - self.hardwareAverageFilter = MBLBarometerBoschFilterOff; - } - return self; -} - -@end diff --git a/MetaWear/Classes/Modules/Barometer/MBLBarometer.h b/MetaWear/Classes/Modules/Barometer/MBLBarometer.h deleted file mode 100644 index 3d83d3e..0000000 --- a/MetaWear/Classes/Modules/Barometer/MBLBarometer.h +++ /dev/null @@ -1,66 +0,0 @@ -/** - * MBLBarometer.h - * MetaWear - * - * Created by Stephen Schiffli on 4/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to an abstract barometer sensor. If you need more advanced - features then upcast to the specific sensor on your board, MBLBarometerBMP280 or MBLBarometerBME280. - @see MBLBarometerBMP280 - @see MBLBarometerBME280 - */ -@interface MBLBarometer : MBLModule - -/** - Data representing the atmospheric pressure measured by barometer. - Event callbacks will be provided an MBLNumericData object whose double - value will be pressure in pascals. - */ -@property (nonatomic, readonly) MBLData *pressure; -/** - Data representing the altidue calulated from atmospheric pressure. - Event callbacks will be provided an MBLNumericData object whose double - value will be altitude in meters. - */ -@property (nonatomic, readonly) MBLData *altitude; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Barometer/MBLBarometer.m b/MetaWear/Classes/Modules/Barometer/MBLBarometer.m deleted file mode 100644 index f0a18bd..0000000 --- a/MetaWear/Classes/Modules/Barometer/MBLBarometer.m +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLBarometer.m - * MetaWear - * - * Created by Stephen Schiffli on 4/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBarometer+Private.h" -#import "MBLBarometerBMP280.h" -#import "MBLBarometerBME280.h" -#import "MBLModule+Private.h" - -@interface MBLBarometer () -@property (nonatomic) MBLData *pressure; -@property (nonatomic) MBLData *altitude; -@end - -@implementation MBLBarometer - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - if (moduleInfo.moduleImplementation == 1) { - return [[MBLBarometerBME280 alloc] initWithDevice:device moduleInfo:moduleInfo]; - } - return [[MBLBarometerBMP280 alloc] initWithDevice:device moduleInfo:moduleInfo]; -} - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - } - return self; -} - -@end diff --git a/MetaWear/Classes/Modules/Conductance/MBLConductance.h b/MetaWear/Classes/Modules/Conductance/MBLConductance.h deleted file mode 100644 index 5249656..0000000 --- a/MetaWear/Classes/Modules/Conductance/MBLConductance.h +++ /dev/null @@ -1,108 +0,0 @@ -/** - * MBLConductance.h - * MetaWear - * - * Created by Stephen Schiffli on 4/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import "Bolts/Bolts.h" -@class MBLNumericData; -@class MBLData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Gain applied in the Conductance circuit - */ -typedef NS_ENUM(uint8_t, MBLConductanceGain) { - MBLConductanceGain499K = 0, - MBLConductanceGain1M = 1 -}; - -/** - Constant voltage applied on the Conductance electrodes - */ -typedef NS_ENUM(uint8_t, MBLConductanceVoltage) { - MBLConductanceVoltage500mV = 1, - MBLConductanceVoltage250mV = 0 -}; - -/** - Valid measurment range voltage on the Conductance electrodes - */ -typedef NS_ENUM(uint8_t, MBLConductanceRange) { - MBLConductanceRange50uS = 0, - MBLConductanceRange100uS = 1, - MBLConductanceRange150uS = 2, - MBLConductanceRange200uS = 3 -}; - -/** - Interface to on-board Conductance sensor - */ -@interface MBLConductance : MBLModule - -/** - Gain applied in the Conductance circuit - @note Not available in all implementations - */ -@property (nonatomic) MBLConductanceGain gain; -/** - Constant voltage applied on the Conductance electrodes - @note Not available in all implementations - */ -@property (nonatomic) MBLConductanceVoltage voltage; -/** - Valid measurment range voltage on the Conductance electrodes - @note Not available in all implementations - */ -@property (nonatomic) MBLConductanceRange range; - - -/** - Array of MBLData objects. The index corresponds to the Conductance channel - number, for example, channels[0] returns an MBLData corresponding - to channel 0, which can be used for perfoming single channel reads. - Callbacks will be provided an MBLNumericData object whose uint32_t value - will be conductance in nS. - */ -@property (nonatomic, readonly) NSArray *> *channels; - -/** - Perform automatic Conductance calibration. This should be called when - temperature changes, or it can just be called periodically as it's low overhead. - */ -- (BFTask *)calibrateAsync; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Conductance/MBLConductance.m b/MetaWear/Classes/Modules/Conductance/MBLConductance.m deleted file mode 100644 index 3c76b65..0000000 --- a/MetaWear/Classes/Modules/Conductance/MBLConductance.m +++ /dev/null @@ -1,111 +0,0 @@ -/** - * MBLConductance.m - * MetaWear - * - * Created by Stephen Schiffli on 4/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLConductance.h" -#import "MBLRegister+Private.h" -#import "MBLData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLConductanceData.h" -#import "MBLMetaWear+Private.h" - -typedef struct __attribute__((packed)) { - uint8_t count; - uint8_t mode_length; - int8_t conductance_scale; -} conductance_module_info; - -@interface MBLConductance() -@property (nonatomic) MBLRegister *conductance; -@property (nonatomic) MBLRegister *calibrateReg; -@property (nonatomic) MBLRegister *mode; - -@property (nonatomic) NSArray *channels; -@end - -@implementation MBLConductance - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.gain = MBLConductanceGain499K; - self.voltage = MBLConductanceVoltage500mV; - self.range = MBLConductanceRange100uS; - - self.conductance = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - self.calibrateReg = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.mode = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - - if (moduleInfo.moduleImplementation >= 1) { - if (moduleInfo.moduleData.length == 3) { - conductance_module_info *info = (conductance_module_info *)moduleInfo.moduleData.bytes; - - NSMutableArray *channels = [[NSMutableArray alloc] initWithCapacity:info->count]; - for (uint8_t channel = 0; channel < info->count; channel++) { - [channels addObject:[[MBLConductanceData alloc] initWithRegister:self.conductance channel:channel]]; - } - self.channels = channels; - } - } else { - self.channels = @[[[MBLConductanceData alloc] initWithRegister:self.conductance channel:0], - [[MBLConductanceData alloc] initWithRegister:self.conductance channel:1], - [[MBLConductanceData alloc] initWithRegister:self.conductance channel:2], - [[MBLConductanceData alloc] initWithRegister:self.conductance channel:3]]; - } - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - if (self.moduleInfo.moduleImplementation == 1) { - uint8_t data[] = { self.voltage, self.gain }; - return [self.mode writeDataAsync:[NSData dataWithBytes:&data length:2]]; - } else if (self.moduleInfo.moduleImplementation == 2) { - uint8_t data[] = { self.range }; - return [self.mode writeDataAsync:[NSData dataWithBytes:&data length:1]]; - } else if (self.moduleInfo.moduleImplementation == 3) { - uint8_t data[] = { 1 }; // TODO: FIXME - return [self.mode writeDataAsync:[NSData dataWithBytes:&data length:1]]; - } - return [super performAsyncInitialization]; -} - -- (BFTask *)calibrateAsync -{ - return [self.calibrateReg writeDataAsync:nil]; -} - -@end diff --git a/MetaWear/Classes/Modules/GPIO/MBLGPIO.h b/MetaWear/Classes/Modules/GPIO/MBLGPIO.h deleted file mode 100644 index fbd5045..0000000 --- a/MetaWear/Classes/Modules/GPIO/MBLGPIO.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - * MBLGPIO.h - * MetaWear - * - * Created by Stephen Schiffli on 8/2/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to the general purprose input/output pins on the MetaWear. This - allows you to attach your own sensors or drive digitial devices. - */ -@interface MBLGPIO : MBLModule - -/** - Array of MBLGPIOPin objects. The index corresponds to the pin number - on the MetaWear, for example, pins[0] is "DIO0/AIN0" on the MetaWear - hardware spec sheet. - @see MBLGPIOPin - */ -@property (nonatomic, readonly) NSArray *pins; - -@end - - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/GPIO/MBLGPIO.m b/MetaWear/Classes/Modules/GPIO/MBLGPIO.m deleted file mode 100644 index f23c828..0000000 --- a/MetaWear/Classes/Modules/GPIO/MBLGPIO.m +++ /dev/null @@ -1,211 +0,0 @@ -/** - * MBLGPIO.m - * MetaWear - * - * Created by Stephen Schiffli on 8/2/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGPIO+Private.h" -#import "MBLRegister+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLEvent+Private.h" -#import "MBLNumericData+Private.h" -#import "MBLGPIOPin+Private.h" -#import "MBLGPIOData.h" -#import "MBLDeviceInfo.h" -#import "MBLGPIOPinChangeEvent.h" -#import "MBLNumericFormatter.h" -#import "MBLDataSample.h" -#import "BFTask+MBLPrivate.h" - -@interface MBLGPIO() -@property (nonatomic) MBLRegister *setDigitalOutput; -@property (nonatomic) MBLRegister *clearDigitalOutput; -@property (nonatomic) MBLRegister *setInputPullup; -@property (nonatomic) MBLRegister *setInputPulldown; -@property (nonatomic) MBLRegister *setInputNopull; -@property (nonatomic) MBLRegister *readAnalogAbsolute; -@property (nonatomic) MBLRegister *readAnalogRatio; -@property (nonatomic) MBLRegister *readDigital; -@property (nonatomic) MBLRegister *pinChangeSettings; -@property (nonatomic) MBLRegister *pinChangeNotification; -@property (nonatomic) MBLRegister *pinChangeNotificationEnable; - -@property (nonatomic) NSArray *pins; -@property (nonatomic) int activeNotifications; -@property (nonatomic) NSMutableArray *indexes; -@end - -@implementation MBLGPIO - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.setDigitalOutput = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.clearDigitalOutput = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.setInputPullup = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.setInputPulldown = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.setInputNopull = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.readAnalogAbsolute = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - self.readAnalogRatio = [[MBLRegister alloc] initWithModule:self registerId:0x7 format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - self.readDigital = [[MBLRegister alloc] initWithModule:self registerId:0x8 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.pinChangeSettings = [[MBLRegister alloc] initWithModule:self registerId:0x9 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.pinChangeNotification = [[MBLRegister alloc] initWithModule:self registerId:0xA format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.pinChangeNotificationEnable = [[MBLRegister alloc] initWithModule:self registerId:0xB format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - - if (moduleInfo.moduleRevision >= 1) { - NSMutableArray *pins = [[NSMutableArray alloc] initWithCapacity:moduleInfo.moduleData.length]; - if (moduleInfo.moduleData.length) { - uint8_t *featureByte = (uint8_t *)moduleInfo.moduleData.bytes; - for (uint8_t pin = 0; pin < moduleInfo.moduleData.length; pin++, featureByte++) { - [pins addObject:[[MBLGPIOPin alloc] initWithModule:self pin:pin featureByte:*featureByte]]; - } - } - self.pins = pins; - self.indexes = [NSMutableArray array]; - for (int i = (int)pins.count; i < 32; i++) { - [self.indexes addObject:[NSNumber numberWithInt:i]]; - } - } else { - // These are the old defaults - self.pins = @[[[MBLGPIOPin alloc] initWithModule:self pin:0 featureByte:0x3], - [[MBLGPIOPin alloc] initWithModule:self pin:1 featureByte:0x3], - [[MBLGPIOPin alloc] initWithModule:self pin:2 featureByte:0x3], - [[MBLGPIOPin alloc] initWithModule:self pin:3 featureByte:0x3], - [[MBLGPIOPin alloc] initWithModule:self pin:4 featureByte:0x1], - [[MBLGPIOPin alloc] initWithModule:self pin:5 featureByte:0x1], - [[MBLGPIOPin alloc] initWithModule:self pin:6 featureByte:0x1], - [[MBLGPIOPin alloc] initWithModule:self pin:7 featureByte:0x1]]; - self.indexes = [NSMutableArray array]; - for (int i = 8; i < 32; i++) { - [self.indexes addObject:[NSNumber numberWithInt:i]]; - } - } - } - return self; -} - -- (BFTask *)startNotificationsOnChangeEvent:(MBLGPIOPinChangeEvent *)event -{ - return [[BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - // Turn on notifications for this pin - uint8_t data[] = { event.index, 1 }; - return [self.pinChangeNotificationEnable writeDataAsync:[NSData dataWithBytes:data length:2]]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.activeNotifications++; - if (self.activeNotifications == 1) { - // Turn on global notifications - return [self.pinChangeNotification startNotificationsWithHandlerAsync:nil]; - } - return nil; - }]; -} - -- (BFTask *)stopNotificationsAsyncOnChangeEvent:(MBLGPIOPinChangeEvent *)event -{ - return [[BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - self.activeNotifications--; - if (self.activeNotifications == 0) { - // Turn off global notifications - return [self.pinChangeNotification stopNotificationsAsync]; - } - NSAssert(self.activeNotifications >= 0, @"Start/Stop notification calls unbalanced."); - self.activeNotifications = MAX(self.activeNotifications, 0); - return nil; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Turn off notifications for this pin - uint8_t data[] = { event.index, 0 }; - return [self.pinChangeNotificationEnable writeDataAsync:[NSData dataWithBytes:data length:2]]; - }]; -} - -- (BFTask *)setPin:(uint8_t)pinNumber toDigitalValue:(BOOL)on -{ - MBLRegister *reg = on ? self.setDigitalOutput : self.clearDigitalOutput; - return [reg writeByteAsync:pinNumber]; -} - -- (BFTask *)configurePin:(uint8_t)pinNumber type:(MBLPinConfiguration)type -{ - MBLRegister *reg; - switch (type) { - case MBLPinConfigurationPullup: - reg = self.setInputPullup; - break; - case MBLPinConfigurationPulldown: - reg = self.setInputPulldown; - break; - case MBLPinConfigurationNopull: - reg = self.setInputNopull; - break; - } - return [reg writeByteAsync:pinNumber]; -} - -- (BFTask *)performAsyncInitializationForRegister:(MBLGPIOData *)reg -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (reg.index != 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't initialize entity that's already initialized"}]; - return [BFTask taskWithError:error]; - } - NSNumber *index = [self.indexes lastObject]; - if (!index) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorInsufficientMemory - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"MetaWear out of memory, can't perform action. Reset the MetaWear."]}]; - return [BFTask taskWithError:error]; - } - reg.index = index.unsignedCharValue; - [self.indexes removeLastObject]; - return nil; - }]; -} - -- (BFTask *)performAsyncDeinitializationForRegister:(MBLGPIOData *)reg -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (reg.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't deinitialize entity that's already deinitialized"}]; - return [BFTask taskWithError:error]; - } - [self.indexes addObject:[NSNumber numberWithInt:reg.index]]; - reg.index = 0xFF; - return nil; - }]; -} - -@end diff --git a/MetaWear/Classes/Modules/GPIO/MBLGPIOPin.h b/MetaWear/Classes/Modules/GPIO/MBLGPIOPin.h deleted file mode 100644 index 373c9f8..0000000 --- a/MetaWear/Classes/Modules/GPIO/MBLGPIOPin.h +++ /dev/null @@ -1,178 +0,0 @@ -/** - * MBLGPIOPin.h - * MetaWear - * - * Created by Stephen Schiffli on 10/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -@class MBLEvent; -@class MBLData; -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Input pin configuration types - */ -typedef NS_ENUM(uint8_t, MBLPinConfiguration) { - MBLPinConfigurationPullup = 0, - MBLPinConfigurationPulldown = 1, - MBLPinConfigurationNopull = 2 -}; - -/** - Analog read modes - */ -typedef NS_ENUM(uint8_t, MBLAnalogReadMode) { - MBLAnalogReadModeFixed = 0, - MBLAnalogReadModeSupplyRatio = 1 -}; - -/** - Pin change types - */ -typedef NS_ENUM(uint8_t, MBLPinChangeType) { - MBLPinChangeTypeRising = 1, - MBLPinChangeTypeFalling = 2, - MBLPinChangeTypeAny = 3 -}; - -/** - Encapsulation of a single input/output pin - */ -@interface MBLGPIOPin : NSObject - -/** - Set what pin state transitions trigger a changeEvent. - */ -@property (nonatomic) MBLPinChangeType changeType; -/** - Set pull configuration for the pin - */ -- (MBLPinConfiguration)configuration; -- (BFTask *)setConfiguration:(MBLPinConfiguration)configuration; - - -///---------------------------------- -/// @name Reading Values -///---------------------------------- -/** - Event representing a change in the pin's digital value, you can choose - what state transitions trigger this event using the changeType property. - Event callbacks will be provided an MBLNumericData object whose bool - value indicates what state the pin changed to, YES means set, NO means - clear. - */ -@property (nonatomic, readonly, nullable) MBLEvent *changeEvent; -/** - Data representing the digital value of the pin. - Event callbacks will be provided an MBLNumericData object whose bool - value indicates what state the pin is in, YES means set, NO means clear. - */ -@property (nonatomic, readonly, nullable) MBLData *digitalValue; -/** - Data representing the analog value of the pin. - Event callbacks will be provided an MBLNumericData object whose double - value will be volts. - @warning Not all pins support analog reads - */ -@property (nonatomic, readonly, nullable) MBLData *analogAbsolute; -/** - Data representing the analog value of the pin as a ratio of the supply voltage. - Event callbacks will be provided an MBLNumericData object whose double value - will range from 0.0 to 1.0, where 0.0 indicates pin is equal to - ground, and 1.0 indicates pin is equal to supply voltage. - @warning Not all pins support analog reads - */ -@property (nonatomic, readonly, nullable) MBLData *analogRatio; - -///---------------------------------- -/// @name Automatic Analog Sensor Enabling -///---------------------------------- - -// To save power, sensors connected to a GPIO pin may optionally have an -// "enable" switch connected to another pin. Pulling up or down these -// enable pins can programmatically turn off the sensor to save power. -// Use the follow functions to create a special MBLData object that will -// automatically set the pullUp/pullDown pins, wait a certain amount of time, -// perform the read, then set the pullUp/pullDown pins back to MBLPinConfigurationNopull. - -/** - Create a new analogRatio data object that automatically sets and clears - pull up/down pins. - @param pullUp Pin to set high just before analog read is started, nil if none - @param pullDown Pin to set low just before analog read is started, nil if none - @param readDelay Time, in uSec, to delay the analog read after the pullUpPin and - pullDownPin have been set. Note there is some delay by default - due to firmware code execution time, so this is in addtion to that. - @returns New analogRatio data - */ -- (MBLData *)analogRatioWithPullUp:(nullable NSNumber *)pullUp - pullDown:(nullable NSNumber *)pullDown - readDelay:(uint16_t)readDelay; - -/** - Create a new analogAbsolute data object that automatically sets and clears - pull up/down pins. - @param pullUp Pin to set high just before analog read is started, nil if none - @param pullDown Pin to set low just before analog read is started, nil if none - @param readDelay Time, in uSec, to delay the analog read after the pullUpPin and - pullDownPin have been set. Note there is some delay by default - due to firmware code execution time, so this is in addtion to that. - @returns New analogAbsolute data - */ -- (MBLData *)analogAbsoluteWithPullUp:(nullable NSNumber *)pullUp - pullDown:(nullable NSNumber *)pullDown - readDelay:(uint16_t)readDelay; - -///---------------------------------- -/// @name Setting Values -///---------------------------------- -/** - Set a digital output GPIO Pin to a 1 or 0. - @param on YES sets pin to 1 (high), NO clears pin to 0 (low) - */ -- (BFTask *)setToDigitalValueAsync:(BOOL)on; - - -///---------------------------------- -/// @name Deprecated -///---------------------------------- -// @deprecated -@property (nonatomic, nullable) NSNumber *enablePin DEPRECATED_MSG_ATTRIBUTE("Use analogRatioWithPullUp:pullDown:readDelay or analogAbsoluteWithPullUp:pullDown:readDelay instead"); -// @deprecated -@property (nonatomic) BOOL enablePinActiveLow DEPRECATED_MSG_ATTRIBUTE("Use analogRatioWithPullUp:pullDown:readDelay or analogAbsoluteWithPullUp:pullDown:readDelay instead"); - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/GPIO/MBLGPIOPin.m b/MetaWear/Classes/Modules/GPIO/MBLGPIOPin.m deleted file mode 100644 index 35d7b6c..0000000 --- a/MetaWear/Classes/Modules/GPIO/MBLGPIOPin.m +++ /dev/null @@ -1,139 +0,0 @@ -/** - * MBLGPIOPin.m - * MetaWear - * - * Created by Stephen Schiffli on 10/29/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGPIOPin+Private.h" -#import "MBLEvent+Private.h" -#import "MBLGPIO+Private.h" -#import "MBLGPIOPinChangeEvent.h" -#import "MBLGPIOData.h" -#import "MBLMetaWear+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLNumericFormatter.h" - - -@interface MBLGPIOPin () -@property (nonatomic) MBLEvent *changeEvent; -@property (nonatomic) MBLData *digitalValue; -@property (nonatomic) MBLData *analogAbsolute; -@property (nonatomic) MBLData *analogRatio; - -@property (nonatomic, weak) MBLGPIO *gpio; -@property (nonatomic) uint8_t pin; - -// Setting the configuration property causes side effects, so we -// create an internal property for storing the actual value, allowing -// us to safely get/set during serialization of this class -@property (nonatomic) MBLPinConfiguration configurationImpl; -@end - -@implementation MBLGPIOPin - -- (instancetype)initWithModule:(MBLGPIO *)gpio pin:(uint8_t)pin featureByte:(uint8_t)featureByte -{ - self = [super init]; - if (self) { - self.gpio = gpio; - self.pin = pin; - - if (featureByte & 0x1) { - self.changeEvent = [[MBLGPIOPinChangeEvent alloc] initWithModule:gpio pin:pin]; - self.digitalValue = [[MBLGPIOData alloc] initWithRegister:gpio.readDigital pin:self format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO] identifier:[NSString stringWithFormat:@"digital[%d]", pin]]; - } - if (featureByte & 0x2) { - self.analogAbsolute = [[MBLGPIOData alloc] initWithRegister:gpio.readAnalogAbsolute pin:self format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:NO scale:1.0 / 1000.0] identifier:[NSString stringWithFormat:@"abs-ref[%d]", pin]]; - self.analogRatio = [[MBLGPIOData alloc] initWithRegister:gpio.readAnalogRatio pin:self format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:NO scale:1.0 / 1023.0] identifier:[NSString stringWithFormat:@"adc[%d]", pin]]; - } - - self.changeType = MBLPinChangeTypeRising; - self.configurationImpl = MBLPinConfigurationNopull; - } - return self; -} - -- (MBLPinConfiguration)configuration -{ - return self.configurationImpl; -} - -- (BFTask *)setConfiguration:(MBLPinConfiguration)configuration -{ - self.configurationImpl = configuration; - return [self.gpio configurePin:self.pin type:configuration]; -} - -- (void)setChangeType:(MBLPinChangeType)changeType -{ - [(MBLGPIOPinChangeEvent *)self.changeEvent setChangeType:changeType]; - _changeType = changeType; -} - -- (nonnull BFTask *)setToDigitalValueAsync:(BOOL)on -{ - return [self.gpio setPin:self.pin toDigitalValue:on]; -} - -- (MBLData *)analogRatioWithPullUp:(NSNumber *)pullUp - pullDown:(NSNumber *)pullDown - readDelay:(uint16_t)readDelay -{ - if (self.gpio.moduleInfo.moduleRevision < 2) { - [NSException raise:kMBLErrorDomain format:@"GPIO[WARNING] - Please update to latest firmware in order to use analogRatioWithPullUp."]; - } - return [[MBLGPIOData alloc] initWithRegister:self.gpio.readAnalogRatio - pin:self - format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:NO scale:1.0 / 1023.0] - pullUp:pullUp - pullDown:pullDown - readDelay:readDelay - identifier:[NSString stringWithFormat:@"adc[%d]", self.pin]]; -} - -- (MBLData *)analogAbsoluteWithPullUp:(NSNumber *)pullUp - pullDown:(NSNumber *)pullDown - readDelay:(uint16_t)readDelay -{ - if (self.gpio.moduleInfo.moduleRevision < 2) { - [NSException raise:kMBLErrorDomain format:@"GPIO[WARNING] - Please update to latest firmware in order to use analogAbsoluteWithPullUp."]; - } - return [[MBLGPIOData alloc] initWithRegister:self.gpio.readAnalogAbsolute - pin:self - format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:NO scale:1.0 / 1000.0] - pullUp:pullUp - pullDown:pullDown - readDelay:readDelay - identifier:[NSString stringWithFormat:@"abs-ref[%d]", self.pin]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.h b/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.h deleted file mode 100644 index ace2fbf..0000000 --- a/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.h +++ /dev/null @@ -1,70 +0,0 @@ -/** - * MBLGyroBMI160.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Gyro sensitiviy ranges in degrees per second - */ -typedef NS_ENUM(uint8_t, MBLGyroBMI160Range) { - MBLGyroBMI160Range125 = BMI160_GYRO_RANGE_125_DEG_SEC, - MBLGyroBMI160Range250 = BMI160_GYRO_RANGE_250_DEG_SEC, - MBLGyroBMI160Range500 = BMI160_GYRO_RANGE_500_DEG_SEC, - MBLGyroBMI160Range1000 = BMI160_GYRO_RANGE_1000_DEG_SEC, - MBLGyroBMI160Range2000 = BMI160_GYRO_RANGE_2000_DEG_SEC -}; - -/** - Interface to on-board BMI160 gyro - */ -@interface MBLGyroBMI160 : MBLGyro - -/** - Gyro output filtering mode - */ -@property (nonatomic) MBLBMI160FilterMode filterMode; - -/** - Maximum rotation the gyro can report - */ -@property (nonatomic) MBLGyroBMI160Range fullScaleRange; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.m b/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.m deleted file mode 100644 index 2ff65ac..0000000 --- a/MetaWear/Classes/Modules/Gyro/GyroBMI160/MBLGyroBMI160.m +++ /dev/null @@ -1,122 +0,0 @@ -/** - * MBLGyroBMI160.m - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGyroBMI160.h" -#import "MBLGyro+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLGyroBMI160DataReadyEvent.h" -#import "MBLGyroBMI160PackedDataReadyEvent.h" -#import "MBLGyroBMI160AxisReadyEvent.h" -#import "MBLNumericFormatter.h" - -@interface MBLGyroBMI160 () -@property (nonatomic) MBLRegister *gyroConfig; -@property (nonatomic) MBLRegister *gyroPowerModeTrigger; -@property (nonatomic) MBLRegister *powerModeStatus; -@end - -@implementation MBLGyroBMI160 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - // MBLGyro properties - self.dataReadyEvent = [[MBLGyroBMI160DataReadyEvent alloc] initWithGyro:self]; - if (moduleInfo.moduleRevision >= 1) { - self.packedDataReadyEvent = [[MBLGyroBMI160PackedDataReadyEvent alloc] initWithGyro:self]; - } - self.xAxisReadyEvent = [[MBLGyroBMI160AxisReadyEvent alloc] initWithGyro:self axis:MBLGyroAxisX]; - self.yAxisReadyEvent = [[MBLGyroBMI160AxisReadyEvent alloc] initWithGyro:self axis:MBLGyroAxisY]; - self.zAxisReadyEvent = [[MBLGyroBMI160AxisReadyEvent alloc] initWithGyro:self axis:MBLGyroAxisZ]; - - // Default settings - self.fullScaleRange = MBLGyroBMI160Range2000; - self.filterMode = MBLBMI160FilterModeNormal; - - // Registers - MBLRegister *gyroPowerMode = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.gyroConfig = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.gyroPowerModeTrigger = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - - self.globalEnable = gyroPowerMode; - } - return self; -} - -- (BFTask *)pullConfigAsync -{ - return [[self.gyroConfig readAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - MBLDataSample *result = t.result; - const bmi160_regs_gyr_t *regs = result.data.bytes; - self.fullScaleRange = regs->gyr_range.gyr_range; - return nil; - }]; -} - -- (BFTask *)performAsyncInitialization -{ - // First setup the gyro config - bmi160_regs_gyr_t regs = { 0 }; - regs.gyr_conf.gyr_odr = self.scaleSampleFrequency; - regs.gyr_conf.gyr_bwp = self.filterMode; - - regs.gyr_range.gyr_range = self.fullScaleRange; - - return [self.gyroConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_regs_gyr_t)]]; -} - -- (uint8_t)scaleSampleFrequency -{ - if (self.sampleFrequency > 1600) { - return BMI160_GYRO_OUTPUT_DATA_RATE_3200HZ; - } else if (self.sampleFrequency > 800) { - return BMI160_GYRO_OUTPUT_DATA_RATE_1600HZ; - } else if (self.sampleFrequency > 400) { - return BMI160_GYRO_OUTPUT_DATA_RATE_800HZ; - } else if (self.sampleFrequency > 200) { - return BMI160_GYRO_OUTPUT_DATA_RATE_400HZ; - } else if (self.sampleFrequency > 100) { - return BMI160_GYRO_OUTPUT_DATA_RATE_200HZ; - } else if (self.sampleFrequency > 50) { - return BMI160_GYRO_OUTPUT_DATA_RATE_100HZ; - } else if (self.sampleFrequency > 25) { - return BMI160_GYRO_OUTPUT_DATA_RATE_50HZ; - } else { - return BMI160_GYRO_OUTPUT_DATA_RATE_25HZ; - } -} - -@end diff --git a/MetaWear/Classes/Modules/Gyro/GyroBMI160/bmi160.h b/MetaWear/Classes/Modules/Gyro/GyroBMI160/bmi160.h deleted file mode 100644 index 6db65b6..0000000 --- a/MetaWear/Classes/Modules/Gyro/GyroBMI160/bmi160.h +++ /dev/null @@ -1,1302 +0,0 @@ -#ifndef __BMI160_H__ -#define __BMI160_H__ -/** - * bmi160.h - * MetaWear - * - * Created by Stephen Schiffli on 5/19/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#include - -#define BMI160_SPI_RD_MASK 0x80 /* for spi read transactions on SPI the - MSB has to be set */ - -#define BMI160_I2C_ADDR1 0x68 /**< I2C Address needs to be changed */ -#define BMI160_I2C_ADDR2 0x69 /**< I2C Address needs to be changed */ -#define BMI160_BMM150_I2C_ADDRESS 0x10 /**< I2C address of BMM150*/ - -#define BMI160_CHIP_ID 0xD1 - -#define BMI160_MAXIMUM_TIMEOUT ((uint8_t)10) - -#define E_BMI160_NULL_PTR ((int8_t)-127) -#define E_BMI160_COMM_RES ((int8_t)-1) -#define E_BMI160_OUT_OF_RANGE ((int8_t)-2) -#define E_BMI160_BUSY ((int8_t)-3) -#define SUCCESS ((uint8_t)0) -#define ERROR ((int8_t)-1) - -/* Constants */ -#define BMI160_NULL 0 -#define BMI160_DELAY_SETTLING_TIME 5 - -#define BMI160_USER_CHIP_ID_ADDR 0x00 -#define BMI160_USER_ERROR_ADDR 0x02 -#define BMI160_USER_PMU_STAT_ADDR 0x03 - -/*******************/ -/**\name MAG DATA REGISTERS */ -/*******************/ -#define BMI160_USER_DATA_0_ADDR 0x04 -#define BMI160_USER_DATA_1_ADDR 0x05 -#define BMI160_USER_DATA_2_ADDR 0x06 -#define BMI160_USER_DATA_3_ADDR 0x07 -#define BMI160_USER_DATA_4_ADDR 0x08 -#define BMI160_USER_DATA_5_ADDR 0x09 -#define BMI160_USER_DATA_6_ADDR 0x0A -#define BMI160_USER_DATA_7_ADDR 0x0B - -/*******************/ -/**\name GYRO DATA REGISTERS */ -/*******************/ -#define BMI160_USER_DATA_8_ADDR 0x0C -#define BMI160_USER_DATA_9_ADDR 0x0D -#define BMI160_USER_DATA_10_ADDR 0x0E -#define BMI160_USER_DATA_11_ADDR 0x0F -#define BMI160_USER_DATA_12_ADDR 0x10 -#define BMI160_USER_DATA_13_ADDR 0x11 - -/*******************/ -/**\name ACCEL DATA REGISTERS */ -/*******************/ -#define BMI160_USER_DATA_14_ADDR 0x12 -#define BMI160_USER_DATA_15_ADDR 0x13 -#define BMI160_USER_DATA_16_ADDR 0x14 -#define BMI160_USER_DATA_17_ADDR 0x15 -#define BMI160_USER_DATA_18_ADDR 0x16 -#define BMI160_USER_DATA_19_ADDR 0x17 - -/*******************/ -/**\name SENSOR TIME REGISTERS */ -/*******************/ -#define BMI160_USER_SENSORTIME_0_ADDR 0x18 -#define BMI160_USER_SENSORTIME_1_ADDR 0x19 -#define BMI160_USER_SENSORTIME_2_ADDR 0x1A - -/*******************/ -/**\name STATUS REGISTER FOR SENSOR STATUS FLAG */ -/*******************/ -#define BMI160_USER_STAT_ADDR 0x1B - -/*******************/ -/**\name INTERRUPY STATUS REGISTERS */ -/*******************/ -#define BMI160_USER_INTR_STAT_0_ADDR 0x1C -#define BMI160_USER_INTR_STAT_1_ADDR 0x1D -#define BMI160_USER_INTR_STAT_2_ADDR 0x1E -#define BMI160_USER_INTR_STAT_3_ADDR 0x1F - -/*******************/ -/**\name TEMPERATURE REGISTERS */ -/*******************/ -#define BMI160_USER_TEMPERATURE_0_ADDR 0x20 -#define BMI160_USER_TEMPERATURE_1_ADDR 0x21 - -/*******************/ -/**\name FIFO REGISTERS */ -/*******************/ -#define BMI160_USER_FIFO_LENGTH_0_ADDR 0x22 -#define BMI160_USER_FIFO_LENGTH_1_ADDR 0x23 -#define BMI160_USER_FIFO_DATA_ADDR 0x24 - -/***************************************************/ -/**\name ACCEL CONFIG REGISTERS FOR ODR, BANDWIDTH AND UNDERSAMPLING*/ -/******************************************************/ -#define BMI160_USER_ACCEL_CONFIG_ADDR 0x40 - -/*******************/ -/**\name ACCEL RANGE */ -/*******************/ -#define BMI160_USER_ACCEL_RANGE_ADDR 0x41 - -/***************************************************/ -/**\name GYRO CONFIG REGISTERS FOR ODR AND BANDWIDTH */ -/******************************************************/ -#define BMI160_USER_GYRO_CONFIG_ADDR 0x42 - -/*******************/ -/**\name GYRO RANGE */ -/*******************/ -#define BMI160_USER_GYRO_RANGE_ADDR 0x43 - -/***************************************************/ -/**\name MAG CONFIG REGISTERS FOR ODR*/ -/******************************************************/ -#define BMI160_USER_MAG_CONFIG_ADDR 0x44 - -/***************************************************/ -/**\name REGISTER FOR GYRO AND ACCEL DOWNSAMPLING RATES FOR FIFO*/ -/******************************************************/ -#define BMI160_USER_FIFO_DOWN_ADDR 0x45 - -/***************************************************/ -/**\name FIFO CONFIG REGISTERS*/ -/******************************************************/ -#define BMI160_USER_FIFO_CONFIG_0_ADDR 0x46 -#define BMI160_USER_FIFO_CONFIG_1_ADDR 0x47 - -/***************************************************/ -/**\name MAG INTERFACE REGISTERS*/ -/******************************************************/ -#define BMI160_USER_MAG_IF_0_ADDR 0x4B -#define BMI160_USER_MAG_IF_1_ADDR 0x4C -#define BMI160_USER_MAG_IF_2_ADDR 0x4D -#define BMI160_USER_MAG_IF_3_ADDR 0x4E -#define BMI160_USER_MAG_IF_4_ADDR 0x4F - -/***************************************************/ -/**\name INTERRUPT ENABLE REGISTERS*/ -/******************************************************/ -#define BMI160_USER_INTR_ENABLE_0_ADDR 0x50 -#define BMI160_USER_INTR_ENABLE_1_ADDR 0x51 -#define BMI160_USER_INTR_ENABLE_2_ADDR 0x52 -#define BMI160_USER_INTR_OUT_CTRL_ADDR 0x53 - -/***************************************************/ -/**\name LATCH DURATION REGISTERS*/ -/******************************************************/ -#define BMI160_USER_INTR_LATCH_ADDR 0x54 - -/***************************************************/ -/**\name MAP INTERRUPT 1 and 2 REGISTERS*/ -/******************************************************/ -#define BMI160_USER_INTR_MAP_0_ADDR 0x55 -#define BMI160_USER_INTR_MAP_1_ADDR 0x56 -#define BMI160_USER_INTR_MAP_2_ADDR 0x57 - -/***************************************************/ -/**\name DATA SOURCE REGISTERS*/ -/******************************************************/ -#define BMI160_USER_INTR_DATA_0_ADDR 0x58 -#define BMI160_USER_INTR_DATA_1_ADDR 0x59 - -/***************************************************/ -/**\name -INTERRUPT THRESHOLD, HYSTERESIS, DURATION, MODE CONFIGURATION REGISTERS*/ -/******************************************************/ -#define BMI160_USER_INTR_LOWHIGH_0_ADDR 0x5A -#define BMI160_USER_INTR_LOWHIGH_1_ADDR 0x5B -#define BMI160_USER_INTR_LOWHIGH_2_ADDR 0x5C -#define BMI160_USER_INTR_LOWHIGH_3_ADDR 0x5D -#define BMI160_USER_INTR_LOWHIGH_4_ADDR 0x5E -#define BMI160_USER_INTR_MOTION_0_ADDR 0x5F -#define BMI160_USER_INTR_MOTION_1_ADDR 0x60 -#define BMI160_USER_INTR_MOTION_2_ADDR 0x61 -#define BMI160_USER_INTR_MOTION_3_ADDR 0x62 -#define BMI160_USER_INTR_TAP_0_ADDR 0x63 -#define BMI160_USER_INTR_TAP_1_ADDR 0x64 -#define BMI160_USER_INTR_ORIENT_0_ADDR 0x65 -#define BMI160_USER_INTR_ORIENT_1_ADDR 0x66 -#define BMI160_USER_INTR_FLAT_0_ADDR 0x67 -#define BMI160_USER_INTR_FLAT_1_ADDR 0x68 - -/***************************************************/ -/**\name FAST OFFSET CONFIGURATION REGISTER*/ -/******************************************************/ -#define BMI160_USER_FOC_CONFIG_ADDR 0x69 - -/***************************************************/ -/**\name MISCELLANEOUS CONFIGURATION REGISTER*/ -/******************************************************/ -#define BMI160_USER_CONFIG_ADDR 0x6A - -/***************************************************/ -/**\name SERIAL INTERFACE SETTINGS REGISTER*/ -/******************************************************/ -#define BMI160_USER_IF_CONFIG_ADDR 0x6B - -/***************************************************/ -/**\name GYRO POWER MODE TRIGGER REGISTER */ -/******************************************************/ -#define BMI160_USER_PMU_TRIGGER_ADDR 0x6C - -/***************************************************/ -/**\name SELF_TEST REGISTER*/ -/******************************************************/ -#define BMI160_USER_SELF_TEST_ADDR 0x6D - -/***************************************************/ -/**\name SPI,I2C SELECTION REGISTER*/ -/******************************************************/ -#define BMI160_USER_NV_CONFIG_ADDR 0x70 - -/***************************************************/ -/**\name ACCEL AND GYRO OFFSET REGISTERS*/ -/******************************************************/ -#define BMI160_USER_OFFSET_0_ADDR 0x71 -#define BMI160_USER_OFFSET_1_ADDR 0x72 -#define BMI160_USER_OFFSET_2_ADDR 0x73 -#define BMI160_USER_OFFSET_3_ADDR 0x74 -#define BMI160_USER_OFFSET_4_ADDR 0x75 -#define BMI160_USER_OFFSET_5_ADDR 0x76 -#define BMI160_USER_OFFSET_6_ADDR 0x77 - -/***************************************************/ -/**\name STEP COUNTER INTERRUPT REGISTERS*/ -/******************************************************/ -#define BMI160_USER_STEP_COUNT_0_ADDR 0x78 -#define BMI160_USER_STEP_COUNT_1_ADDR 0x79 - -/***************************************************/ -/**\name STEP COUNTER CONFIGURATION REGISTERS*/ -/******************************************************/ -#define BMI160_USER_STEP_CONFIG_0_ADDR 0x7A -#define BMI160_USER_STEP_CONFIG_1_ADDR 0x7B - -/***************************************************/ -/**\name COMMAND REGISTER*/ -/******************************************************/ -#define BMI160_CMD_COMMANDS_ADDR 0x7E - -/***************************************************/ -/**\name PAGE REGISTERS*/ -/******************************************************/ -#define BMI160_CMD_EXT_MODE_ADDR 0x7F -#define BMI160_COM_C_TRIM_FIVE_ADDR 0x85 - -#define BMM150_MAX_RETRY_WAKEUP 5 -#define BMM150_POWER_OFF 0x00 -#define BMM150_POWER_ON 0x01 -#define BMM150_FORCE_MODE 0x02 -#define BMM150_POWER_ON_SUCCESS 0 -#define BMM150_POWER_ON_FAIL ((int8_t)-1) - -#define BMM150_CALIB_HEX_FOUR_THOUSAND 0x4000 -#define BMM150_CALIB_HEX_LACKS 0x100000 -#define BMM150_CALIB_HEX_A_ZERO 0xA0 -#define BMM150_DIG_X1 0 -#define BMM150_DIG_Y1 1 -#define BMM150_DIG_X2 2 -#define BMM150_DIG_Y3 3 -#define BMM150_DIG_XY1 4 -#define BMM150_DIG_XY2 5 -#define BMM150_DIG_Z1_LSB 6 -#define BMM150_DIG_Z1_MSB 7 -#define BMM150_DIG_Z2_LSB 8 -#define BMM150_DIG_Z2_MSB 9 -#define BMM150_DIG_DIG_Z3_LSB 10 -#define BMM150_DIG_DIG_Z3_MSB 11 -#define BMM150_DIG_DIG_Z4_LSB 12 -#define BMM150_DIG_DIG_Z4_MSB 13 -#define BMM150_DIG_DIG_XYZ1_LSB 14 -#define BMM150_DIG_DIG_XYZ1_MSB 15 - -/**************************************************************/ -/**\name STRUCTURE DEFINITIONS */ -/**************************************************************/ -/*! -* @brief bmi160 structure -* This structure holds all relevant information about bmi160 -*/ -typedef struct { - uint8_t chip_id; /**< chip id of BMI160 */ - uint8_t dev_addr; /**< device address of BMI160 */ - uint8_t mag_manual_enable; /**< used for check the mag manual/auto mode status */ -// BMI160_WR_FUNC_PTR;/**< bus write function pointer */ -// BMI160_RD_FUNC_PTR;/**< bus read function pointer */ -// BMI160_BRD_FUNC_PTR;/**< burst write function pointer */ -// void (*delay_msec)(BMI160_MDELAY_DATA_TYPE);/**< delay function pointer */ -} bmi160_t; - -typedef struct { - uint8_t fatal_err:1; - uint8_t err_code:4; - uint8_t i2c_fail_err:1; - uint8_t drop_cmd_err:1; - uint8_t mag_drdy_err:1; -} bmi160_reg_err_reg_t; - -typedef struct { - uint8_t mag_pmu_status:2; - uint8_t gyr_pmu_status:2; - uint8_t acc_pmu_status:2; - uint8_t :2; -} bmi160_reg_pmu_status_t; - -/*! - * @brief Structure containing bmm150 and akm09911 - * magnetometer values for x,y and - * z-axis in int16_t - */ -typedef struct { - int16_t x; /**< BMM150 and AKM09911 X raw data*/ - int16_t y; /**< BMM150 and AKM09911 Y raw data*/ - int16_t z; /**< BMM150 and AKM09911 Z raw data*/ -} bmi160_mag_data_t; - -/*! - * @brief Structure containing bmm150 xyz data and temperature - */ -typedef struct { - int16_t x; /**< BMM150 X raw data*/ - int16_t y; /**< BMM150 Y raw data*/ - int16_t z; /** -#import -@class MBLGyroData; -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Gyro axis - */ -typedef NS_ENUM(uint8_t, MBLGyroAxis) { - MBLGyroAxisX = 0, - MBLGyroAxisY = 1, - MBLGyroAxisZ = 2 -}; - -/** - Interface to an abstract on-board gyroscope. If you need more advanced - features then upcast to the specific gyroscope on your board, MBLGyroBMI160. - @see MBLGyroBMI160 - */ -@interface MBLGyro : MBLModule - -/** - The frequency, in hertz, for providing gyro samples to the event handlers. - - @discussion The value of this property is capped to minimum and maximum values; - the maximum value is determined by the maximum frequency supported by the hardware. - If your app is sensitive to the intervals of acceleration data, it should always - check the timestamps of the delivered MBLGyroData instances to determine the - true update interval. - */ -@property (nonatomic) double sampleFrequency; - -/** - Event representing a new gryo data sample complete with x, y, and z - axis data. This event will occur at the neareast hardware value - to sampleFrequency. Event callbacks will be provided an MBLGyroData object. - */ -@property (nonatomic, readonly) MBLEvent *dataReadyEvent; -/** - Event representing a new gryo data sample, but with 3 raw samples - packed into a single BLE packet at the link level. This makes streaming much - more efficient, but at a slight cost of latency. This should certainly be used - for streaming at speeds over 100Hz, but should not be used for logging. - */ -@property (nonatomic, readonly, nullable) MBLEvent *packedDataReadyEvent; -/** - Event representing a new gyro X-axis sample. This event will occur - at sampleFrequency. Event callbacks will be provided an MBLNumericData - object whose double value will be rotation rate in degrees per second. - */ -@property (nonatomic, readonly) MBLEvent *xAxisReadyEvent; -/** - Event representing a new gyro Y-axis sample. This event will occur - at sampleFrequency. Event callbacks will be provided an MBLNumericData - object whose double value will be rotation rate in degrees per second. - */ -@property (nonatomic, readonly) MBLEvent *yAxisReadyEvent; -/** - Event representing a new gyro Z-axis sample. This event will occur - at sampleFrequency. Event callbacks will be provided an MBLNumericData - object whose double value will be rotation rate in degrees per second. - */ -@property (nonatomic, readonly) MBLEvent *zAxisReadyEvent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Gyro/MBLGyro.m b/MetaWear/Classes/Modules/Gyro/MBLGyro.m deleted file mode 100644 index fa4fcbb..0000000 --- a/MetaWear/Classes/Modules/Gyro/MBLGyro.m +++ /dev/null @@ -1,66 +0,0 @@ -/** - * MBLGyro.m - * MetaWear - * - * Created by Stephen Schiffli on 5/19/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGyro.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLRegister+Private.h" -#import "MBLModule+Private.h" -#import "MBLNumericFormatter.h" - -@interface MBLGyro () -@property (nonatomic) MBLEvent *dataReadyEvent; -@property (nonatomic) MBLEvent *packedDataReadyEvent; -@property (nonatomic) MBLEvent *xAxisReadyEvent; -@property (nonatomic) MBLEvent *yAxisReadyEvent; -@property (nonatomic) MBLEvent *zAxisReadyEvent; -@end - -@implementation MBLGyro - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - return [[MBLGyroBMI160 alloc] initWithDevice:device moduleInfo:moduleInfo]; -} - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.sampleFrequency = 100; - } - return self; -} - -@end diff --git a/MetaWear/Classes/Modules/Gyro/MBLGyroData.h b/MetaWear/Classes/Modules/Gyro/MBLGyroData.h deleted file mode 100644 index 0197735..0000000 --- a/MetaWear/Classes/Modules/Gyro/MBLGyroData.h +++ /dev/null @@ -1,83 +0,0 @@ -/** - * MBLGyroData.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for a single accelerometer sensor reading - */ -@interface MBLGyroData : MBLDataSample - -/** - The X-axis rotation rate in degrees per second. The sign follows the right - hand rule: If the right hand is wrapped around the X axis such that the tip - of the thumb points toward positive X, a positive rotation is one toward - the tips of the other four fingers. - */ -@property (nonatomic, readonly) double x; -/** - The Y-axis rotation rate in degrees per second. The sign follows the right - hand rule: If the right hand is wrapped around the Y axis such that the tip - of the thumb points toward positive Y, a positive rotation is one toward - the tips of the other four fingers. - */ -@property (nonatomic, readonly) double y; -/** - The Z-axis rotation rate in degrees per second. The sign follows the right - hand rule: If the right hand is wrapped around the Z axis such that the tip - of the thumb points toward positive Z, a positive rotation is one toward - the tips of the other four fingers. - */ -@property (nonatomic, readonly) double z; - -@end - - -/** - Container for a single gyroscope reading corrected using - Sensor Fusion algorithims - */ -@interface MBLCorrectedGyroData : MBLGyroData -/** - Rating of calibration status for this data sample - */ -@property (nonatomic, readonly) MBLCalibrationAccuracy accuracy; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Gyro/MBLGyroData.m b/MetaWear/Classes/Modules/Gyro/MBLGyroData.m deleted file mode 100644 index ea2670b..0000000 --- a/MetaWear/Classes/Modules/Gyro/MBLGyroData.m +++ /dev/null @@ -1,89 +0,0 @@ -/** - * MBLGyroData.m - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGyroData+Private.h" -#import "MBLDataSample+Private.h" - -@interface MBLGyroData() -@property (nonatomic) double x, y, z; -@end - -@implementation MBLGyroData - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.x = x; - self.y = y; - self.z = z; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%f,%f,%f", self.x, self.y, self.z]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%f,%f,%f\n", self.timestamp.timeIntervalSince1970, self.x, self.y, self.z]; -} - -@end - - -@interface MBLCorrectedGyroData() -@property (nonatomic) MBLCalibrationAccuracy accuracy; -@end - -@implementation MBLCorrectedGyroData - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z accuracy:(MBLCalibrationAccuracy)accuracy timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithX:x y:y z:z timestamp:timestamp data:data]; - if (self) { - self.accuracy = accuracy; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %f,%f,%f", MBLCalibrationAccuracyString(self.accuracy), self.x, self.y, self.z]; -} - -@end diff --git a/MetaWear/Classes/Modules/HapticBuzzer/MBLHapticBuzzer.h b/MetaWear/Classes/Modules/HapticBuzzer/MBLHapticBuzzer.h deleted file mode 100644 index b5fd5ff..0000000 --- a/MetaWear/Classes/Modules/HapticBuzzer/MBLHapticBuzzer.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLHapticBuzzer.h - * MetaWear - * - * Created by Stephen Schiffli on 8/2/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to external haptic or buzzers - */ -@interface MBLHapticBuzzer : MBLModule - -/** - Turn on Haptic Driver. - @param dcycle Duty cycle (0-248), relative strength of buzz - @param pwidth Duration of buzz in mSec - @param completion Callback when the buzz is complete - */ -- (BFTask *)startHapticWithDutyCycleAsync:(uint8_t)dcycle pulseWidth:(uint16_t)pwidth completion:(nullable MBLVoidHandler)completion NS_SWIFT_NAME(startHapticAsync(dutyCycle:pulseWidth:completion:)); - -/** - Turn on Buzzer Driver. - @param pwidth Duration of buzz in mSec - @param completion Callback when the buzz is complete - */ -- (BFTask *)startBuzzerWithPulseWidthAsync:(uint16_t)pwidth completion:(nullable MBLVoidHandler)completion NS_SWIFT_NAME(startBuzzerAsync(pulseWidth:completion:)); - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/HapticBuzzer/MBLHapticBuzzer.m b/MetaWear/Classes/Modules/HapticBuzzer/MBLHapticBuzzer.m deleted file mode 100644 index 37beece..0000000 --- a/MetaWear/Classes/Modules/HapticBuzzer/MBLHapticBuzzer.m +++ /dev/null @@ -1,88 +0,0 @@ -/** - * MBLHapticBuzzer.m - * MetaWear - * - * Created by Stephen Schiffli on 8/2/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLHapticBuzzer.h" -#import "MBLRegister+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLMetaWearManager+Private.h" - -@interface MBLHapticBuzzer () -@property (nonatomic) MBLRegister *pulse; -@end - -@implementation MBLHapticBuzzer - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.pulse = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - } - return self; -} - -- (BFTask *)startHapticWithDutyCycleAsync:(uint8_t)dcycle pulseWidth:(uint16_t)pwidth completion:(MBLVoidHandler)completion -{ - //Byte 3: 0: 2kHz, 1: 4kHz (4kHz for Buzzer, 2kHz for Motor) - uint8_t data[] = { dcycle, (pwidth & 0xff), (pwidth >> 8), 0x00 }; - int dataSize = sizeof(data) / sizeof(data[0]); - - if (completion) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, pwidth * NSEC_PER_MSEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - [[MBLMetaWearManager dispatchQueue] addOperationWithBlock:^{ - completion(); - }]; - }); - } - return [self.pulse writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; -} - -- (BFTask *)startBuzzerWithPulseWidthAsync:(uint16_t)pwidth completion:(MBLVoidHandler)completion -{ - uint8_t data[] = { 124, (pwidth & 0xff), (pwidth >> 8), 0x01 }; - int dataSize = sizeof(data) / sizeof(data[0]); - - if (completion) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, pwidth * NSEC_PER_MSEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - [[MBLMetaWearManager dispatchQueue] addOperationWithBlock:^{ - completion(); - }]; - }); - } - return [self.pulse writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; -} - - -@end diff --git a/MetaWear/Classes/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280.h b/MetaWear/Classes/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280.h deleted file mode 100644 index aae4a8f..0000000 --- a/MetaWear/Classes/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280.h +++ /dev/null @@ -1,73 +0,0 @@ -/** - * MBLHygrometerBME280.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Hygrometer oversampling rates - */ -typedef NS_ENUM(uint8_t, MBLHygrometerBME280Oversample) { - MBLHygrometerBME280Oversample1X = 1, // default - MBLHygrometerBME280Oversample2X = 2, - MBLHygrometerBME280Oversample4X = 3, - MBLHygrometerBME280Oversample8X = 4, - MBLHygrometerBME280Oversample16X = 5, -}; - -/** - Interface to a BME280 humidity sensor - */ -@interface MBLHygrometerBME280 : MBLHygrometer - -/** - Use this to set humidity sampling mode, higher values produce more accurate - results but will use more power. - */ -@property (nonatomic) MBLHygrometerBME280Oversample humidityOversampling; - -/** - Data representing the relative humidity of the environment. - Event callbacks will be provided an MBLNumericData object whose - double value will be percent relative humidity [0.0-100.0]. - - @waring Period of event will depend on standbyTime from the MBLBarometerBMP280. TODO: Remove this coupling - */ -@property (nonatomic, readonly) MBLEvent *periodicHumidity; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280.m b/MetaWear/Classes/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280.m deleted file mode 100644 index 6d67751..0000000 --- a/MetaWear/Classes/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280.m +++ /dev/null @@ -1,72 +0,0 @@ -/** - * MBLHygrometerBME280.m - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLHygrometerBME280.h" -#import "MBLHygrometer+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLHygrometerBME280PeriodicHumidityEvent.h" - -@interface MBLHygrometerBME280 () -@property (nonatomic) MBLEvent *periodicHumidity; -@property (nonatomic) MBLRegister *mode; -@end - -@implementation MBLHygrometerBME280 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.humidity = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initDoubleWithLength:4 isSigned:NO scale:1.0 / 1024.0] identifier:@"relative-humidity"]; - - self.humidityOversampling = MBLHygrometerBME280Oversample1X; - - self.periodicHumidity = [[MBLHygrometerBME280PeriodicHumidityEvent alloc] initWithHygrometer:self]; - self.mode = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - uint8_t params = self.humidityOversampling; - return [self.mode writeDataAsync:[NSData dataWithBytes:¶ms length:sizeof(params)]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Hygrometer/MBLHygrometer.h b/MetaWear/Classes/Modules/Hygrometer/MBLHygrometer.h deleted file mode 100644 index 4863057..0000000 --- a/MetaWear/Classes/Modules/Hygrometer/MBLHygrometer.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * MBLHygrometer.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to an abstract hygrometer sensor. If you need more advanced - features then upcast to the specific sensor on your board, MBLHygrometerBME280. - @see MBLHygrometerBME280 - */ -@interface MBLHygrometer : MBLModule - -/** - Data representing the relative humidity of the environment. - Event callbacks will be provided an MBLNumericData object whose - double value will be percent relative humidity [0.0-100.0]. - */ -@property (nonatomic, readonly, nullable) MBLData *humidity; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Classes/Modules/Hygrometer/MBLHygrometer.m b/MetaWear/Classes/Modules/Hygrometer/MBLHygrometer.m deleted file mode 100644 index c5e03cd..0000000 --- a/MetaWear/Classes/Modules/Hygrometer/MBLHygrometer.m +++ /dev/null @@ -1,53 +0,0 @@ -/** - * MBLHygrometer.m - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLHygrometer+Private.h" -#import "MBLHygrometerBME280.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" - -@interface MBLHygrometer () -@property (nonatomic) MBLData *humidity; -@end - -@implementation MBLHygrometer - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - return [[MBLHygrometerBME280 alloc] initWithDevice:device moduleInfo:moduleInfo]; -} - -@end \ No newline at end of file diff --git a/MetaWear/Classes/Modules/I2C/MBLI2C.h b/MetaWear/Classes/Modules/I2C/MBLI2C.h deleted file mode 100644 index 01da668..0000000 --- a/MetaWear/Classes/Modules/I2C/MBLI2C.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * MBLI2C.h - * MetaWear - * - * Created by Stephen Schiffli on 1/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -@class MBLDataSample; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface for reading/writing externally connected I2C devices. - */ -DEPRECATED_MSG_ATTRIBUTE("Use MBLSerial instead") -@interface MBLI2C : MBLModule - -- (nullable MBLI2CData *)dataAtDeviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length DEPRECATED_MSG_ATTRIBUTE("Use MBLSerial instead"); - -- (nullable MBLI2CData *)numberAtDeviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length - isSigned:(BOOL)isSigned DEPRECATED_MSG_ATTRIBUTE("Use MBLSerial instead"); - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/I2C/MBLI2C.m b/MetaWear/Classes/Modules/I2C/MBLI2C.m deleted file mode 100644 index c46982d..0000000 --- a/MetaWear/Classes/Modules/I2C/MBLI2C.m +++ /dev/null @@ -1,57 +0,0 @@ -/** - * MBLI2C.m - * MetaWear - * - * Created by Stephen Schiffli on 1/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLI2C.h" -#import "MBLModule+Private.h" -#import "MBLRegister+Private.h" - -@implementation MBLI2C - -- (MBLI2CData *)dataAtDeviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length -{ - return nil; -} - -- (MBLI2CData *)numberAtDeviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length - isSigned:(BOOL)isSigned -{ - return nil; -} - -@end \ No newline at end of file diff --git a/MetaWear/Classes/Modules/LED/MBLLED.h b/MetaWear/Classes/Modules/LED/MBLLED.h deleted file mode 100644 index c01cb46..0000000 --- a/MetaWear/Classes/Modules/LED/MBLLED.h +++ /dev/null @@ -1,141 +0,0 @@ -/** - * MBLLED.h - * MetaWear - * - * Created by Stephen Schiffli on 8/1/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Specific color channel for the LED - */ -typedef NS_ENUM(uint8_t, MBLLEDColorChannel) { - MBLLEDColorChannelGreen = 0, - MBLLEDColorChannelRed = 1, - MBLLEDColorChannelBlue = 2 -}; - -/** - Interface to on-board LED - */ -@interface MBLLED : MBLModule - -/** - Display a specific color on the LED - @param color Which color the LED should be - @param intensity Scale from 0-1.0 on how bright the LED should be - */ -- (BFTask *)setLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity; - -/** - Flash a specific color on the LED - @param color Which color the LED should flash - @param intensity Scale from 0-1.0 on how bright the LED should be - */ -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity; - -/** - Flash a specific color on the LED - @param color Which color the LED should flash - @param intensity Scale from 0-1.0 on how bright the LED should be - @param numberOfFlashes Number of times LED will flash before turning off - */ -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity numberOfFlashes:(uint8_t)numberOfFlashes; - -/** - Flash a specific color on the LED - @param color Which color the LED should flash - @param intensity Scale from 0-1.0 on how bright the LED should be - @param otime Time in mSec LED spends on - @param period Flash period lenght in mSec - */ -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity onTime:(uint16_t)otime andPeriod:(uint16_t)period; - -/** - Flash a specific color on the LED - @param color Which color the LED should flash - @param intensity Scale from 0-1.0 on how bright the LED should be - @param otime Time in mSec LED spends on - @param period Flash period lenght in mSec - @param numberOfFlashes Number of times LED will flash before turning off - */ -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity onTime:(uint16_t)otime period:(uint16_t)period numberOfFlashes:(uint8_t)numberOfFlashes; - - -#pragma mark - Advanced Settings -// These are typically not needed, see the simpler APIs above - -/** - Program one color channel of the LED, there are 3 total (red, blue, green). - Each one is programmed individually and then the whole LED is enabled by a - called to setLEDOn:withOptions: - @param channel Color channel being configured - @param onint ON Intensity (0-31) - @param ofint OFF Intensity (0-31) - @param rtime Time Rise (used for Flash mode only) - @param ftime Time Fall (used for Flash mode only) - @param otime Time On - @param period Time Period - @param offset Time Offset - @param repeat Repeat Count (0-254, 255: Forever) - */ -- (BFTask *)setLEDModeWithColorChannelAsync:(MBLLEDColorChannel)channel - onIntensity:(uint8_t)onint - offIntensity:(uint8_t)ofint - riseTime:(uint16_t)rtime - fallTime:(uint16_t)ftime - onTime:(uint16_t)otime - period:(uint16_t)period - offset:(uint16_t)offset - repeatCount:(uint8_t)repeat; - -/** - Change global LED state. - @param on YES turns LED on, NO, turns LED off - @param mode If on == YES then (0: pause, 1: play), - if on == NO then (0: Stop, 1: Stop and reset channels) - */ -- (BFTask *)setLEDOnAsync:(BOOL)on withOptions:(uint8_t)mode; - -/** - Certain hardware has additional modes for advanced features - @param data Bytes to write to the secondary mode register - */ -- (BFTask *)writeSecondaryMode:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/LED/MBLLED.m b/MetaWear/Classes/Modules/LED/MBLLED.m deleted file mode 100644 index 62d162e..0000000 --- a/MetaWear/Classes/Modules/LED/MBLLED.m +++ /dev/null @@ -1,270 +0,0 @@ -/** - * MBLLED.m - * MetaWear - * - * Created by Stephen Schiffli on 8/1/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLED+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" - -@interface MBLLED() -@property (nonatomic) MBLRegister *play; -@property (nonatomic) MBLRegister *stop; -@property (nonatomic) MBLRegister *mode; -@property (nonatomic) MBLRegister *secondaryMode; -@end - -typedef struct __attribute__((packed)) { - uint8_t channelCount; - uint8_t secondaryModeLength; -} mw_led_module_info; - -@implementation MBLLED - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.play = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.stop = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.mode = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - if (moduleInfo.moduleRevision >= 1) { - mw_led_module_info *info = (mw_led_module_info *)moduleInfo.moduleData.bytes; - self.secondaryMode = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLFormat alloc] initEncodedDataWithLength:info->secondaryModeLength]]; - } - } - return self; -} - -- (BFTask *)setLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity -{ - if (intensity < 0.0 || intensity > 1.0) { - [NSException raise:@"Invalid intensity value" - format:@"intensity of %f is invalid, valid range is [0, 1.0]", intensity]; - } - int scaledIntensity = (intensity * 31.0); - CGFloat red, blue, green; - static const uint16_t rtime = 0; - static const uint16_t ftime = 0; - static const uint16_t otime = 0x0800; - static const uint16_t period = 0x0800; - static const uint16_t offset = 0; - static const uint8_t repeat = 0xFF; - - MBLMetaWear *device = self.device; - [device incrementCount]; - BFTask *head = [BFTask taskWithResult:nil]; -#if TARGET_OS_IOS || TARGET_OS_TV - [color getRed:&red green:&green blue:&blue alpha:nil]; -#else - NSColor *rgbColor = [color colorUsingColorSpace:[NSColorSpace sRGBColorSpace]]; - red = rgbColor.redComponent; - green = rgbColor.greenComponent; - blue = rgbColor.blueComponent; -#endif - - BOOL isOn = NO; - int scaledRed = red * scaledIntensity; - int scaledBlue = blue * scaledIntensity; - int scaledGreen = green * scaledIntensity; - - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDOnAsync:NO withOptions:1]; - }]; - - if (scaledRed) { - isOn = YES; - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDModeWithColorChannelAsync:MBLLEDColorChannelRed - onIntensity:scaledRed - offIntensity:scaledRed - 1 - riseTime:rtime fallTime:ftime onTime:otime period:period offset:offset repeatCount:repeat]; - }]; - } - if (scaledGreen) { - isOn = YES; - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDModeWithColorChannelAsync:MBLLEDColorChannelGreen - onIntensity:scaledGreen - offIntensity:scaledGreen - 1 - riseTime:rtime fallTime:ftime onTime:otime period:period offset:offset repeatCount:repeat]; - }]; - } - if (scaledBlue) { - isOn = YES; - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDModeWithColorChannelAsync:MBLLEDColorChannelBlue - onIntensity:scaledBlue - offIntensity:scaledBlue - 1 - riseTime:rtime fallTime:ftime onTime:otime period:period offset:offset repeatCount:repeat]; - }]; - } - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDOnAsync:isOn withOptions:1]; - }]; - - head = [head continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; - return head; -} - -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity -{ - return [self flashLEDColorAsync:color withIntensity:intensity onTime:200 andPeriod:800]; -} - -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity numberOfFlashes:(uint8_t)numberOfFlashes -{ - return [self flashLEDColorAsync:color withIntensity:intensity onTime:200 period:800 repeat:numberOfFlashes offIsZero:YES]; -} - -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity onTime:(uint16_t)otime andPeriod:(uint16_t)period -{ - return [self flashLEDColorAsync:color withIntensity:intensity onTime:otime period:period repeat:0xff offIsZero:NO]; -} - -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity onTime:(uint16_t)otime period:(uint16_t)period numberOfFlashes:(uint8_t)numberOfFlashes -{ - return [self flashLEDColorAsync:color withIntensity:intensity onTime:otime period:period repeat:numberOfFlashes offIsZero:NO]; -} - -- (BFTask *)flashLEDColorAsync:(MBLColor *)color withIntensity:(CGFloat)intensity onTime:(uint16_t)otime period:(uint16_t)period repeat:(uint8_t)repeat offIsZero:(BOOL)offIsZero -{ - if (intensity < 0.0 || intensity > 1.0) { - [NSException raise:@"Invalid intensity value" - format:@"intensity of %f is invalid, valid range is [0, 1.0]", intensity]; - } - - int scaledIntensity = (intensity * 31.0); - CGFloat red, blue, green; - const uint16_t rtime = otime / 2; - const uint16_t ftime = otime / 2; - static const uint16_t offset = 0; - - MBLMetaWear *device = self.device; - [device incrementCount]; - BFTask *head = [BFTask taskWithResult:nil]; -#if TARGET_OS_IOS || TARGET_OS_TV - [color getRed:&red green:&green blue:&blue alpha:nil]; -#else - NSColor *rgbColor = [color colorUsingColorSpace:[NSColorSpace sRGBColorSpace]]; - red = rgbColor.redComponent; - green = rgbColor.greenComponent; - blue = rgbColor.blueComponent; -#endif - BOOL isOn = NO; - int scaledRed = red * scaledIntensity; - int scaledBlue = blue * scaledIntensity; - int scaledGreen = green * scaledIntensity; - - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDOnAsync:NO withOptions:1]; - }]; - - if (scaledRed) { - isOn = YES; - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDModeWithColorChannelAsync:MBLLEDColorChannelRed - onIntensity:scaledRed - offIntensity:offIsZero ? 0 : scaledRed == 1 ? 0 : 1 - riseTime:rtime fallTime:ftime onTime:otime period:period offset:offset repeatCount:repeat]; - }]; - } - if (scaledGreen) { - isOn = YES; - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDModeWithColorChannelAsync:MBLLEDColorChannelGreen - onIntensity:scaledGreen - offIntensity:offIsZero ? 0 : scaledGreen == 1 ? 0 : 1 - riseTime:rtime fallTime:ftime onTime:otime period:period offset:offset repeatCount:repeat]; - }]; - } - if (scaledBlue) { - isOn = YES; - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDModeWithColorChannelAsync:MBLLEDColorChannelBlue - onIntensity:scaledBlue - offIntensity:offIsZero ? 0 : scaledBlue == 1 ? 0 : 1 - riseTime:rtime fallTime:ftime onTime:otime period:period offset:offset repeatCount:repeat]; - }]; - } - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setLEDOnAsync:isOn withOptions:1]; - }]; - - head = [head continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [device decrementCount]; - return task; - }]; - return head; -} - -- (BFTask *)setLEDModeWithColorChannelAsync:(MBLLEDColorChannel)channel - onIntensity:(uint8_t)onint - offIntensity:(uint8_t)ofint - riseTime:(uint16_t)rtime - fallTime:(uint16_t)ftime - onTime:(uint16_t)otime - period:(uint16_t)period - offset:(uint16_t)offset - repeatCount:(uint8_t)repeat -{ - mw_led_flash_params_t params = { 0 }; - params.channel = channel; - params.mode = 2; - params.on_intensity = onint; - params.off_intensity = ofint; - params.time_rise = rtime; - params.time_on = otime; - params.time_fall = ftime; - params.time_period = period; - params.time_offset = offset; - params.repeat_count = repeat; - return [self.mode writeDataAsync:[NSData dataWithBytes:¶ms length:sizeof(mw_led_flash_params_t)]]; -} - -- (BFTask *)setLEDOnAsync:(BOOL)on withOptions:(uint8_t)mode -{ - MBLRegister *reg = on ? self.play : self.stop; - return [reg writeByteAsync:mode]; -} - -- (BFTask *)writeSecondaryMode:(NSData *)data -{ - return self.secondaryMode ? [self.secondaryMode writeDataAsync:data] : [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain code:kMBLErrorOperationInvalid userInfo:@{NSLocalizedDescriptionKey : @"LED doesn't have secondaryMode."}]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometer.h b/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometer.h deleted file mode 100644 index 35f1839..0000000 --- a/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometer.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * MBLMagnetometer.h - * MetaWear - * - * Created by Stephen Schiffli on 1/5/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLMagnetometerData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to an abstract magnetometer. If you need more advanced - features then upcast to the specific sensor on your board, MBLMagnetometerBMM150. - @see MBLMagnetometerBMM150 - */ -@interface MBLMagnetometer : MBLModule - -/** - Data representing the magnetic field measured by magnetometer. - Event callbacks will be provided an MBLMagnetometerData object. - NOT YET IMPLEMENTED - */ -@property (nonatomic, readonly, nullable) MBLData *magneticField; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometer.m b/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometer.m deleted file mode 100644 index d88d98f..0000000 --- a/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometer.m +++ /dev/null @@ -1,59 +0,0 @@ -/** - * MBLMagnetometer.m - * MetaWear - * - * Created by Stephen Schiffli on 1/5/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMagnetometer+Private.h" -#import "MBLMagnetometerBMM150.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" - -@interface MBLMagnetometer () -@property (nonatomic) MBLData *magneticField; -@end - -@implementation MBLMagnetometer -@synthesize magneticField = _noencode_magneticField; // TODO: Once we implement magneticField we can remove this - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - return [[MBLMagnetometerBMM150 alloc] initWithDevice:device moduleInfo:moduleInfo]; -} - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - return self; -} - -@end diff --git a/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometerData.h b/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometerData.h deleted file mode 100644 index 13515c8..0000000 --- a/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometerData.h +++ /dev/null @@ -1,74 +0,0 @@ -/** - * MBLMagnetometerData.h - * MetaWear - * - * Created by Stephen Schiffli on 1/5/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for a single magnetometer sensor reading - */ -@interface MBLMagnetometerData : MBLDataSample - -/** - Magnetic field along X axis in Tesla's - */ -@property (nonatomic, readonly) double x; -/** - Magnetic field along Y axis in Tesla's - */ -@property (nonatomic, readonly) double y; -/** - Magnetic field along Z axis in Tesla's - */ -@property (nonatomic, readonly) double z; - -@end - - -/** - Container for a single magnetometer reading corrected using - Sensor Fusion algorithims - */ -@interface MBLCorrectedMagnetometeData : MBLMagnetometerData -/** - Rating of calibration status for this data sample - */ -@property (nonatomic, readonly) MBLCalibrationAccuracy accuracy; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometerData.m b/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometerData.m deleted file mode 100644 index cda9eba..0000000 --- a/MetaWear/Classes/Modules/Magnetometer/MBLMagnetometerData.m +++ /dev/null @@ -1,89 +0,0 @@ -/** - * MBLMagnetometerData.m - * MetaWear - * - * Created by Stephen Schiffli on 1/5/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMagnetometerData+Private.h" -#import "MBLDataSample+Private.h" - -@interface MBLMagnetometerData() -@property (nonatomic) double x, y, z; -@end - -@implementation MBLMagnetometerData - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.x = x; - self.y = y; - self.z = z; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%f,%f,%f", self.x, self.y, self.z]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%f,%f,%f\n", self.timestamp.timeIntervalSince1970, self.x, self.y, self.z]; -} - -@end - - -@interface MBLCorrectedMagnetometeData() -@property (nonatomic) MBLCalibrationAccuracy accuracy; -@end - -@implementation MBLCorrectedMagnetometeData - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z accuracy:(MBLCalibrationAccuracy)accuracy timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithX:x y:y z:z timestamp:timestamp data:data]; - if (self) { - self.accuracy = accuracy; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %f,%f,%f", MBLCalibrationAccuracyString(self.accuracy), self.x, self.y, self.z]; -} - -@end diff --git a/MetaWear/Classes/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150.h b/MetaWear/Classes/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150.h deleted file mode 100644 index 6104d81..0000000 --- a/MetaWear/Classes/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150.h +++ /dev/null @@ -1,76 +0,0 @@ -/** - * MBLMagnetometerBMM150.h - * MetaWear - * - * Created by Stephen Schiffli on 1/6/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Magnetometer power presets - */ -typedef NS_ENUM(uint8_t, MBLMagnetometerBMM150Preset) { - MBLMagnetometerBMM150PresetLowPower = 0, - MBLMagnetometerBMM150PresetRegular = 1, - MBLMagnetometerBMM150PresetEnhancedRegular = 2, - MBLMagnetometerBMM150PresetHighAccuracy = 3 -}; - -/** - Interface to a BMM150 magnetometer sensor - */ -@interface MBLMagnetometerBMM150 : MBLMagnetometer - -/** - This affects the power, accuracy, and frequency of periodicMagneticField event - */ -@property (nonatomic) MBLMagnetometerBMM150Preset powerPreset; - - -/** - Data representing the periodic magnetic field measured by magnetometer. - Event callbacks will be provided an MBLMagnetometerData object. - */ -@property (nonatomic, readonly) MBLEvent *periodicMagneticField; -/** - Event representing a new magnetometer data sample, but with 3 raw samples - packed into a single BLE packet at the link level. This makes streaming much - more efficient, but at a slight cost of latency and loss of timestamp resolution. - This is usefull for streaming at speeds over 100Hz, but can not be used for logging. - */ -@property (nonatomic, readonly, nullable) MBLEvent *packedPeriodicMagneticField; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150.m b/MetaWear/Classes/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150.m deleted file mode 100644 index ea54c5f..0000000 --- a/MetaWear/Classes/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150.m +++ /dev/null @@ -1,170 +0,0 @@ -/** - * MBLMagnetometerBMM150.m - * MetaWear - * - * Created by Stephen Schiffli on 1/6/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMagnetometerBMM150+Private.h" -#import "MBLMagnetometer+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h" -#import "MBLMagnetometerBMM150Format.h" -#import "MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h" -#import "MBLLogger.h" - - -@interface MBLMagnetometerBMM150 () -@property (nonatomic) MBLRegister *magPowerMode; -@property (nonatomic) MBLRegister *dataRate; -@property (nonatomic) MBLRegister *dataRepetitions; -@property (nonatomic) MBLEvent *periodicMagneticField; -@property (nonatomic) MBLEvent *packedPeriodicMagneticField; - -@property (nonatomic) MBLMagnetometerBMM150SampleFrequency sampleFrequency; -@end - -@implementation MBLMagnetometerBMM150 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.magneticField = nil; - - self.magPowerMode = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.dataRate = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLNumericFormatter alloc] initEncodedDataWithLength:1]]; - self.dataRepetitions = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLNumericFormatter alloc] initEncodedDataWithLength:2]]; - self.periodicMagneticField = [[MBLMagnetometerBMM150PeriodicMagneticFieldEvent alloc] initWithMagnetometer:self]; - if (moduleInfo.moduleRevision >= 1) { - self.packedPeriodicMagneticField = [[MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent alloc] initWithMagnetometer:self]; - } - // From Matt: The "Low power preset" should be the MetaWear default in the apps. - self.powerPreset = MBLMagnetometerBMM150PresetLowPower; - } - return self; -} - -- (MBLData *)magneticField -{ - MBLLog(MBLLogLevelWarning, @"magneticField not yet implemented, please use periodicMagneticField instead"); - return nil; -} - -- (void)setPowerPreset:(MBLMagnetometerBMM150Preset)powerPreset -{ - if (_powerPreset == powerPreset) { - return; - } - - _powerPreset = powerPreset; - // See Table 3: Recommended Presets - switch (powerPreset) { - case MBLMagnetometerBMM150PresetLowPower: - self.sampleFrequency = MBLMagnetometerBMM150SampleFrequency10Hz; - break; - case MBLMagnetometerBMM150PresetRegular: - self.sampleFrequency = MBLMagnetometerBMM150SampleFrequency10Hz; - break; - case MBLMagnetometerBMM150PresetEnhancedRegular: - self.sampleFrequency = MBLMagnetometerBMM150SampleFrequency10Hz; - break; - case MBLMagnetometerBMM150PresetHighAccuracy: - self.sampleFrequency = MBLMagnetometerBMM150SampleFrequency20Hz; - break; - } -} - -- (BFTask *)performAsyncInitialization -{ - // Table 3: Recommended Presets - // | Preset | Rep X/Y | Rep Z | ODR | - // -------------------------------------------------- - // | Low Power | 3 | 3 | 10 | - // | Regular | 9 | 15 | 10 | - // | Enhanced | 15 | 27 | 10 | - // | High Accur | 47 | 83 | 20 | - uint8_t repXY; - uint8_t repZ; - switch (self.powerPreset) { - case MBLMagnetometerBMM150PresetLowPower: - repXY = 3; - repZ = 3; - break; - case MBLMagnetometerBMM150PresetRegular: - repXY = 9; - repZ = 15; - break; - case MBLMagnetometerBMM150PresetEnhancedRegular: - repXY = 15; - repZ = 27; - break; - case MBLMagnetometerBMM150PresetHighAccuracy: - repXY = 47; - repZ = 83; - break; - } - - uint8_t data[] = { (repXY - 1) / 2 , (repZ - 1) }; - int dataSize = sizeof(data) / sizeof(data[0]); - uint8_t dataRate = self.sampleFrequency; - NSData *finalData = [NSData dataWithBytes:&data length:dataSize]; - - return [[[self.magPowerMode writeByteAsync:0] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.dataRepetitions writeDataAsync:finalData]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.dataRate writeByteAsync:dataRate]; - }]; -} - -- (BFTask *)performAsyncDeinitialization -{ - if (self.moduleInfo.moduleRevision >= 2) { - return [self.magPowerMode writeByteAsync:2]; - } else { - return [super performAsyncDeinitialization]; - } -} - -- (BFTask *)performAsyncActivation -{ - return [self.magPowerMode writeByteAsync:1]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [self.magPowerMode writeByteAsync:0]; -} - -@end diff --git a/MetaWear/Classes/Modules/MechanicalSwitch/MBLMechanicalSwitch.h b/MetaWear/Classes/Modules/MechanicalSwitch/MBLMechanicalSwitch.h deleted file mode 100644 index d178792..0000000 --- a/MetaWear/Classes/Modules/MechanicalSwitch/MBLMechanicalSwitch.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLMechanicalSwitch.h - * MetaWear - * - * Created by Stephen Schiffli on 8/1/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to on-board switch (pushbutton) - */ -@interface MBLMechanicalSwitch : MBLModule - -/** - Data representing the current state of the switch. - Event callbacks will be provided an MBLNumericData object, where a bool value of - YES means pressed, and NO means released. - */ -@property (nonatomic, readonly) MBLData *switchValue; - -/** - Event representing a change in the push button state (pressed/depressed). - Event callbacks will be provided an MBLNumericData object, where a bool value of - YES means pressed, and NO means released. - */ -@property (nonatomic, readonly) MBLEvent *switchUpdateEvent; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/MechanicalSwitch/MBLMechanicalSwitch.m b/MetaWear/Classes/Modules/MechanicalSwitch/MBLMechanicalSwitch.m deleted file mode 100644 index 5ddb0a3..0000000 --- a/MetaWear/Classes/Modules/MechanicalSwitch/MBLMechanicalSwitch.m +++ /dev/null @@ -1,62 +0,0 @@ -/** - * MBLMechanicalSwitch.m - * MetaWear - * - * Created by Stephen Schiffli on 8/1/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMechanicalSwitch.h" -#import "MBLRegister+Private.h" -#import "MBLEvent+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLDataSample+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLNumericData.h" -#import "MBLData+Private.h" - -@interface MBLMechanicalSwitch () -@property (nonatomic) MBLData *switchValue; -@property (nonatomic) MBLEvent *switchUpdateEvent; -@end - -@implementation MBLMechanicalSwitch - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.switchValue = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO] identifier:@"switch"]; - self.switchUpdateEvent = [[MBLEvent alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO] identifier:@"switch"]; - } - return self; -} - -@end diff --git a/MetaWear/Classes/Modules/Neopixel/MBLNeopixel.h b/MetaWear/Classes/Modules/Neopixel/MBLNeopixel.h deleted file mode 100644 index e985835..0000000 --- a/MetaWear/Classes/Modules/Neopixel/MBLNeopixel.h +++ /dev/null @@ -1,88 +0,0 @@ -/** - * MBLNeopixel.h - * MetaWear - * - * Created by Stephen Schiffli on 8/12/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import - -@class MBLNeopixelStrand; - -NS_ASSUME_NONNULL_BEGIN - -/** - Coloring ordering of the NeoPixel strand (depends on the LED driver chip) - */ -typedef NS_ENUM(uint8_t, MBLColorOrdering) { - MBLColorOrderingRGB = 0, - MBLColorOrderingRBG = 1, - MBLColorOrderingGRB = 2, - MBLColorOrderingGBR = 3 -}; - -/** - Speed of the NeoPixel strand (depends on the LED driver chip) - */ -typedef NS_ENUM(uint8_t, MBLStrandSpeed) { - MBLStrandSpeedSlow = 0, - MBLStrandSpeedFast = 1 -}; - -/** - Direction the pixel colors shift during rotation - */ -typedef NS_ENUM(uint8_t, MBLRotationDirection) { - MBLRotationDirectionTowardsBoard = 0, - MBLRotationDirectionAwayFromBoard = 1 -}; - -/** - Interface to external NeoPixel stands - */ -@interface MBLNeopixel : MBLModule - -/** - Initialize memory on the MetaWear board for a NeoPixel strand - @param color Color ordering format - @param speed Operating speed - @param pin GPIO pin the strand is connected to - @param length Number of pixels to initialize - */ -- (MBLNeopixelStrand *)strandWithColor:(MBLColorOrdering)color - speed:(MBLStrandSpeed)speed - pin:(uint8_t)pin - length:(uint8_t)length; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Neopixel/MBLNeopixel.m b/MetaWear/Classes/Modules/Neopixel/MBLNeopixel.m deleted file mode 100644 index ec3b5d7..0000000 --- a/MetaWear/Classes/Modules/Neopixel/MBLNeopixel.m +++ /dev/null @@ -1,177 +0,0 @@ -/** - * MBLNeopixel.m - * MetaWear - * - * Created by Stephen Schiffli on 8/12/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLNeopixel+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLNeopixelStrand+Private.h" -#import "MBLMetaWearManager+Private.h" - -static const uint8_t MW_NEOPIXEL_MAXSTRANDS = 3; - -@interface MBLNeopixel() -@property (nonatomic) MBLRegister *initialize; -@property (nonatomic) MBLRegister *hold; -@property (nonatomic) MBLRegister *clear; -@property (nonatomic) MBLRegister *pixel; -@property (nonatomic) MBLRegister *rotate; -@property (nonatomic) MBLRegister *deinitialize; - -@property (nonatomic) NSMutableArray *strands; -@end - -@implementation MBLNeopixel - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.initialize = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - self.hold = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.clear = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.pixel = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLFormat alloc] initEncodedDataWithLength:5]]; - self.rotate = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLFormat alloc] initEncodedDataWithLength:5]]; - self.deinitialize = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - - self.strands = [NSMutableArray array]; - for (int i = 0; i < MW_NEOPIXEL_MAXSTRANDS; i++) { - [self.strands addObject:[NSNumber numberWithBool:NO]]; - } - } - return self; -} - -- (MBLNeopixelStrand *)strandWithColor:(MBLColorOrdering)color - speed:(MBLStrandSpeed)speed - pin:(uint8_t)pin - length:(uint8_t)length -{ - return [[MBLNeopixelStrand alloc] initWithNeopixel:self color:color speed:speed pin:pin length:length]; -} - -- (BFTask *)initializeStrand:(MBLNeopixelStrand *)strand -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - if (strand.index == 0xFF) { - for (int i = 0; i < MW_NEOPIXEL_MAXSTRANDS; i++) { - if (![self.strands[i] boolValue]) { - strand.index = i; - self.strands[i] = [NSNumber numberWithBool:YES]; - - uint8_t data[] = { strand.index, ((uint8_t)strand.speed << 2) | strand.color, strand.pin, strand.length }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.initialize writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; - } - } - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorInsufficientMemory - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear out of memory, can't perform action. Reset the MetaWear and use no more than 255 neopixel stands"}]; - return [BFTask taskWithError:error]; - } - return nil; - }]; -} - -- (BFTask *)deinitializeStrand:(MBLNeopixelStrand *)strand -{ - return [BFTask taskFromMetaWearWithBlock:^id{ - if (strand.index != 0xFF) { - uint8_t data[] = { strand.index }; - int dataSize = sizeof(data) / sizeof(data[0]); - - self.strands[strand.index] = [NSNumber numberWithBool:NO]; - strand.index = 0xFF; - return [self.deinitialize writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; - } - return nil; - }]; -} - -- (BFTask *)deallocDeinitializeStrand:(MBLNeopixelStrand *)strand -{ - // This is special because we know strand is currently being deallocated - // so we must cache it's index value now! Can't wait until we are on the - // MetaWear queue (the only place were you really should access or set state) - uint8_t index = strand.index; - if (index != 0xFF) { - uint8_t data[] = { index }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [[self.deinitialize writeDataAsync:[NSData dataWithBytes:data length:dataSize]] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // This must go on metawear queue since we are modifying collection - self.strands[index] = [NSNumber numberWithBool:NO]; - return nil; - }]; - } - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)holdStrandAtIndex:(uint8_t)index withEnable:(BOOL)enable -{ - uint8_t data[] = { index, enable }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.hold writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; -} - -- (BFTask *)clearStrandAtIndex:(uint8_t)index startPixel:(uint8_t)start endPixel:(uint8_t)end -{ - uint8_t data[] = { index, start, end }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.clear writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; -} - -- (BFTask *)setPixelAtIndex:(uint8_t)index pixel:(uint8_t)pixel color:(MBLColor *)color; -{ - CGFloat red, blue, green; -#if TARGET_OS_IOS || TARGET_OS_TV - [color getRed:&red green:&green blue:&blue alpha:nil]; -#else - NSColor *rgbColor = [color colorUsingColorSpace:[NSColorSpace sRGBColorSpace]]; - red = rgbColor.redComponent; - green = rgbColor.greenComponent; - blue = rgbColor.blueComponent; -#endif - uint8_t data[] = { index, pixel, red * 0xFF, green * 0xFF, blue * 0xFF }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.pixel writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; -} - -- (BFTask *)rotateStrandAtIndex:(uint8_t)index direction:(MBLRotationDirection)direction repetitions:(uint8_t)repetitions period:(uint16_t)period -{ - uint8_t data[] = { index, direction, repetitions, (period & 0xff), (period >> 8) }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.rotate writeDataAsync:[NSData dataWithBytes:data length:dataSize]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Neopixel/MBLNeopixelStrand.h b/MetaWear/Classes/Modules/Neopixel/MBLNeopixelStrand.h deleted file mode 100644 index b221eda..0000000 --- a/MetaWear/Classes/Modules/Neopixel/MBLNeopixelStrand.h +++ /dev/null @@ -1,104 +0,0 @@ -/** - * MBLNeopixelStrand.h - * MetaWear - * - * Created by Stephen Schiffli on 3/2/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to a strand of NeoPixels - */ -@interface MBLNeopixelStrand : NSObject - -/** - Initialize the strand, this must be called before invoking any other - commands on the strand. This should only be call once when the strand - is created. - */ -- (BFTask *)initializeAsync; -/** - Deinitialize the strand, this should only be call once right before - you are ready to drop all references to this object. This should - NOT be used to turn if off temporarily, for that use clearAllPixels. - */ -- (BFTask *)deinitializeAsync; - -/** - Set Pixel at strand index. - @param pixel Pixel index to be set - @param color Color the LED will be set to - */ -- (BFTask *)setPixelAsync:(uint8_t)pixel color:(MBLColor *)color; - -/** - This sets each pixel in the strand so that it looks like a rainbow. - Very cool for a quick demo! - @param hold If YES, then we hold the strand duing update so that - it instantly takes the rainbow colors, if NO then you will see each - pixel update individually - */ -- (BFTask *)setRainbowWithHoldAsync:(BOOL)hold; - -/** - Clear Neopixel strand. - @param startPixel Pixel index to start clearing from - @param endPixel Pixel index to clear to, inclusive - */ -- (BFTask *)clearFromStartPixelAsync:(uint8_t)startPixel endPixel:(uint8_t)endPixel; -/** - Clear all neopixel pixels in the strand - */ -- (BFTask *)clearAllPixelsAsync; - -/** - Hold Neopixel strand. - @param enable Hold enable - */ -- (BFTask *)holdStrandWithEnableAsync:(BOOL)enable; - -/** - Rotate strand at index. - @param direction Rotation direction - @param repetitions Number of times to repeat the rotation. Use 0xFF to rotate indefinitely, 0 to terminate - @param period Amount of time, in milliseconds, between rotations - */ -- (BFTask *)rotateStrandWithDirectionAsync:(MBLRotationDirection)direction repetitions:(uint8_t)repetitions period:(uint16_t)period; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Neopixel/MBLNeopixelStrand.m b/MetaWear/Classes/Modules/Neopixel/MBLNeopixelStrand.m deleted file mode 100644 index 438fe5a..0000000 --- a/MetaWear/Classes/Modules/Neopixel/MBLNeopixelStrand.m +++ /dev/null @@ -1,169 +0,0 @@ -/** - * MBLNeopixelStrand.m - * MetaWear - * - * Created by Stephen Schiffli on 3/2/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLNeopixelStrand+Private.h" -#import "MBLNeopixel+Private.h" -#import "MBLModule+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLLogger.h" - -@interface MBLNeopixelStrand () -@property (nonatomic, weak) MBLNeopixel *neopixel; -@property (nonatomic) MBLColorOrdering color; -@property (nonatomic) MBLStrandSpeed speed; -@property (nonatomic) uint8_t pin; -@property (nonatomic) uint8_t length; -@property (nonatomic) uint8_t index; -@end - -@implementation MBLNeopixelStrand - -- (instancetype)initWithNeopixel:(MBLNeopixel *)neopixel color:(MBLColorOrdering)color speed:(MBLStrandSpeed)speed pin:(uint8_t)pin length:(uint8_t)length -{ - self = [super init]; - if (self) { - self.neopixel = neopixel; - self.color = color; - self.speed = speed; - self.pin = pin; - self.length = length; - self.index = 0xFF; - } - return self; -} - -- (void)dealloc -{ - if (self.index != 0xFF) { - if (self.neopixel.device.state == MBLConnectionStateConnected) { - MBLLog(MBLLogLevelWarning, @"please call deinitialize before releasing MBLNeopixelStrand objets"); - } else { - MBLLog(MBLLogLevelWarning, @"please call deinitialize before releasing MBLNeopixelStrand objets, please reset MetaWear to properly recover"); - } - [self.neopixel deallocDeinitializeStrand:self]; - } -} - -- (BFTask *)initializeAsync -{ - return [self.neopixel initializeStrand:self]; -} - -- (BFTask *)deinitializeAsync -{ - return [self.neopixel deinitializeStrand:self]; -} - -- (BFTask *)setPixelAsync:(uint8_t)pixel color:(MBLColor *)color -{ - if (self.index == 0xFF) { - [NSException raise:NSGenericException format:@"Please call initialize before using MBLNeopixelStrand objets"]; - } - if (pixel >= self.length) { - [NSException raise:NSRangeException format:@"Pixel index out of range. %d exceeds max %d", pixel, self.length - 1]; - } - - return [self.neopixel setPixelAtIndex:self.index pixel:pixel color:color]; -} - -- (BFTask *)setRainbowWithHoldAsync:(BOOL)hold -{ - if (self.index == 0xFF) { - [NSException raise:NSGenericException format:@"Please call initialize before using MBLNeopixelStrand objets"]; - } - - float delta = 2.0 * M_PI / (float)self.length; - BFTask *head = [BFTask taskWithResult:nil]; - if (hold) { - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self holdStrandWithEnableAsync:YES]; - }]; - } - for (int i = 0; i < self.length; i++) { - float step = i * delta; - float red = cosf(step); - float green = cosf(step + ((2.0 * M_PI) / 3.0)); - float blue = cosf(step + ((4.0 * M_PI) / 3.0)); - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self setPixelAsync:i color:[MBLColor colorWithRed:red green:green blue:blue alpha:1.0]]; - }]; - } - if (hold) { - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self holdStrandWithEnableAsync:NO]; - }]; - } - return head; -} - -- (BFTask *)clearFromStartPixelAsync:(uint8_t)startPixel endPixel:(uint8_t)endPixel -{ - if (self.index == 0xFF) { - [NSException raise:NSGenericException format:@"Please call initialize before using MBLNeopixelStrand objets"]; - } - if (startPixel > endPixel) { - [NSException raise:NSRangeException format:@"startPixel (%d) can't be greater than endPixel (%d)", startPixel, endPixel]; - } - if (endPixel >= self.length) { - [NSException raise:NSRangeException format:@"endPixel (%d) index out of range (%d)", endPixel, self.length - 1]; - } - - return [self.neopixel clearStrandAtIndex:self.index startPixel:startPixel endPixel:endPixel]; -} - -- (BFTask *)clearAllPixelsAsync -{ - return [self clearFromStartPixelAsync:0 endPixel:self.length - 1]; -} - -- (BFTask *)holdStrandWithEnableAsync:(BOOL)enable -{ - if (self.index == 0xFF) { - [NSException raise:NSGenericException format:@"Please call initialize before using MBLNeopixelStrand objets"]; - } - - return [self.neopixel holdStrandAtIndex:self.index withEnable:enable]; -} - -- (BFTask *)rotateStrandWithDirectionAsync:(MBLRotationDirection)direction repetitions:(uint8_t)repetitions period:(uint16_t)period -{ - if (self.index == 0xFF) { - [NSException raise:NSGenericException format:@"Please call initialize before using MBLNeopixelStrand objets"]; - } - - return [self.neopixel rotateStrandAtIndex:self.index direction:direction repetitions:repetitions period:period]; -} - -@end diff --git a/MetaWear/Classes/Modules/Photometer/MBLPhotometer.h b/MetaWear/Classes/Modules/Photometer/MBLPhotometer.h deleted file mode 100644 index 4a0a7d6..0000000 --- a/MetaWear/Classes/Modules/Photometer/MBLPhotometer.h +++ /dev/null @@ -1,80 +0,0 @@ -/** - * MBLPhotometer.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLRGBData; -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to an abstract photometer sensor. If you need more advanced - features then upcast to the specific sensor on your board, MBLPhotometerTCS3472. - @see MBLPhotometerTCS3472 - */ -@interface MBLPhotometer : MBLModule - -/** - Data representing the intensity of red, green, blue, and clear light exposed - to the sensor. Event callbacks will be provided an MBLRGBData object. - */ -@property (nonatomic, readonly, nullable) MBLData *color; - -/** - Data representing the intensity of red light. Event callbacks will be - provided an MBLNumericData object whose double value is intensity in counts. - */ -@property (nonatomic, readonly, nullable) MBLData *redColor; -/** - Data representing the intensity of green light. Event callbacks will be - provided an MBLNumericData object whose double value is intensity in counts. - */ -@property (nonatomic, readonly, nullable) MBLData *greenColor; -/** - Data representing the intensity of blue light. Event callbacks will be - provided an MBLNumericData object whose double value is intensity in counts. - */ -@property (nonatomic, readonly, nullable) MBLData *blueColor; -/** - Data representing the intensity of clear light. Event callbacks will be - provided an MBLNumericData object whose double value is intensity in counts. - */ -@property (nonatomic, readonly, nullable) MBLData *clearColor; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Photometer/MBLPhotometer.m b/MetaWear/Classes/Modules/Photometer/MBLPhotometer.m deleted file mode 100644 index 99ae7ae..0000000 --- a/MetaWear/Classes/Modules/Photometer/MBLPhotometer.m +++ /dev/null @@ -1,56 +0,0 @@ -/** - * MBLPhotometer.m - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLPhotometer.h" -#import "MBLPhotometerTCS3472.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" - -@interface MBLPhotometer () -@property (nonatomic) MBLData *color; -@property (nonatomic) MBLData *redColor; -@property (nonatomic) MBLData *greenColor; -@property (nonatomic) MBLData *blueColor; -@property (nonatomic) MBLData *clearColor; -@end - -@implementation MBLPhotometer - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - return [[MBLPhotometerTCS3472 alloc] initWithDevice:device moduleInfo:moduleInfo]; -} - -@end diff --git a/MetaWear/Classes/Modules/Photometer/MBLRGBData.h b/MetaWear/Classes/Modules/Photometer/MBLRGBData.h deleted file mode 100644 index deb5b3c..0000000 --- a/MetaWear/Classes/Modules/Photometer/MBLRGBData.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * MBLRGBData.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for a single RGB sensor reading - */ -@interface MBLRGBData : MBLDataSample - -/** - Red light intensity in counts - */ -@property (nonatomic, readonly) uint16_t red; -/** - Green light intensity in counts - */ -@property (nonatomic, readonly) uint16_t green; -/** - Blue light intensity in counts - */ -@property (nonatomic, readonly) uint16_t blue; - -/** - Clear light intensity in counts - */ -@property (nonatomic, readonly) uint16_t clear; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Photometer/MBLRGBData.m b/MetaWear/Classes/Modules/Photometer/MBLRGBData.m deleted file mode 100644 index 426be84..0000000 --- a/MetaWear/Classes/Modules/Photometer/MBLRGBData.m +++ /dev/null @@ -1,70 +0,0 @@ -/** - * MBLRGBData.m - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLRGBData+Private.h" -#import "MBLDataSample+Private.h" - -@interface MBLRGBData() -@property (nonatomic) uint16_t red; -@property (nonatomic) uint16_t green; -@property (nonatomic) uint16_t blue; -@property (nonatomic) uint16_t clear; -@end - -@implementation MBLRGBData - -- (instancetype)initWithRed:(uint16_t)red green:(uint16_t)green blue:(uint16_t)blue clear:(uint16_t)clear timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.red = red; - self.green = green; - self.blue = blue; - self.clear = clear; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"R:%d, G:%d, B:%d, C:%d", self.red, self.green, self.blue, self.clear]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%d,%d,%d,%d\n", self.timestamp.timeIntervalSince1970, self.red, self.green, self.blue, self.clear]; -} - -@end diff --git a/MetaWear/Classes/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472.h b/MetaWear/Classes/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472.h deleted file mode 100644 index 28f0103..0000000 --- a/MetaWear/Classes/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472.h +++ /dev/null @@ -1,71 +0,0 @@ -/** - * MBLPhotometerTCS3472.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Gain applied to the photometer sensor signal - */ -typedef NS_ENUM(uint8_t, MBLPhotometerTCS3472Gain) { - MBLPhotometerTCS3472Gain1X = 0, // default - MBLPhotometerTCS3472Gain4X = 1, - MBLPhotometerTCS3472Gain16X = 2, - MBLPhotometerTCS3472Gain60X = 3, -}; - -/** - Interface to a TCS3472 RGB light sensor - */ -@interface MBLPhotometerTCS3472 : MBLPhotometer - -/** - Gain applied to the photometer sensor signal - */ -@property (nonatomic) MBLPhotometerTCS3472Gain gain; -/** - The measurement time in ms for each RBG light sensor cycle. Valid range is [2.4-614.4], default 50.0. - */ -@property (nonatomic) double integrationTime; -/** - Trigger an LED flash during the reading to improve reading in low light scenarios. - YES: Flash during reading, NO: No flash, default NO. - */ -@property (nonatomic) BOOL ledFlash; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472.m b/MetaWear/Classes/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472.m deleted file mode 100644 index 1874518..0000000 --- a/MetaWear/Classes/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472.m +++ /dev/null @@ -1,100 +0,0 @@ -/** - * MBLPhotometerTCS3472.m - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLPhotometerTCS3472.h" -#import "MBLPhotometer+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLData+Private.h" -#import "MBLPhotometerTCS3472Format.h" -#import "MBLConstants+Private.h" - -typedef struct __attribute__((packed)) { - uint8_t atime; -} tcs3472_reg_atime_t; - -typedef struct __attribute__((packed)) { - uint8_t again:2; - uint8_t :6; -} tcs3472_reg_control_t; - -typedef struct __attribute__((packed)) { - tcs3472_reg_atime_t atime; - tcs3472_reg_control_t control; - uint8_t led_enable; -} mw_rgbcolor_mode_t; - -@interface MBLPhotometerTCS3472() -@property (nonatomic) MBLRegister *mode; -@end - -@implementation MBLPhotometerTCS3472 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.color = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLPhotometerTCS3472Format alloc] init] identifier:@"color"]; - self.redColor = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLPhotometerTCS3472Format alloc] initWithOffset:2] identifier:@"color[1]"]; - self.greenColor = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLPhotometerTCS3472Format alloc] initWithOffset:4] identifier:@"color[2]"]; - self.blueColor = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLPhotometerTCS3472Format alloc] initWithOffset:6] identifier:@"color[3]"]; - self.clearColor = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLPhotometerTCS3472Format alloc] initWithOffset:0] identifier:@"color[0]"]; - - self.mode = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - - self.gain = MBLPhotometerTCS3472Gain1X; - self.integrationTime = 50.0; - self.ledFlash = NO; - } - return self; -} - -- (void)setIntegrationTime:(double)integrationTime -{ - _integrationTime = [MBLConstants clampDouble:integrationTime low:2.4 high:614.4]; -} - -- (BFTask *)performAsyncInitialization -{ - mw_rgbcolor_mode_t regs = { 0 }; - - regs.atime.atime = 256 - round(self.integrationTime / 2.4); - regs.control.again = self.gain; - regs.led_enable = self.ledFlash ? 1 : 0; - - return [self.mode writeDataAsync:[NSData dataWithBytes:®s length:sizeof(mw_rgbcolor_mode_t)]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Proximity/MBLProximity.h b/MetaWear/Classes/Modules/Proximity/MBLProximity.h deleted file mode 100644 index 850d39a..0000000 --- a/MetaWear/Classes/Modules/Proximity/MBLProximity.h +++ /dev/null @@ -1,58 +0,0 @@ -/** - * MBLProximity.h - * MetaWear - * - * Created by Stephen Schiffli on 2/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to an abstract proximity sensor. If you need more advanced - features then upcast to the specific sensor on your board, MBLProximityTSL2671. - @see MBLProximityTSL2671 - */ -@interface MBLProximity : MBLModule - -/** - Data representing the closeness of the module to a physical object. Event callbacks - will be provided an MBLNumericData object whose double value is proximity in counts. - */ -@property (nonatomic, readonly, nullable) MBLData *proximity; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Proximity/MBLProximity.m b/MetaWear/Classes/Modules/Proximity/MBLProximity.m deleted file mode 100644 index 533e7cb..0000000 --- a/MetaWear/Classes/Modules/Proximity/MBLProximity.m +++ /dev/null @@ -1,52 +0,0 @@ -/** - * MBLProximity.m - * MetaWear - * - * Created by Stephen Schiffli on 2/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLProximity+Private.h" -#import "MBLProximityTSL2671.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" - -@interface MBLProximity () -@property (nonatomic) MBLData *proximity; -@end - -@implementation MBLProximity - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - return [[MBLProximityTSL2671 alloc] initWithDevice:device moduleInfo:moduleInfo]; -} - -@end diff --git a/MetaWear/Classes/Modules/Proximity/ProximityTSL2671/MBLProximityTSL2671.h b/MetaWear/Classes/Modules/Proximity/ProximityTSL2671/MBLProximityTSL2671.h deleted file mode 100644 index 24b35f9..0000000 --- a/MetaWear/Classes/Modules/Proximity/ProximityTSL2671/MBLProximityTSL2671.h +++ /dev/null @@ -1,72 +0,0 @@ -/** - * MBLProximityTSL2671.h - * MetaWear - * - * Created by Stephen Schiffli on 2/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Drive current applied to transmitter - */ -typedef NS_ENUM(uint8_t, MBLProximityTSL2671TransmitterDrive) { - MBLProximityTSL2671TransmitterDrive25mA = 2, // Default - MBLProximityTSL2671TransmitterDrive12_5mA = 3 -}; - -/** - Interface to a TCS3472 RGB light sensor. - The following properties affect the range that the proximity sensor outputs. - The defaults provided are good for detecting objects within several inches. You - will need more proximityPulses and integrationTime if you want to detect objects - further away. - */ -@interface MBLProximityTSL2671 : MBLProximity - -/** - The measurement time in ms for each proximity sensor cycle. Valid range is [2.72-696.32], 2.72 default. - */ -@property (nonatomic) double integrationTime; -/** - Number of light pulses to transmit during measurement. <32 recommended, 1 Default. - */ -@property (nonatomic) uint8_t proximityPulses; -/** - Drive current applied to transmitter - */ -@property (nonatomic) MBLProximityTSL2671TransmitterDrive drive; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Proximity/ProximityTSL2671/MBLProximityTSL2671.m b/MetaWear/Classes/Modules/Proximity/ProximityTSL2671/MBLProximityTSL2671.m deleted file mode 100644 index 7c5685b..0000000 --- a/MetaWear/Classes/Modules/Proximity/ProximityTSL2671/MBLProximityTSL2671.m +++ /dev/null @@ -1,108 +0,0 @@ -/** - * MBLProximityTSL2671.m - * MetaWear - * - * Created by Stephen Schiffli on 2/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLProximityTSL2671.h" -#import "MBLProximity+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLConstants+Private.h" - -typedef struct __attribute__((packed)) { - uint8_t ptime; -} tsl2671_reg_ptime_t; - -typedef struct __attribute__((packed)) { - uint8_t ppulse; -} tsl2671_reg_ppulse_t; - -typedef struct __attribute__((packed)) { - uint8_t :4; - uint8_t pdiode:2; - uint8_t pdrive:2; -} tsl2671_reg_control_t; - -typedef struct __attribute__((packed)) { - tsl2671_reg_ptime_t ptime; - tsl2671_reg_ppulse_t ppulse; - tsl2671_reg_control_t control; -} mw_proximity_mode_t; - - -@interface MBLProximityTSL2671() -@property (nonatomic) MBLRegister *mode; -@end - -@implementation MBLProximityTSL2671 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.proximity = [[MBLData alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:2 isSigned:NO] identifier:@"proximity"]; - - self.mode = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - // Mode defaults - self.integrationTime = 2.72; - self.proximityPulses = 1; - self.drive = MBLProximityTSL2671TransmitterDrive25mA; - } - return self; -} - -- (void)setIntegrationTime:(double)integrationTime -{ - _integrationTime = [MBLConstants clampDouble:integrationTime low:2.72 high:696.32]; -} - -- (void)setProximityPulses:(uint8_t)proximityPulses -{ - _proximityPulses = MIN(proximityPulses, 32); -} - -- (BFTask *)performAsyncInitialization -{ - mw_proximity_mode_t regs = { 0 }; - - regs.ptime.ptime = 256 - round(self.integrationTime / 2.72); - regs.ppulse.ppulse = self.proximityPulses; - regs.control.pdiode = 2; // Receiver Diode Select: (0: None, 1: Chan 0, 2: Chan 1, 3: Both) Chan 1 recommended, wavelength matches transmitter. - regs.control.pdrive = self.drive; - - return [self.mode writeDataAsync:[NSData dataWithBytes:®s length:sizeof(mw_proximity_mode_t)]]; -} - -@end diff --git a/MetaWear/Classes/Modules/SensorFusion/MBLEulerAngleData.h b/MetaWear/Classes/Modules/SensorFusion/MBLEulerAngleData.h deleted file mode 100644 index ebb20bf..0000000 --- a/MetaWear/Classes/Modules/SensorFusion/MBLEulerAngleData.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLEulerAngleData.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for a single Euler Angle orientation reading - */ -@interface MBLEulerAngleData : MBLDataSample - -/** - Pitch - */ -@property (nonatomic, readonly) double p; -/** - Roll - */ -@property (nonatomic, readonly) double r; -/** - Yaw - */ -@property (nonatomic, readonly) double y; -/** - Heading - */ -@property (nonatomic, readonly) double h; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/SensorFusion/MBLEulerAngleData.m b/MetaWear/Classes/Modules/SensorFusion/MBLEulerAngleData.m deleted file mode 100644 index a6c50a4..0000000 --- a/MetaWear/Classes/Modules/SensorFusion/MBLEulerAngleData.m +++ /dev/null @@ -1,70 +0,0 @@ -/** - * MBLEulerAngleData.m - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEulerAngleData+Private.h" -#import "MBLDataSample+Private.h" - -@interface MBLEulerAngleData () -@property (nonatomic) double h; -@property (nonatomic) double p; -@property (nonatomic) double r; -@property (nonatomic) double y; -@end - -@implementation MBLEulerAngleData - -- (instancetype)initWithH:(double)h p:(double)p r:(double)r y:(double)y timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.h = h; - self.p = p; - self.r = r; - self.y = y; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %f,%f,%f,%f", [super description], self.h, self.p, self.r, self.y]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%f,%f,%f,%f\n", self.timestamp.timeIntervalSince1970, self.h, self.p, self.r, self.y]; -} - -@end diff --git a/MetaWear/Classes/Modules/SensorFusion/MBLQuaternionData.h b/MetaWear/Classes/Modules/SensorFusion/MBLQuaternionData.h deleted file mode 100644 index 1cf0183..0000000 --- a/MetaWear/Classes/Modules/SensorFusion/MBLQuaternionData.h +++ /dev/null @@ -1,53 +0,0 @@ -/** - * MBLQuaternionData.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Container for quaternion data - */ -@interface MBLQuaternionData : MBLDataSample -/** - TODO - */ -@property (nonatomic, readonly) double w; -@property (nonatomic, readonly) double x; -@property (nonatomic, readonly) double y; -@property (nonatomic, readonly) double z; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/SensorFusion/MBLQuaternionData.m b/MetaWear/Classes/Modules/SensorFusion/MBLQuaternionData.m deleted file mode 100644 index a482575..0000000 --- a/MetaWear/Classes/Modules/SensorFusion/MBLQuaternionData.m +++ /dev/null @@ -1,70 +0,0 @@ -/** - * MBLQuaternionData.m - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLQuaternionData+Private.h" -#import "MBLDataSample+Private.h" - -@interface MBLQuaternionData () -@property (nonatomic) double w; -@property (nonatomic) double x; -@property (nonatomic) double y; -@property (nonatomic) double z; -@end - -@implementation MBLQuaternionData - -- (instancetype)initWithW:(double)w x:(double)x y:(double)y z:(double)z timestamp:(NSDate *)timestamp data:(NSData *)data -{ - self = [super initWithTimestamp:timestamp data:data]; - if (self) { - self.w = w; - self.x = x; - self.y = y; - self.z = z; - } - return self; -} - -- (NSString *)description -{ - return [NSString stringWithFormat:@"%@ %f,%f,%f,%f", [super description], self.w, self.x, self.y, self.z]; -} - -- (NSString *)csvRepresentation -{ - return [NSString stringWithFormat:@"%f,%f,%f,%f,%f\n", self.timestamp.timeIntervalSince1970, self.w, self.x, self.y, self.z]; -} - -@end diff --git a/MetaWear/Classes/Modules/SensorFusion/MBLSensorFusion.h b/MetaWear/Classes/Modules/SensorFusion/MBLSensorFusion.h deleted file mode 100644 index d6ff27b..0000000 --- a/MetaWear/Classes/Modules/SensorFusion/MBLSensorFusion.h +++ /dev/null @@ -1,112 +0,0 @@ -/** - * MBLSensorFusion.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import -#import -#import -#import -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Working mode of the sensor fusion library - */ -typedef NS_ENUM(uint8_t, MBLSensorFusionMode) { - MBLSensorFusionModeSleep = 0, - MBLSensorFusionModeNDoF = 1, - MBLSensorFusionModeIMUPlus = 2, - MBLSensorFusionModeCompass = 3, - MBLSensorFusionModeM4G = 4 -}; - -/** - Interface to the on-board sensor fusion algorithims. - */ -@interface MBLSensorFusion : MBLModule -/** - The working mode of the sensor fusion library. - */ -@property (nonatomic) MBLSensorFusionMode mode; - -/** - We provide attitude and heading information using both Euler Angles and Quaternions. - Compared to quaternions, Euler Angles are simple and intuitive and they lend themselves - well to simple analysis and control. On the other hand, Euler Angles are limited by a - phenomenon called Gimbal Lock. In applications where the sensor will never operate near - pitch angles of +/- 90 degrees, Euler Angles are a good choice. - - Event representing the current euler angle vector. - */ -@property (nonatomic, readonly) MBLEvent *eulerAngle; -/** - A quaternion is a four-element vector that can be used to encode any rotation in a 3D - coordinate system. Technically, a quaternion is composed of one real element and three - complex elements. It's best to start with Euler Angles unless you are already familiar - with quaternions. - - Event representing the current quaternion vector. - */ -@property (nonatomic, readonly) MBLEvent *quaternion; - -/** - Event representing the current gravity vector. - */ -@property (nonatomic, readonly) MBLEvent *gravity; -/** - Event representing the current linear acceleration vector. - */ -@property (nonatomic, readonly) MBLEvent *linearAcceleration; - -/** - Event representing the current corrected acceleration vector. - */ -@property (nonatomic, readonly) MBLEvent *acceleration; -/** - Event representing the current corrected rotation vector measured by the gyro. - */ -@property (nonatomic, readonly) MBLEvent *rotation; -/** - Event representing the current corrected magnetic field vector. - */ -@property (nonatomic, readonly) MBLEvent *magneticField; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/SensorFusion/MBLSensorFusion.m b/MetaWear/Classes/Modules/SensorFusion/MBLSensorFusion.m deleted file mode 100644 index 662cd97..0000000 --- a/MetaWear/Classes/Modules/SensorFusion/MBLSensorFusion.m +++ /dev/null @@ -1,344 +0,0 @@ -/** - * MBLSensorFusion.m - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSensorFusion+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLLogger.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLMagnetometerBMM150+Private.h" -#import "MBLGravityFormat.h" -#import "MBLBitmaskEvent.h" -#import "MBLEulerFormat.h" -#import "MBLQuaternionFormat.h" -#import "MBLCorrectedFormat.h" - -@interface MBLSensorFusion() -@property (nonatomic) MBLRegister *modeRegister; -@property (nonatomic) MBLRegister *outputEnable; - -@property (nonatomic) MBLEvent *acceleration; -@property (nonatomic) MBLEvent *rotation; -@property (nonatomic) MBLEvent *magneticField; -@property (nonatomic) MBLEvent *eulerAngle; -@property (nonatomic) MBLEvent *quaternion; -@property (nonatomic) MBLEvent *gravity; -@property (nonatomic) MBLEvent *linearAcceleration; -@end - -typedef struct __attribute__((packed)) { - uint8_t working_mode; - uint8_t acc_range:4; - uint8_t gyro_range:4; -} mw_sensorfusion_mode_t; - -@implementation MBLSensorFusion - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.modeRegister = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.outputEnable = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - - self.acceleration = [[MBLBitmaskEvent alloc] initWithModule:self registerId:0x4 enableBitmask:(1 << 0) enableRegister:self.outputEnable format:[[MBLCorrectedFormat alloc] initWithType:MBLCorrectedFormatTypeAccelerometer] identifier:@"corrected-acceleration"]; - self.rotation = [[MBLBitmaskEvent alloc] initWithModule:self registerId:0x5 enableBitmask:(1 << 1) enableRegister:self.outputEnable format:[[MBLCorrectedFormat alloc] initWithType:MBLCorrectedFormatTypeGyro] identifier:@"corrected-angular-velocity"]; - self.magneticField = [[MBLBitmaskEvent alloc] initWithModule:self registerId:0x6 enableBitmask:(1 << 2) enableRegister:self.outputEnable format:[[MBLCorrectedFormat alloc] initWithType:MBLCorrectedFormatTypeMagnetometer] identifier:@"corrected-magnetic-field"]; - - self.quaternion = [[MBLBitmaskEvent alloc] initWithModule:self registerId:0x7 enableBitmask:(1 << 3) enableRegister:self.outputEnable format:[[MBLQuaternionFormat alloc] init] identifier:@"quaternion"]; - self.eulerAngle = [[MBLBitmaskEvent alloc] initWithModule:self registerId:0x8 enableBitmask:(1 << 4) enableRegister:self.outputEnable format:[[MBLEulerFormat alloc] init] identifier:@"euler-angles"]; - self.gravity = [[MBLBitmaskEvent alloc] initWithModule:self registerId:0x9 enableBitmask:(1 << 5) enableRegister:self.outputEnable format:[[MBLGravityFormat alloc] init] identifier:@"gravity"]; - self.linearAcceleration = [[MBLBitmaskEvent alloc] initWithModule:self registerId:0xA enableBitmask:(1 << 6) enableRegister:self.outputEnable format:[[MBLGravityFormat alloc] init] identifier:@"linear-acceleration"]; - } - return self; -} - -- (BFTask *)writeModeAccRange:(uint8_t)accRange gyroRange:(uint8_t)gyroRange -{ - // Write that mode - mw_sensorfusion_mode_t mode = { 0 }; - mode.working_mode = self.mode; - mode.acc_range = accRange; - mode.gyro_range = gyroRange; - - return [self.modeRegister writeDataAsync:[NSData dataWithBytes:&mode length:sizeof(mw_sensorfusion_mode_t)]]; -} - -- (void)setMode:(MBLSensorFusionMode)mode -{ - if (self.initializeCount > 0) { - if (mode != _mode) { - MBLLog(MBLLogLevelError, @"Cannot change SensorFusion mode while it is active."); - } - } else { - _mode = mode; - } -} - -- (BFTask *)pullConfigAsync -{ - return [[self.modeRegister readAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - MBLDataSample *result = t.result; - const mw_sensorfusion_mode_t *regs = result.data.bytes; - self.mode = regs->working_mode; - return nil; - }]; -} - -- (BFTask *)performAsyncInitialization -{ - // Some basic housekeeping checks as we enable Sensor Fusion - BOOL expected = [self.device.accelerometer isKindOfClass:[MBLAccelerometerBMI160 class]] && - [self.device.gyro isKindOfClass:[MBLGyroBMI160 class]]; - // As of now we must assert certain sensors types - if (!expected) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"BMI160 required for sensor fusion but was not detected, please contact MbientLab."}]]; - } - MBLAccelerometerBMI160 *accelerometer = (MBLAccelerometerBMI160 *)self.device.accelerometer; - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.device.gyro; - MBLMagnetometerBMM150 *magnetometer = (MBLMagnetometerBMM150 *)self.device.magnetometer; - - if (!magnetometer && self.mode != MBLSensorFusionModeIMUPlus) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Sensor Fusion can only run in MBLSensorFusionModeIMUPlus mode without a Magnetometer."}]]; - } - if (magnetometer && (magnetometer.periodicMagneticField.initializeCount > 0)) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Sensor Fusion needs to program the magnetometer to specific settings, please enable Sensor Fusion first before streaming or logging raw magnetometer data."}]]; - } - if (accelerometer.dataReadyEvent.initializeCount > 0) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Sensor Fusion needs to program the accelerometer to specific settings, please enable Sensor Fusion first before streaming or logging raw accelerometer data."}]]; - } - if (gyro.dataReadyEvent.initializeCount > 0) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Sensor Fusion needs to program the gyro to specific settings, please enable Sensor Fusion first before streaming or logging raw gyro data."}]]; - } - - // Byte 1.0-1.3: Accel Range (0: 2G, 1: 4G, 2: 8G, 3:16G) - uint8_t accRange; - switch (accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange2G: - accRange = 0; - break; - case MBLAccelerometerBoschRange4G: - accRange = 1; - break; - case MBLAccelerometerBoschRange8G: - accRange = 2; - break; - case MBLAccelerometerBoschRange16G: - accRange = 3; - break; - } - // Byte 1.4-1.7: Gyro Range (0: 2048, 1: 2000, 2: 1000, 3: 500, 4: 250) DPS (deg per sec) - uint8_t gyroRange; - switch (gyro.fullScaleRange) { - case MBLGyroBMI160Range125: - gyro.fullScaleRange = MBLGyroBMI160Range250; - gyroRange = 4; - break; - case MBLGyroBMI160Range250: - gyroRange = 4; - break; - case MBLGyroBMI160Range500: - gyroRange = 3; - break; - case MBLGyroBMI160Range1000: - gyroRange = 2; - break; - case MBLGyroBMI160Range2000: - gyroRange = 1; - break; - } - - // Setup those sensors based on the mode - switch (self.mode) { - case MBLSensorFusionModeM4G: - // M4G (Mag/Acc simulated Gyro) - // 50Hz Acc - // Null Gyro - // 50Hz Mag (NOTE Using 25 for now since mag doesn't support 50) - accelerometer.sampleFrequency = 50; - - magnetometer.powerPreset = MBLMagnetometerBMM150PresetRegular; - magnetometer.sampleFrequency = MBLMagnetometerBMM150SampleFrequency25Hz; - - // Boot all the sensors - return [[[[[accelerometer.dataReadyEvent initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [accelerometer.dataReadyEvent activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField initializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self writeModeAccRange:accRange gyroRange:gyroRange]; - }]; - case MBLSensorFusionModeNDoF: - // NDOF (N Degrees of Freedom: 9 axis rotation/heading) - // 100Hz Acc - // 100Hz Gyro - // 25Hz Mag - accelerometer.sampleFrequency = 100; - - gyro.sampleFrequency = 100; - - magnetometer.powerPreset = MBLMagnetometerBMM150PresetRegular; - magnetometer.sampleFrequency = MBLMagnetometerBMM150SampleFrequency25Hz; - - // Boot all the sensors - return [[[[[[[accelerometer.dataReadyEvent initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [accelerometer.dataReadyEvent activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [gyro.dataReadyEvent initializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [gyro.dataReadyEvent activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField initializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self writeModeAccRange:accRange gyroRange:gyroRange]; - }]; - case MBLSensorFusionModeCompass: - // Compass (Accel compensated Compass) - // 25Hz Acc - // Null Gyro - // 25Hz Mag - accelerometer.sampleFrequency = 25; - - magnetometer.powerPreset = MBLMagnetometerBMM150PresetRegular; - magnetometer.sampleFrequency = MBLMagnetometerBMM150SampleFrequency25Hz; - - // Boot all the sensors - return [[[[[accelerometer.dataReadyEvent initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [accelerometer.dataReadyEvent activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField initializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self writeModeAccRange:accRange gyroRange:gyroRange]; - }]; - case MBLSensorFusionModeIMUPlus: - // IMUPlus (IMU Plus: 6 axis compensated rotation) - // 100Hz Acc - // 100Hz Gyro - // Null Mag - accelerometer.sampleFrequency = 100; - gyro.sampleFrequency = 100; - - // Boot all the sensors - return [[[[[accelerometer.dataReadyEvent initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [accelerometer.dataReadyEvent activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [gyro.dataReadyEvent initializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [gyro.dataReadyEvent activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self writeModeAccRange:accRange gyroRange:gyroRange]; - }]; - case MBLSensorFusionModeSleep: - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Please choose a mode besides Sleep before enabling Sensor Fusion."}]]; - } -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLAccelerometerBMI160 *accelerometer = (MBLAccelerometerBMI160 *)self.device.accelerometer; - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.device.gyro; - MBLMagnetometerBMM150 *magnetometer = (MBLMagnetometerBMM150 *)self.device.magnetometer; - - // Turn off those sensors based on the mode - switch (self.mode) { - case MBLSensorFusionModeM4G: - // Disable all the sensors - return [[[[accelerometer.dataReadyEvent deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [accelerometer.dataReadyEvent deinitializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField deactivateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField deinitializeAsync]; - }]; - case MBLSensorFusionModeNDoF: - // Disable all the sensors - return [[[[[[accelerometer.dataReadyEvent deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [accelerometer.dataReadyEvent deinitializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [gyro.dataReadyEvent deactivateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [gyro.dataReadyEvent deinitializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField deactivateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField deinitializeAsync]; - }]; - case MBLSensorFusionModeCompass: - // Disable all the sensors - return [[[[accelerometer.dataReadyEvent deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [accelerometer.dataReadyEvent deinitializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField deactivateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [magnetometer.periodicMagneticField deinitializeAsync]; - }]; - case MBLSensorFusionModeIMUPlus: - // Disable all the sensors - return [[[[accelerometer.dataReadyEvent deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [accelerometer.dataReadyEvent deinitializeAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [gyro.dataReadyEvent deactivateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [gyro.dataReadyEvent deinitializeAsync]; - }]; - case MBLSensorFusionModeSleep: - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Please choose a mode besides Sleep before enabling Sensor Fusion."}]]; - } -} - -@end diff --git a/MetaWear/Classes/Modules/Serial/MBLI2CData.h b/MetaWear/Classes/Modules/Serial/MBLI2CData.h deleted file mode 100644 index 32cd2c9..0000000 --- a/MetaWear/Classes/Modules/Serial/MBLI2CData.h +++ /dev/null @@ -1,71 +0,0 @@ -/** - * MBLI2CData.h - * MetaWear - * - * Created by Stephen Schiffli on 1/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface for reading/writing a specific I2C device register. - */ -@interface MBLI2CData : MBLData - -/** - Write the given value to the I2C register - @param data Data to be written - */ -- (BFTask *)writeDataAsync:(nullable NSData *)data; - -/** - Write the given byte to the I2C register - @param byte Byte to be written - */ -- (BFTask *)writeByteAsync:(uint8_t)byte; - -/** - Write the given word to the I2C register - @param word Word to be written - */ -- (BFTask *)writeWordAsync:(uint16_t)word; - -/** - Write the given dword to the I2C register - @param dword Dword to be written - */ -- (BFTask *)writeDwordAsync:(uint32_t)dword; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Serial/MBLI2CData.m b/MetaWear/Classes/Modules/Serial/MBLI2CData.m deleted file mode 100644 index b033825..0000000 --- a/MetaWear/Classes/Modules/Serial/MBLI2CData.m +++ /dev/null @@ -1,151 +0,0 @@ -/** - * MBLI2CData.m - * MetaWear - * - * Created by Stephen Schiffli on 1/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSerial+Private.h" -#import "MBLI2CData+Private.h" -#import "MBLRegister+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLConstants+Private.h" - -static const uint8_t MW_I2C_DATA_SIZE = 10; - -typedef struct __attribute__((packed)) { - uint8_t address; - uint8_t reg; - uint8_t index; - uint8_t dataLength; - uint8_t data[MW_I2C_DATA_SIZE]; -} mw_i2c_passthru_cmd_t; - - -@interface MBLI2CData () -@property (nonatomic) uint8_t deviceAddress; -@property (nonatomic) uint8_t registerAddress; -@end - -@implementation MBLI2CData - -- (instancetype)initWithRegister:(MBLRegister *)reg - deviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length -{ - self = [super initWithModule:reg.module registerId:reg.registerId format:[[MBLFormat alloc] initEncodedDataWithLength:length]]; - if (self) { - self.deviceAddress = deviceAddress; - self.registerAddress = registerAddress; - - NSString *curVersion = reg.module.device.deviceInfo.firmwareRevision; - if ([MBLConstants versionString:curVersion isLessThan:@"1.1.0"]) { - self.needsResponse = YES; - } - } - return self; -} - -- (instancetype)initNumberWithRegister:(MBLRegister *)reg - deviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length - isSigned:(BOOL)isSigned -{ - self = [super initWithModule:reg.module registerId:reg.registerId format:[[MBLNumericFormatter alloc] initIntWithLength:length isSigned:isSigned]]; - if (self) { - self.deviceAddress = deviceAddress; - self.registerAddress = registerAddress; - - NSString *curVersion = reg.module.device.deviceInfo.firmwareRevision; - if ([MBLConstants versionString:curVersion isLessThan:@"1.1.0"]) { - self.needsResponse = YES; - } - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - return [self.module.device.serial performAsyncInitializationForRegister:self]; -} - -- (BFTask *)performAsyncDeinitialization -{ - return [self.module.device.serial performAsyncDeinitializationForRegister:self]; -} - -- (NSData *)readParameters -{ - mw_i2c_passthru_cmd_t params = { 0 }; - params.address = self.deviceAddress; - params.reg = self.registerAddress; - assert(self.index != 0xFF); - params.index = self.index; - params.dataLength = self.format.length; - - return [NSData dataWithBytes:¶ms length:4]; -} - -- (nonnull BFTask *)writeDataAsync:(nullable NSData *)data -{ - mw_i2c_passthru_cmd_t params = { 0 }; - params.address = self.deviceAddress; - params.reg = self.registerAddress; - params.index = 0; - params.dataLength = self.format.length; - - NSInteger size = MIN(data.length, MW_I2C_DATA_SIZE); - memcpy(params.data, data.bytes, size); - - return [super writeDataAsync:[NSData dataWithBytes:¶ms length:size + 4]]; -} - -- (nonnull BFTask *)writeByteAsync:(uint8_t)byte -{ - return [self writeDataAsync:[NSData dataWithBytes:&byte length:1]]; -} - -- (nonnull BFTask *)writeWordAsync:(uint16_t)word -{ - return [self writeDataAsync:[NSData dataWithBytes:&word length:2]]; -} - -- (nonnull BFTask *)writeDwordAsync:(uint32_t)dword -{ - return [self writeDataAsync:[NSData dataWithBytes:&dword length:4]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Serial/MBLSPIData.h b/MetaWear/Classes/Modules/Serial/MBLSPIData.h deleted file mode 100644 index b6f6fd0..0000000 --- a/MetaWear/Classes/Modules/Serial/MBLSPIData.h +++ /dev/null @@ -1,77 +0,0 @@ -/** - * MBLSPIData.h - * MetaWear - * - * Created by Stephen Schiffli on 1/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface for reading/writing a specific SPI device. - */ -@interface MBLSPIData : MBLData - -/** - Read after writing the given data on the bus (used to write addresses, cmds, etc.) - @param data Data to be written - */ -- (BFTask *)readWithParamtersAsync:(NSData *)data; - -/** - Write the given value to the SPI device - @param data Data to be written - */ -- (BFTask *)writeDataAsync:(nullable NSData *)data; - -/** - Write the given byte to the SPI device - @param byte Byte to be written - */ -- (BFTask *)writeByteAsync:(uint8_t)byte; - -/** - Write the given word to the SPI device - @param word Word to be written - */ -- (BFTask *)writeWordAsync:(uint16_t)word; - -/** - Write the given dword to the SPI device - @param dword Dword to be written - */ -- (BFTask *)writeDwordAsync:(uint32_t)dword; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Serial/MBLSPIData.m b/MetaWear/Classes/Modules/Serial/MBLSPIData.m deleted file mode 100644 index 4b72736..0000000 --- a/MetaWear/Classes/Modules/Serial/MBLSPIData.m +++ /dev/null @@ -1,230 +0,0 @@ -/** - * MBLSPIData.m - * MetaWear - * - * Created by Stephen Schiffli on 1/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSerial+Private.h" -#import "MBLSPIData+Private.h" -#import "MBLRegister+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLDeviceInfo.h" - -static const uint8_t MW_SPI_WRITE_DATA_SIZE = 13; -static const uint8_t MW_SPI_READ_DATA_SIZE = 12; - -typedef struct __attribute__((packed)) { - uint8_t pin_ss; - uint8_t pin_sck; - uint8_t pin_mosi; - uint8_t pin_miso; - union { - struct __attribute__((packed)) { - uint8_t lsb_first:1; - uint8_t mode:2; - uint8_t freq:3; - uint8_t native_pin_indexing:1; - uint8_t :1; - }; - uint8_t mode_byte; - }; - union { - struct __attribute__((packed)) { - uint8_t readlen:4; - uint8_t index:4; - uint8_t readwritedata[MW_SPI_READ_DATA_SIZE]; - }; - uint8_t writedata[MW_SPI_WRITE_DATA_SIZE]; - }; -} mw_spi_passthru_cmd_t; - - -@interface MBLSPIData () -@property (nonatomic) uint8_t slaveSelectPin; -@property (nonatomic) uint8_t clockPin; -@property (nonatomic) uint8_t mosiPin; -@property (nonatomic) uint8_t misoPin; -@property (nonatomic) uint8_t lsbFirst; -@property (nonatomic) uint8_t spiMode; -@property (nonatomic) uint8_t spiFrequency; -@property (nonatomic) uint8_t nativePinIndexing; -@property (nonatomic) NSData *pendingReadParams; -@end - -@implementation MBLSPIData - -- (instancetype)initWithRegister:(MBLRegister *)reg - slaveSelectPin:(uint8_t)slaveSelectPin - clockPin:(uint8_t)clockPin - mosiPin:(uint8_t)mosiPin - misoPin:(uint8_t)misoPin - lsbFirst:(BOOL)lsbFirst - spiMode:(uint8_t)spiMode - spiFrequency:(uint8_t)spiFrequency - nativePinIndexing:(BOOL)nativePinIndexing - length:(uint8_t)length -{ - self = [super initWithModule:reg.module registerId:reg.registerId format:[[MBLFormat alloc] initEncodedDataWithLength:length]]; - if (self) { - self.slaveSelectPin = slaveSelectPin; - self.clockPin = clockPin; - self.mosiPin = mosiPin; - self.misoPin = misoPin; - self.lsbFirst = lsbFirst; - self.spiMode = spiMode; - self.spiFrequency = spiFrequency; - self.nativePinIndexing = nativePinIndexing; - } - return self; -} - -- (instancetype)initNumberWithRegister:(MBLRegister *)reg - slaveSelectPin:(uint8_t)slaveSelectPin - clockPin:(uint8_t)clockPin - mosiPin:(uint8_t)mosiPin - misoPin:(uint8_t)misoPin - lsbFirst:(BOOL)lsbFirst - spiMode:(uint8_t)spiMode - spiFrequency:(uint8_t)spiFrequency - nativePinIndexing:(BOOL)nativePinIndexing - length:(uint8_t)length - isSigned:(BOOL)isSigned -{ - self = [super initWithModule:reg.module registerId:reg.registerId format:[[MBLNumericFormatter alloc] initIntWithLength:length isSigned:isSigned]]; - if (self) { - self.slaveSelectPin = slaveSelectPin; - self.clockPin = clockPin; - self.mosiPin = mosiPin; - self.misoPin = misoPin; - self.lsbFirst = lsbFirst; - self.spiMode = spiMode; - self.spiFrequency = spiFrequency; - self.nativePinIndexing = nativePinIndexing; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - return [self.module.device.serial performAsyncInitializationForRegister:self]; -} - -- (BFTask *)performAsyncDeinitialization -{ - return [self.module.device.serial performAsyncDeinitializationForRegister:self]; -} - -- (BFTask *)readAsync -{ - if (!self.module) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"SPI reads not supported, please update firmware."}]]; - } - return [super readAsync]; -} - -- (BFTask *)readWithParamtersAsync:(NSData *)data -{ - if (!self.module) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"SPI reads not supported, please update firmware."}]]; - } - self.pendingReadParams = data; - return [self readAsync]; -} - -- (NSData *)readParameters -{ - mw_spi_passthru_cmd_t params = { 0 }; - params.pin_ss = self.slaveSelectPin; - params.pin_sck = self.clockPin; - params.pin_mosi = self.mosiPin; - params.pin_miso = self.misoPin; - params.lsb_first = self.lsbFirst; - params.mode = self.spiMode; - params.freq = self.spiFrequency; - params.native_pin_indexing = self.nativePinIndexing; - - params.readlen = self.format.length - 1; - assert(self.index != 0xFF); - params.index = self.index; - - NSInteger size = MIN(self.pendingReadParams.length, MW_SPI_READ_DATA_SIZE); - memcpy(params.readwritedata, self.pendingReadParams.bytes, size); - - return [NSData dataWithBytes:¶ms length:size + 6]; -} - -- (BFTask *)writeDataAsync:(nullable NSData *)data -{ - if (!self.module) { - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"SPI reads not supported, please update firmware."}]]; - } - - mw_spi_passthru_cmd_t params = { 0 }; - params.pin_ss = self.slaveSelectPin; - params.pin_sck = self.clockPin; - params.pin_mosi = self.mosiPin; - params.pin_miso = self.misoPin; - params.lsb_first = self.lsbFirst; - params.mode = self.spiMode; - params.freq = self.spiFrequency; - params.native_pin_indexing = self.nativePinIndexing; - - NSInteger size = MIN(data.length, MW_SPI_WRITE_DATA_SIZE); - memcpy(params.writedata, data.bytes, size); - - return [super writeDataAsync:[NSData dataWithBytes:¶ms length:size + 5]]; -} - -- (BFTask *)writeByteAsync:(uint8_t)byte -{ - return [self writeDataAsync:[NSData dataWithBytes:&byte length:1]]; -} - -- (BFTask *)writeWordAsync:(uint16_t)word -{ - return [self writeDataAsync:[NSData dataWithBytes:&word length:2]]; -} - -- (BFTask *)writeDwordAsync:(uint32_t)dword -{ - return [self writeDataAsync:[NSData dataWithBytes:&dword length:4]]; -} - -@end diff --git a/MetaWear/Classes/Modules/Serial/MBLSerial.h b/MetaWear/Classes/Modules/Serial/MBLSerial.h deleted file mode 100644 index 5404b0c..0000000 --- a/MetaWear/Classes/Modules/Serial/MBLSerial.h +++ /dev/null @@ -1,102 +0,0 @@ -/** - * MBLSerial.h - * MetaWear - * - * Created by Stephen Schiffli on 1/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLDataSample; -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface for reading/writing externally connected devices via a serial bus (I2C or SPI). - */ -@interface MBLSerial : MBLModule - -/** - Create an I2C data endpoint. The deivce and register address - will be available in the data sheet of whatever device you connect. - Event callbacks will be provided an MBLDataSample object whose data - property can be used to access the data as bytes. - */ -- (MBLI2CData *)dataAtDeviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length; - -/** - Create an I2C data endpoint. The deivce and register address - will be available in the data sheet of whatever device you connect. - Event callbacks will be provided an MBLNumericData object whose value - will contain the register value formatted as a number. - */ -- (MBLI2CData *)numberAtDeviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length - isSigned:(BOOL)isSigned; - - -/** - Create an SPI data endpoint. The deivce and register address - will be available in the data sheet of whatever device you connect. - */ -- (MBLSPIData *)dataWithSlaveSelectPin:(uint8_t)slaveSelectPin - clockPin:(uint8_t)clockPin - mosiPin:(uint8_t)mosiPin - misoPin:(uint8_t)misoPin - lsbFirst:(BOOL)lsbFirst - spiMode:(uint8_t)spiMode - spiFrequency:(uint8_t)spiFrequency - nativePinIndexing:(BOOL)nativePinIndexing - length:(uint8_t)length; - -/** - Create an SPI data endpoint. The deivce and register address - will be available in the data sheet of whatever device you connect. - */ -- (MBLSPIData *)numberWithSlaveSelectPin:(uint8_t)slaveSelectPin - clockPin:(uint8_t)clockPin - mosiPin:(uint8_t)mosiPin - misoPin:(uint8_t)misoPin - lsbFirst:(BOOL)lsbFirst - spiMode:(uint8_t)spiMode - spiFrequency:(uint8_t)spiFrequency - nativePinIndexing:(BOOL)nativePinIndexing - length:(uint8_t)length - isSigned:(BOOL)isSigned; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Serial/MBLSerial.m b/MetaWear/Classes/Modules/Serial/MBLSerial.m deleted file mode 100644 index 316d135..0000000 --- a/MetaWear/Classes/Modules/Serial/MBLSerial.m +++ /dev/null @@ -1,166 +0,0 @@ -/** - * MBLSerial.m - * MetaWear - * - * Created by Stephen Schiffli on 1/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSerial+Private.h" -#import "MBLModule+Private.h" -#import "MBLRegister+Private.h" -#import "MBLI2CData+Private.h" -#import "MBLSPIData+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "BFTask+MBLPrivate.h" - - -@interface MBLSerial () -@property (nonatomic) MBLRegister *twiReadWrite; -@property (nonatomic) MBLRegister *spiReadWrite; - -@property (nonatomic) NSMutableArray *regs; -@end - -@implementation MBLSerial - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.twiReadWrite = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - if (moduleInfo.moduleRevision >= 1) { - self.spiReadWrite = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - } - self.regs = [NSMutableArray array]; - } - return self; -} - -- (BFTask *)performAsyncInitializationForRegister:(MBLRegister *)reg -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (reg.index != 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't initialize entity that's already initialized"}]; - return [BFTask taskWithError:error]; - } - reg.index = self.regs.count; - [self.regs addObject:reg]; - return nil; - }]; -} - -- (BFTask *)performAsyncDeinitializationForRegister:(MBLRegister *)reg -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (reg.index == 0xFF) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't deinitialize entity that's not initialized"}]; - return [BFTask taskWithError:error]; - } - [self.regs removeObject:reg]; - reg.index = 0xFF; - return nil; - }]; -} - -- (MBLI2CData *)dataAtDeviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length -{ - return [[MBLI2CData alloc] initWithRegister:self.twiReadWrite - deviceAddress:deviceAddress - registerAddress:registerAddress - length:length]; -} - -- (MBLI2CData *)numberAtDeviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length - isSigned:(BOOL)isSigned -{ - return [[MBLI2CData alloc] initNumberWithRegister:self.twiReadWrite - deviceAddress:deviceAddress - registerAddress:registerAddress - length:length - isSigned:isSigned]; -} - - -- (MBLSPIData *)dataWithSlaveSelectPin:(uint8_t)slaveSelectPin - clockPin:(uint8_t)clockPin - mosiPin:(uint8_t)mosiPin - misoPin:(uint8_t)misoPin - lsbFirst:(BOOL)lsbFirst - spiMode:(uint8_t)spiMode - spiFrequency:(uint8_t)spiFrequency - nativePinIndexing:(BOOL)nativePinIndexing - length:(uint8_t)length -{ - return [[MBLSPIData alloc] initWithRegister:self.spiReadWrite - slaveSelectPin:slaveSelectPin - clockPin:clockPin - mosiPin:mosiPin - misoPin:misoPin - lsbFirst:lsbFirst - spiMode:spiMode - spiFrequency:spiFrequency - nativePinIndexing:nativePinIndexing - length:(uint8_t)length]; -} - -- (MBLSPIData *)numberWithSlaveSelectPin:(uint8_t)slaveSelectPin - clockPin:(uint8_t)clockPin - mosiPin:(uint8_t)mosiPin - misoPin:(uint8_t)misoPin - lsbFirst:(BOOL)lsbFirst - spiMode:(uint8_t)spiMode - spiFrequency:(uint8_t)spiFrequency - nativePinIndexing:(BOOL)nativePinIndexing - length:(uint8_t)length - isSigned:(BOOL)isSigned -{ - return [[MBLSPIData alloc] initNumberWithRegister:self.spiReadWrite - slaveSelectPin:slaveSelectPin - clockPin:clockPin - mosiPin:mosiPin - misoPin:misoPin - lsbFirst:lsbFirst - spiMode:spiMode - spiFrequency:spiFrequency - nativePinIndexing:nativePinIndexing - length:length - isSigned:isSigned]; -} - -@end diff --git a/MetaWear/Classes/Modules/Settings/MBLSettings.h b/MetaWear/Classes/Modules/Settings/MBLSettings.h deleted file mode 100644 index dd6ca6f..0000000 --- a/MetaWear/Classes/Modules/Settings/MBLSettings.h +++ /dev/null @@ -1,188 +0,0 @@ -/** - * MBLSettings.h - * MetaWear - * - * Created by Stephen Schiffli on 1/19/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLEvent; -@class MBLData; -@class MBLStringData; -@class MBLDataSample; -@class MBLNumericData; - -NS_ASSUME_NONNULL_BEGIN - -/** - BLE transmiter power - */ -typedef NS_ENUM(uint8_t, MBLTransmitPower) { - MBLTransmitPower4dBm = 0, - MBLTransmitPower0dBm = 1, - MBLTransmitPowerMinus4dBm = 2, - MBLTransmitPowerMinus8dBm = 3, - MBLTransmitPowerMinus12dBm = 4, - MBLTransmitPowerMinus16dBm = 5, - MBLTransmitPowerMinus20dBm = 6, - MBLTransmitPowerMinus30dBm = 7 -}; - -/** - Various MetaWear settings and events - */ -@interface MBLSettings : MBLModule - -/** - Advertising interval in ms. Defaults to 417.5 - This should be carefully considered, because it affects the time to discovery - and connect performance, and also battery life. - */ -@property (nonatomic) double advertisingInterval; -/** - Advertising timeout in seconds. Valid range is [0, 180], use 0 for unlimited - advertising (0 is default) - */ -@property (nonatomic) uint8_t advertisingTimeout; - -/** - Bluetooth radio transmit power. Setting a smaller (lower dBm) value will - result in a smaller connection radius, default is MBLTransmitPower0dBm. - */ -@property (nonatomic) MBLTransmitPower transmitPower; - -/** - Set a raw value into the scan response BLE advertising packet. - For example this byte string would turn the MetaWear into a URIBeacon - uint8_t rawuri[] = { 0x03, 0x03, 0xD8, 0xFE, 0x10, 0x16, 0xD8, 0xFE, 0x00, 0x12, 0x00, 0x6D, 0x62, 0x69, 0x65, 0x6E, 0x74, 0x6C, 0x61, 0x62, 0x00 }; - */ -@property (nonatomic, nullable) NSData *scanResponse; - -/** - Choose what happens if the internal log fills up. If circularBufferLog is YES - then the oldest log entries will be deleted to make room for now entries, if - NO then new entries will be discared. Defaults to NO. - */ -@property (nonatomic) BOOL circularBufferLog; - -/** - Event representing a BLE disconnection event. Note this doesn't make sense to - stream, but it's likely that programCommandsToRunOnEventAsync will have utility. - Event callbacks will be provided an MBLDataSample object. - */ -@property (nonatomic, readonly, nullable) MBLEvent *disconnectEvent; - -/** - Get the MAC address of the MetaWear - Event callbacks will be provided an MBLStringData object. - */ -@property (nonatomic, readonly, nullable) MBLData *macAddress; - -/** - Percent remaining battery life, returns int between 0-100 - */ -@property (nonatomic, readonly, nullable) MBLData *batteryRemaining; - -/** - Event representing a power source being connected or disconnected. Values are interpreted as follows: - 0: Power Source Absent - 1: Power Source Present - On boot, if power source is present, a notification will fire after all startup macros have executed. - */ -@property (nonatomic, readonly, nullable) MBLEvent *powerStatus; - -/** - Event representing a change in charging status. Values are interpreted as follows: - 0: Battery Not Charging - 1: Battery Charging - On boot, if battery is charging, a notification will fire after all startup macros have executed. - */ -@property (nonatomic, readonly, nullable) MBLEvent *chargerStatus; - -/** - Start the pairing process which creates a persistent bond between the - MetaWear and iOS device - */ -- (BFTask *)initiatePairingAsync; -/** - Removes all bonding information stored on the MetaWear. The delete will - actually occur on the next disconnect. - - Note, to delete bonding information on the iOS device you must go to - Settings -> Bluetooth choose the device you want to remove and - select "Forget This Device" - */ -- (BFTask *)deleteAllBondsAsync; - -/** - This call will start advertisement. You can hook this call up to any MBLEvent - if you need advanced ways to start advertising. Note a button press it already - hard coded to always trigger advertising, which should cover most cases. - */ -- (BFTask *)startAdvertisementAsync; - - - -///---------------------------------- -/// @name Experimental Connection Parameters -///---------------------------------- - -/** - Minimum Connection Interval (uint16_t in units of 1.25ms) Valid range [6, 3200] - */ -@property (nonatomic) uint16_t minimumConnectionInterval; -/** - Maximum Connection Interval (uint16_t in units of 1.25ms) Valid range [6, 3200] - */ -@property (nonatomic) uint16_t maximumConnectionInterval; -/** - Slave Latency (intervals the device may skip if it has no data) Valid range [0, 1000] - */ -@property (nonatomic) uint16_t slaveLatency; -/** - Supervisory Timeout (uint16_t in units of 10ms) Valid range [10, 3200] - */ -@property (nonatomic) uint16_t supervisoryTimeout; -/** - Write all the above values to the device - */ -- (BFTask *)applyConnectionParametersAsync; - -/** - Raw battery voltage in mV. For enabling only, please use batteryRemaining instead. - */ -@property (nonatomic, readonly, nullable) MBLData *batteryVoltage; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Settings/MBLSettings.m b/MetaWear/Classes/Modules/Settings/MBLSettings.m deleted file mode 100644 index 7bfeb02..0000000 --- a/MetaWear/Classes/Modules/Settings/MBLSettings.m +++ /dev/null @@ -1,338 +0,0 @@ -/** - * MBLSettings.m - * MetaWear - * - * Created by Stephen Schiffli on 1/19/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSettings+Private.h" -#import "MBLModule+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLMacAddressFormat.h" -#import "MBLNumericFormatter.h" -#import "MBLNumericData+Private.h" - -typedef struct __attribute__((packed)) { - uint16_t min_conn_interval; - uint16_t max_conn_interval; - uint16_t slave_latency; - uint16_t conn_sup_timeout; -} ble_gap_conn_params_t; - -typedef struct __attribute__((packed)) { - uint8_t power_status_supported:1; - uint8_t charger_status_supported:1; -} mw_settings_feature_bitmask_t; - -@interface MBLSettings () -@property (nonatomic) MBLRegister *deviceName; -@property (nonatomic) MBLRegister *advertisingIntervalRegister; -@property (nonatomic) MBLRegister *txPower; -@property (nonatomic) MBLRegister *bondsDelete; -@property (nonatomic) MBLRegister *startAdvertising; -@property (nonatomic) MBLRegister *initiateBonding; -@property (nonatomic) MBLRegister *scanResponsePacket; -@property (nonatomic) MBLRegister *scanResponsePacketPartial; -@property (nonatomic) MBLRegister *connectionParameters; -@property (nonatomic) MBLEvent *disconnectEvent; -@property (nonatomic) MBLData *macAddress; -@property (nonatomic) MBLData *batteryRemaining; -@property (nonatomic) MBLData *batteryVoltage; -@property (nonatomic) MBLRegister *watchdogEnable; -@property (nonatomic) MBLRegister *watchdogConfig; -@property (nonatomic) MBLRegister *watchdogAutoRefresh; -@property (nonatomic) MBLRegister *watchdogUserRefresh; -@property (nonatomic) MBLEvent *powerStatus; -@property (nonatomic) MBLEvent *chargerStatus; - - -// Setting the following properties causes side effects, so we -// create an internal property for storing the actual value, allowing -// us to safely get/set during serialization of this class -@property (nonatomic) double advertisingIntervalImpl; -@property (nonatomic) uint8_t advertisingTimeoutImpl; -@property (nonatomic) MBLTransmitPower transmitPowerImpl; -@property (nonatomic) NSData *scanResponseImpl; -@property (nonatomic) BOOL circularBufferLogImpl; -@end - -@implementation MBLSettings - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - mw_settings_feature_bitmask_t features = { 0 }; - if (moduleInfo.moduleData.length > 0) { - features = *(mw_settings_feature_bitmask_t *)moduleInfo.moduleData.bytes; - } - self.advertisingIntervalImpl = 417.5; - self.advertisingTimeoutImpl = 0; - self.transmitPowerImpl = MBLTransmitPower0dBm; - self.scanResponseImpl = nil; - self.circularBufferLogImpl = NO; - - self.minimumConnectionInterval = 7.5 / 1.25; - self.maximumConnectionInterval = 1000 / 1.25; - self.slaveLatency = 0; - self.supervisoryTimeout = 6000 / 10; - - self.deviceName = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLFormat alloc] initEncodedDataWithLength:8]]; - self.advertisingIntervalRegister = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:moduleInfo.moduleRevision >= 6 ? 4 : 3]]; - self.txPower = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.bondsDelete = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.startAdvertising = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.initiateBonding = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.scanResponsePacket = [[MBLRegister alloc] initWithModule:self registerId:0x7 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - self.scanResponsePacketPartial = [[MBLRegister alloc] initWithModule:self registerId:0x8 format:[[MBLFormat alloc] initEncodedDataWithLength:13]]; - if (moduleInfo.moduleRevision >= 1) { - self.connectionParameters = [[MBLRegister alloc] initWithModule:self registerId:0x9 format:[[MBLFormat alloc] initEncodedDataWithLength:8]]; - } - if (moduleInfo.moduleRevision >= 2) { - self.disconnectEvent = [[MBLEvent alloc] initWithModule:self registerId:0xA format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.macAddress = [[MBLData alloc] initWithModule:self registerId:0xB format:[[MBLMacAddressFormat alloc] initWithAddressType:moduleInfo.moduleRevision >= 6]]; - } - if (moduleInfo.moduleRevision >= 3) { - self.batteryRemaining = [[MBLData alloc] initWithModule:self registerId:0xC format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO] identifier:@"battery"]; - self.batteryVoltage = [[MBLData alloc] initWithModule:self registerId:0xC format:[[MBLNumericFormatter alloc] initIntWithLength:2 isSigned:NO offset:1]]; - } - if (moduleInfo.moduleRevision >= 4) { - self.watchdogEnable = [[MBLRegister alloc] initWithModule:self registerId:0xD format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.watchdogConfig = [[MBLRegister alloc] initWithModule:self registerId:0xE format:[[MBLFormat alloc] initEncodedDataWithLength:5]]; - self.watchdogAutoRefresh = [[MBLRegister alloc] initWithModule:self registerId:0xF format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.watchdogUserRefresh = [[MBLRegister alloc] initWithModule:self registerId:0x10 format:[MBLFormat writeOnly]]; - } - if (moduleInfo.moduleRevision >= 5) { - if (features.power_status_supported) { - self.powerStatus = [[MBLEvent alloc] initWithModule:self registerId:0x11 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO] identifier:@"power-status"]; - } - if (features.charger_status_supported) { - self.chargerStatus = [[MBLEvent alloc] initWithModule:self registerId:0x12 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO] identifier:@"charge-status"]; - } - } - if (moduleInfo.moduleRevision >= 6) { - // TODO: We can't do whitelist with iOS devices unless we pair - // enable this when the time comes - } - } - return self; -} - -- (double)advertisingInterval -{ - return self.advertisingIntervalImpl; -} - -- (void)setAdvertisingInterval:(double)advertisingInterval -{ - self.advertisingIntervalImpl = advertisingInterval; - [self updateAdvertisingIntervalRegister]; -} - -- (uint8_t)advertisingTimeout -{ - return self.advertisingTimeoutImpl; -} - -- (void)setAdvertisingTimeout:(uint8_t)advertisingTimeout -{ - self.advertisingTimeoutImpl = advertisingTimeout; - [self updateAdvertisingIntervalRegister]; -} - -typedef struct __attribute__((packed)) { - uint16_t interval; - uint8_t timeout; -} advertising_interval_param_t; - -typedef struct __attribute__((packed)) { - uint16_t interval; - uint8_t timeout; - uint8_t advertisement_type; -} advertising_interval_param_v2_t; - -- (void)updateAdvertisingIntervalRegister -{ - uint16_t intValue = self.advertisingIntervalImpl; - if (self.moduleInfo.moduleRevision >= 1) { - intValue = roundf(self.advertisingIntervalImpl / 0.625); - } - NSData *data; - if (self.moduleInfo.moduleRevision >= 6) { - advertising_interval_param_v2_t params = {0}; - params.interval = intValue; - params.timeout = self.advertisingTimeoutImpl; - params.advertisement_type = 0; - data = [NSData dataWithBytes:¶ms length:sizeof(advertising_interval_param_v2_t)]; - } else { - advertising_interval_param_t params = {0}; - params.interval = intValue; - params.timeout = self.advertisingTimeoutImpl; - data = [NSData dataWithBytes:¶ms length:sizeof(advertising_interval_param_t)]; - } - [self.advertisingIntervalRegister writeDataAsync:data]; -} - -- (MBLTransmitPower)transmitPower -{ - return self.transmitPowerImpl; -} - -- (void)setTransmitPower:(MBLTransmitPower)transmitPower -{ - self.transmitPowerImpl = transmitPower; - int8_t intPower; - switch (transmitPower) { - case MBLTransmitPower4dBm: - intPower = 4; - break; - case MBLTransmitPower0dBm: - intPower = 0; - break; - case MBLTransmitPowerMinus4dBm: - intPower = -4; - break; - case MBLTransmitPowerMinus8dBm: - intPower = -8; - break; - case MBLTransmitPowerMinus12dBm: - intPower = -12; - break; - case MBLTransmitPowerMinus16dBm: - intPower = -16; - break; - case MBLTransmitPowerMinus20dBm: - intPower = -20; - break; - case MBLTransmitPowerMinus30dBm: - intPower = -30; - break; - } - [self.txPower writeDataAsync:[NSData dataWithBytes:&intPower length:1]]; -} - -- (NSData *)scanResponse -{ - return self.scanResponseImpl; -} - -- (void)setScanResponse:(NSData *)scanResponse -{ - if (scanResponse.length > 31) { - [NSException raise:@"Invalid scanResponse data" - format:@"length of %lu is invalid, valid range is [0, 31]", (unsigned long)scanResponse.length]; - } - if (scanResponse.length > 18) { - [self.scanResponsePacketPartial writeDataAsync:[scanResponse subdataWithRange:NSMakeRange(0, 13)]]; - [self.scanResponsePacket writeDataAsync:[scanResponse subdataWithRange:NSMakeRange(13, scanResponse.length - 13)]]; - } else { - [self.scanResponsePacket writeDataAsync:scanResponse]; - } - self.scanResponseImpl = scanResponse; -} - -- (BOOL)circularBufferLog -{ - return self.circularBufferLogImpl; -} - -- (void)setCircularBufferLog:(BOOL)circularBufferLog -{ - self.circularBufferLogImpl = circularBufferLog; - [self.device.logging.circularBufferMode writeByteAsync:circularBufferLog]; -} - -- (BFTask *)initiatePairingAsync -{ - return [self.initiateBonding writeDataAsync:nil]; -} - -- (BFTask *)deleteAllBondsAsync -{ - return [self.bondsDelete writeByteAsync:1]; -} - -- (BFTask *)startAdvertisementAsync -{ - return [self.startAdvertising writeDataAsync:nil]; -} - -- (BFTask *)applyConnectionParametersAsync -{ - /* - #define MIN_CONN_INTERVAL MSEC_TO_UNITS(7.5, UNIT_1_25_MS) //Minimum acceptable connection interval (0.5 seconds). - #define MAX_CONN_INTERVAL MSEC_TO_UNITS(1000, UNIT_1_25_MS) //Maximum acceptable connection interval (1 second). - #define SLAVE_LATENCY 0 //Slave latency. - #define CONN_SUP_TIMEOUT MSEC_TO_UNITS(6000, UNIT_10_MS) //Connection supervisory timeout (4 seconds). - - Interval Max * (Slave Latency + 1) ≤ 2 seconds - Interval Min ≥ 20 ms - Interval Min + 20 ms ≤ Interval Max Slave Latency ≤ 4 - connSupervisionTimeout ≤ 6 seconds - Interval Max * (Slave Latency + 1) * 3 < connSupervisionTimeout - - 1 * (0 + 1) < 2 pass - 7.5ms > 20 fail - 7.5 + 20 < 1 * (0 + 1) < 4 pass - */ - - ble_gap_conn_params_t params = { 0 }; - params.min_conn_interval = self.minimumConnectionInterval; - params.max_conn_interval = self.maximumConnectionInterval; - params.slave_latency = self.slaveLatency; - params.conn_sup_timeout = self.supervisoryTimeout; - - return [self.connectionParameters writeDataAsync:[NSData dataWithBytes:¶ms length:sizeof(ble_gap_conn_params_t)]]; -} - -- (BFTask *)startWatchdog:(double)seconds runWhileSleeping:(BOOL)runWhileSleeping -{ - uint32_t ticks = (seconds * 32768.0) - 1; - NSMutableData *data = [NSMutableData dataWithBytes:&ticks length:sizeof(ticks)]; - uint8_t tmp = runWhileSleeping ? 1 : 0; - [data appendBytes:&tmp length:sizeof(tmp)]; - - return [[[self.watchdogConfig writeDataAsync:data] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self refreshOnScheduler:NO enteringSleep:YES]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.watchdogEnable writeByteAsync:1]; - }]; -} - -- (BFTask *)refreshOnScheduler:(BOOL)scheduler enteringSleep:(BOOL)enteringSleep -{ - uint8_t data = 0; - data |= scheduler ? (1 << 0) : 0; - data |= enteringSleep ? (1 << 1) : 0; - return [self.watchdogAutoRefresh writeByteAsync:data]; -} - -@end diff --git a/MetaWear/Classes/Modules/Temperature/MBLExternalThermistor.h b/MetaWear/Classes/Modules/Temperature/MBLExternalThermistor.h deleted file mode 100644 index 2bc4ec4..0000000 --- a/MetaWear/Classes/Modules/Temperature/MBLExternalThermistor.h +++ /dev/null @@ -1,63 +0,0 @@ -/** - * MBLExternalThermistor.h - * MetaWear - * - * Created by Stephen Schiffli on 7/9/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface for configuring an external thermistor. For details on connecting, - see our blog post at http://projects.mbientlab.com/metawear-and-thermistor/ - */ -@interface MBLExternalThermistor : MBLData - -/** - Thermistor output pin number - */ -@property (nonatomic) uint8_t readPin; -/** - Thermistor enable pin number - */ -@property (nonatomic) uint8_t enablePin; -/** - YES means when enablePin is low the thermistor will be on, NO means when - enablePin is high the sensor will be on. This will be determined by how - you connect the thermistor to the MetaWear. - */ -@property (nonatomic) BOOL enablePinActiveLow; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Temperature/MBLExternalThermistor.m b/MetaWear/Classes/Modules/Temperature/MBLExternalThermistor.m deleted file mode 100644 index 7e2282d..0000000 --- a/MetaWear/Classes/Modules/Temperature/MBLExternalThermistor.m +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLExternalThermistor.m - * MetaWear - * - * Created by Stephen Schiffli on 7/9/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLExternalThermistor.h" - -@implementation MBLExternalThermistor - -@end diff --git a/MetaWear/Classes/Modules/Temperature/MBLTemperature.h b/MetaWear/Classes/Modules/Temperature/MBLTemperature.h deleted file mode 100644 index e23740e..0000000 --- a/MetaWear/Classes/Modules/Temperature/MBLTemperature.h +++ /dev/null @@ -1,89 +0,0 @@ -/** - * MBLTemperature.h - * MetaWear - * - * Created by Stephen Schiffli on 8/1/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -#import -@class MBLNumericData; -@class MBLMetaWear; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to the on-chip and external thermistor temperature sensors - */ -@interface MBLTemperature : MBLModule - -/** - Array of MBLData (or derived class) objects corresponding to the different - temperature sensors available on this particular MetaWear. Event callbacks - will be provided an MBLNumericData object whose double value will be - degrees Celsius. - */ -@property (nonatomic, readonly) NSArray *> *channels; - -///---------------------------------- -/// @name Convenient Assessors - also available via channels[N] -///---------------------------------- - -/** - Data representing the current temperate of the internal (on-die) sensor. - This is guaranteed to always be available (equal to channels[0]). - Event callbacks will be provided an MBLNumericData object whose double - value will be degrees Celsius. - */ -@property (nonatomic, readonly) MBLData *onDieThermistor; -@property (nonatomic, readonly) MBLData *internal DEPRECATED_MSG_ATTRIBUTE("Use onDieThermistor instead"); - -/** - Data representing the current temperate of the external thermistor, if - equiped. This is a thermistor that you connect manually, so you need - to setup readPin and enablePin on the MBLExternalThermistor object. - Event callbacks will be provided an MBLNumericData object whose double - value will be degrees Celsius. - */ -@property (nonatomic, readonly, nullable) MBLExternalThermistor *externalThermistor; - -/** - Data representing the current temperate of the on-board thermistor, if - equiped. Event callbacks will be provided an MBLNumericData object whose - double value will be degrees Celsius. - */ -@property (nonatomic, readonly, nullable) MBLData *onboardThermistor; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Temperature/MBLTemperature.m b/MetaWear/Classes/Modules/Temperature/MBLTemperature.m deleted file mode 100644 index 21a65af..0000000 --- a/MetaWear/Classes/Modules/Temperature/MBLTemperature.m +++ /dev/null @@ -1,68 +0,0 @@ -/** - * MBLTemperature.m - * MetaWear - * - * Created by Stephen Schiffli on 8/1/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTemperature+Private.h" -#import "MBLTemperatureV0.h" -#import "MBLTemperatureV1.h" -#import "MBLModule+Private.h" -#import "MBLModuleInfo.h" -#import "MBLNumericData+Private.h" - -@interface MBLTemperature () -@property (nonatomic) NSArray *channels; -@property (nonatomic) MBLData *internal; -@property (nonatomic) MBLData *onDieThermistor; -@property (nonatomic) MBLExternalThermistor *externalThermistor; -@property (nonatomic) MBLData *onboardThermistor; - -@property (nonatomic) MBLRegister *thermistorSettings; - -@property (nonatomic) MBLTemperatureSource source; -@property (nonatomic) uint8_t thermistorReadPin; -@property (nonatomic) uint8_t thermistorEnablePin; -@end - -@implementation MBLTemperature - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - if (moduleInfo.moduleImplementation == 1) { - return [[MBLTemperatureV1 alloc] initWithDevice:device moduleInfo:moduleInfo]; - } else { - return [[MBLTemperatureV0 alloc] initWithDevice:device moduleInfo:moduleInfo]; - } -} - -@end diff --git a/MetaWear/Classes/Modules/Timer/MBLTimer.h b/MetaWear/Classes/Modules/Timer/MBLTimer.h deleted file mode 100644 index dbdf5bf..0000000 --- a/MetaWear/Classes/Modules/Timer/MBLTimer.h +++ /dev/null @@ -1,89 +0,0 @@ -/** - * MBLTimer.h - * MetaWear - * - * Created by Stephen Schiffli on 1/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -@class MBLDataSample; -@class MBLTimerEvent; - -NS_ASSUME_NONNULL_BEGIN - -/** - Interface to timer module - */ -@interface MBLTimer : MBLEntityModule - -/** - Create a new event that will trigger periodically until canceled. - @param period Period time in mSec - @returns New event that will trigger periodically - */ -- (MBLTimerEvent *)eventWithPeriod:(uint32_t)period; - -/** - Create a new event that will trigger periodically a fixed number of times. - @param period Period time in mSec - @param eventCount Number of times event will be triggered, 0xFFFF will repeat forever - @returns New event that will trigger periodically - */ -- (MBLTimerEvent *)eventWithPeriod:(uint32_t)period - eventCount:(uint16_t)eventCount; -/** - Create a new event that will trigger periodically a fixed number of times. - @param period Period time in mSec - @param eventCount Number of times event will be triggered, 0xFFFF will repeat forever - @param autoStart Should the timer automatically be started when it is used - @returns New event that will trigger periodically - */ -- (MBLTimerEvent *)eventWithPeriod:(uint32_t)period - eventCount:(uint16_t)eventCount - autoStart:(BOOL)autoStart; - -/** - Create a new event that will trigger periodically a fixed number of times. - @param period Period time in mSec - @param eventCount Number of times event will be triggered, 0xFFFF will repeat forever - @param autoStart Should the timer automatically be started when it is used - @param triggerOnStart Should the timer's first event occur when it starts or after one period - @returns New event that will trigger periodically - */ -- (MBLTimerEvent *)eventWithPeriod:(uint32_t)period - eventCount:(uint16_t)eventCount - autoStart:(BOOL)autoStart - triggerOnStart:(BOOL)triggerOnStart; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Timer/MBLTimer.m b/MetaWear/Classes/Modules/Timer/MBLTimer.m deleted file mode 100644 index f11fdb3..0000000 --- a/MetaWear/Classes/Modules/Timer/MBLTimer.m +++ /dev/null @@ -1,156 +0,0 @@ -/** - * MBLTimer.m - * MetaWear - * - * Created by Stephen Schiffli on 1/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTimer+Private.h" -#import "MBLTimerEvent+Private.h" -#import "MBLRegister+Private.h" -#import "MBLModule+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLDataSample.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLEntityEvent+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLMetaWear+Private.h" -#import "BFTask+MBLPrivate.h" -#import "MBLConstants+Private.h" - - -static const uint16_t MW_TIMER_REPEAT_FOREVER = 0xFFFF; - -@interface MBLTimer () - -@end - -@implementation MBLTimer - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - MBLRegister *globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - MBLRegister *addTimer = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:7]]; - MBLRegister *startTimer = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[MBLFormat writeOnly]]; - MBLRegister *stopTimer = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[MBLFormat writeOnly]]; - MBLRegister *removeTimer = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[MBLFormat writeOnly]]; - MBLRegister *notification = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - MBLRegister *notificationEnable = [[MBLRegister alloc] initWithModule:self registerId:0x7 format:[MBLFormat writeOnly]]; - - int maxTimers = 4; // This was the old default - if (moduleInfo.moduleData.length) { - maxTimers = *(uint8_t *)moduleInfo.moduleData.bytes; - } - - NSString *curVersion = device.deviceInfo.firmwareRevision; - if ([MBLConstants versionString:curVersion isLessThan:@"1.1.0"]) { - startTimer.needsResponse = YES; - } - - addTimer.writeResponds = YES; - - self.globalEnable = globalEnable; - - self.addEntity = addTimer; - self.removeEntity = removeTimer; - - self.activateEntity = startTimer; - self.deactivateEntity = stopTimer; - - self.globalNotifications = notification; - self.notificationEnable = notificationEnable; - - self.maxEntities = maxTimers; - } - return self; -} - -- (BFTask *)startTimer:(MBLTimerEvent *)timer -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (timer.index != 0xFF) { - return [self.activateEntity writeByteAsync:timer.index]; - } - return nil; - }]; -} - -- (BFTask *)stopTimer:(MBLTimerEvent *)timer -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - if (timer.index != 0xFF) { - return [self.deactivateEntity writeByteAsync:timer.index]; - } - return nil; - }]; -} - -- (MBLTimerEvent *)eventWithPeriod:(uint32_t)period - eventCount:(uint16_t)eventCount - autoStart:(BOOL)autoStart - triggerOnStart:(BOOL)triggerOnStart -{ - // Since all filters get their data through the single timerNotification register in - // the timer module, we create a dummy register which is optionally notified - // when we see a global notification which matches our filter id - mw_timer_param_t params = {0}; - params.period = period; - params.repeat_count = eventCount; - params.notify_on_start = triggerOnStart ? 1 : 0; - - return [[MBLTimerEvent alloc] initWithModule:self - registerId:self.globalNotifications.registerId - addEntityParameters:[NSData dataWithBytes:¶ms length:sizeof(mw_timer_param_t)] - format:[[MBLFormat alloc] initEncodedDataWithLength:0] - autoStart:autoStart]; -} - -- (MBLTimerEvent *)eventWithPeriod:(uint32_t)period - eventCount:(uint16_t)eventCount - autoStart:(BOOL)autoStart -{ - return [self eventWithPeriod:period eventCount:eventCount autoStart:autoStart triggerOnStart:YES]; -} - -- (MBLTimerEvent *)eventWithPeriod:(uint32_t)period - eventCount:(uint16_t)eventCount -{ - return [self eventWithPeriod:period eventCount:eventCount autoStart:YES]; -} - -- (MBLTimerEvent *)eventWithPeriod:(uint32_t)period -{ - return [self eventWithPeriod:period eventCount:MW_TIMER_REPEAT_FOREVER]; -} - -@end diff --git a/MetaWear/Classes/Modules/Timer/MBLTimerEvent.h b/MetaWear/Classes/Modules/Timer/MBLTimerEvent.h deleted file mode 100644 index e6f04db..0000000 --- a/MetaWear/Classes/Modules/Timer/MBLTimerEvent.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - * MBLTimerEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 3/11/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Periodic timer based event - */ -@interface MBLTimerEvent : MBLEntityEvent - -/** - Start the timer - */ -- (BFTask *)start; - -/** - Stop the timer - */ -- (BFTask *)stop; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/Timer/MBLTimerEvent.m b/MetaWear/Classes/Modules/Timer/MBLTimerEvent.m deleted file mode 100644 index 09ee1c7..0000000 --- a/MetaWear/Classes/Modules/Timer/MBLTimerEvent.m +++ /dev/null @@ -1,78 +0,0 @@ -/** - * MBLTimerEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 3/11/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTimerEvent+Private.h" -#import "MBLEntityEvent+Private.h" -#import "MBLEvent+Private.h" -#import "BFTask+MBLPrivate.h" -#import "MBLTimer+Private.h" - -@interface MBLTimerEvent () -@property (nonatomic) BOOL autoStart; -@end - -@implementation MBLTimerEvent - -- (instancetype)initWithModule:(MBLEntityModule *)module - registerId:(uint8_t)registerId - addEntityParameters:(NSData *)addEntityParameters - format:(MBLFormat *)format - autoStart:(BOOL)autoStart -{ - self = [super initWithModule:module registerId:registerId addEntityParameters:addEntityParameters format:format]; - if (self) { - self.autoStart = autoStart; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - return self.autoStart ? [self start] : [BFTask taskWithResult:nil]; -} - -- (BFTask *)start -{ - MBLTimer *timer = (MBLTimer *)self.module; - return [timer startTimer:self]; -} - -- (BFTask *)stop -{ - MBLTimer *timer = (MBLTimer *)self.module; - return [timer stopTimer:self]; -} - -@end diff --git a/MetaWear/Classes/Modules/iBeacon/MBLiBeacon.h b/MetaWear/Classes/Modules/iBeacon/MBLiBeacon.h deleted file mode 100644 index c04854e..0000000 --- a/MetaWear/Classes/Modules/iBeacon/MBLiBeacon.h +++ /dev/null @@ -1,109 +0,0 @@ -/** - * MBLiBeacon.h - * MetaWear - * - * Created by Stephen Schiffli on 8/3/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - iBeacon transmiter power - */ -typedef NS_ENUM(uint8_t, MBLiBeaconTransmitPower) { - MBLiBeaconTransmitPower4dBm, - MBLiBeaconTransmitPower0dBm, - MBLiBeaconTransmitPowerMinus4dBm, - MBLiBeaconTransmitPowerMinus8dBm, - MBLiBeaconTransmitPowerMinus12dBm, - MBLiBeaconTransmitPowerMinus16dBm, - MBLiBeaconTransmitPowerMinus20dBm, - MBLiBeaconTransmitPowerMinus30dBm, - MBLiBeaconTransmitPowerMinus40dBm -}; - -/** - Interface to program the device to advertise as an iBeacon - */ -@interface MBLiBeacon : MBLModule - -/** - The iBeacon UUID being broadcast, the default is the MetaWear Service UUID - */ -- (CBUUID *)uuid; -- (BFTask *)setUuid:(CBUUID *)uuid; -/** - The iBeacon major value being broadcast, the default is 0x0000 - */ -- (uint16_t)major; -- (BFTask *)setMajor:(uint16_t)major; -/** - The iBeacon minor value being broadcast, the default is 0x0000 - */ -- (uint16_t)minor; -- (BFTask *)setMinor:(uint16_t)minor; - -/** - Calibrated RX power in dBm. This represents the approximate RSSI value seen - by the reciever when 1 meter away from the iBeacon, default is -55 dBm. - Valid range is [-10, -128]. - */ -- (int8_t)calibratedReceiverPower; -- (BFTask *)setCalibratedReceiverPower:(int8_t)calibratedReceiverPower; -/** - iBeacon transmit power. Setting a smaller (lower dBm) value will result in - a smaller beacon discovery radius, default is MBLiBeaconTransmitPower0dBm. - You should adjust calibratedReceiverPower when changing transmitPower. - */ -- (MBLiBeaconTransmitPower)transmitPower; -- (BFTask *)setTransmitPower:(MBLiBeaconTransmitPower)transmitPower; - -/** - Advertisement frequency in ms, default is 100 ms. - Valid range is [20, 10,240] - */ -- (uint16_t)frequency; -- (BFTask *)setFrequency:(uint16_t)frequency; - -/** - Change iBeacon state to on or off. - @warning The beacon will only be visible after you disconnect - @param on YES turns iBeacon on, NO, turns iBeacon off - */ -- (BFTask *)setBeaconOnAsync:(BOOL)on; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Classes/Modules/iBeacon/MBLiBeacon.m b/MetaWear/Classes/Modules/iBeacon/MBLiBeacon.m deleted file mode 100644 index 2466a1e..0000000 --- a/MetaWear/Classes/Modules/iBeacon/MBLiBeacon.m +++ /dev/null @@ -1,198 +0,0 @@ -/** - * MBLiBeacon.m - * MetaWear - * - * Created by Stephen Schiffli on 8/3/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLiBeacon.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLFormat.h" -#import "MBLNumericFormatter.h" -#import "MBLConstants+Private.h" - -@interface MBLiBeacon() -@property (nonatomic) MBLRegister *iBeaconEnable; -@property (nonatomic) MBLRegister *uuidRegister; -@property (nonatomic) MBLRegister *majorRegister; -@property (nonatomic) MBLRegister *minorRegister; -@property (nonatomic) MBLRegister *powerRxRegister; -@property (nonatomic) MBLRegister *powerTxRegister; -@property (nonatomic) MBLRegister *frequencyRegister; - - -// Setting the following properties causes side effects, so we -// create an internal property for storing the actual value, allowing -// us to safely get/set during serialization of this class -@property (nonatomic) CBUUID *uuidImpl; -@property (nonatomic) uint16_t majorImpl; -@property (nonatomic) uint16_t minorImpl; -@property (nonatomic) int8_t calibratedReceiverPowerImpl; -@property (nonatomic) MBLiBeaconTransmitPower transmitPowerImpl; -@property (nonatomic) uint16_t frequencyImpl; -@end - -@implementation MBLiBeacon - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.uuidImpl = [MBLConstants serviceUUID]; - self.majorImpl = 0x0; - self.minorImpl = 0x0; - self.calibratedReceiverPowerImpl = -55; - self.transmitPowerImpl = MBLiBeaconTransmitPower0dBm; - self.frequencyImpl = 100; - - self.iBeaconEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.uuidRegister = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:16]]; - self.majorRegister = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.minorRegister = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - self.powerRxRegister = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:YES]]; - self.powerTxRegister = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:YES]]; - self.frequencyRegister = [[MBLRegister alloc] initWithModule:self registerId:0x7 format:[[MBLNumericFormatter alloc] initIntWithLength:2 isSigned:NO]]; - } - return self; -} - -- (CBUUID *)uuid -{ - return self.uuidImpl; -} - -- (BFTask *)setUuid:(CBUUID *)uuid -{ - self.uuidImpl = uuid; - - NSData *bigEndianUUID = self.uuid.data; - NSMutableData *littleEndianUUID = [NSMutableData dataWithCapacity:bigEndianUUID.length]; - const uint8_t *ptr = bigEndianUUID.bytes + bigEndianUUID.length - 1; - for (int i = 0; i < bigEndianUUID.length; i++, ptr--) { - [littleEndianUUID appendBytes:ptr length:1]; - } - return [self.uuidRegister writeDataAsync:littleEndianUUID]; -} - -- (uint16_t)major -{ - return self.majorImpl; -} - -- (BFTask *)setMajor:(uint16_t)major -{ - self.majorImpl = major; - return [self.majorRegister writeDataAsync:[NSData dataWithBytes:&major length:2]]; -} - -- (uint16_t)minor -{ - return self.minorImpl; -} - -- (BFTask *)setMinor:(uint16_t)minor -{ - self.minorImpl = minor; - return [self.minorRegister writeDataAsync:[NSData dataWithBytes:&minor length:2]]; -} - -- (int8_t)calibratedReceiverPower -{ - return self.calibratedReceiverPowerImpl; -} - -- (BFTask *)setCalibratedReceiverPower:(int8_t)calibratedReceiverPower -{ - if (calibratedReceiverPower > -10) { - [NSException raise:@"Invalid calibratedReceiverPower value" - format:@"power of %d is invalid, valid range is [-10, -128]", calibratedReceiverPower]; - } - self.calibratedReceiverPowerImpl = calibratedReceiverPower; - return [self.powerRxRegister writeByteAsync:calibratedReceiverPower]; -} - -- (MBLiBeaconTransmitPower)transmitPower -{ - return self.transmitPowerImpl; -} - -- (BFTask *)setTransmitPower:(MBLiBeaconTransmitPower)transmitPower -{ - self.transmitPowerImpl = transmitPower; - return [self.powerTxRegister writeByteAsync:[self integerTransmitPower]]; -} - -- (int8_t)integerTransmitPower -{ - switch (self.transmitPowerImpl) { - case MBLiBeaconTransmitPower4dBm: - return 4; - case MBLiBeaconTransmitPower0dBm: - return 0; - case MBLiBeaconTransmitPowerMinus4dBm: - return -4; - case MBLiBeaconTransmitPowerMinus8dBm: - return -8; - case MBLiBeaconTransmitPowerMinus12dBm: - return -12; - case MBLiBeaconTransmitPowerMinus16dBm: - return -16; - case MBLiBeaconTransmitPowerMinus20dBm: - return -20; - case MBLiBeaconTransmitPowerMinus30dBm: - return -30; - case MBLiBeaconTransmitPowerMinus40dBm: - return -40; - } -} - -- (uint16_t)frequency -{ - return self.frequencyImpl; -} - -- (BFTask *)setFrequency:(uint16_t)frequency -{ - if (frequency > 10240 || frequency < 20) { - [NSException raise:@"Invalid frequency value" - format:@"frequency of %d is invalid, valid range is [20, 10,240]", frequency]; - } - self.frequencyImpl = frequency; - return [self.frequencyRegister writeDataAsync:[NSData dataWithBytes:&frequency length:2]]; -} - -- (BFTask *)setBeaconOnAsync:(BOOL)on -{ - return [self.iBeaconEnable writeByteAsync:on ? 0x1 : 0x0]; -} - -@end diff --git a/MetaWear/Assets/.gitkeep b/MetaWear/Core/.gitkeep similarity index 100% rename from MetaWear/Assets/.gitkeep rename to MetaWear/Core/.gitkeep diff --git a/MetaWear/Internal/Core/MBLAnonymousEvent+Private.h b/MetaWear/Core/Bridging.swift similarity index 69% rename from MetaWear/Internal/Core/MBLAnonymousEvent+Private.h rename to MetaWear/Core/Bridging.swift index 2a222ff..2e6826f 100644 --- a/MetaWear/Internal/Core/MBLAnonymousEvent+Private.h +++ b/MetaWear/Core/Bridging.swift @@ -1,8 +1,8 @@ /** - * MBLAnonymousEvent+Private.h - * MetaWear + * Bridging.swift + * MetaWear-Swift * - * Created by Stephen Schiffli on 9/22/15. + * Created by Stephen Schiffli on 12/14/17. * Copyright 2017 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights @@ -33,16 +33,21 @@ * contact MbientLab via email: hello@mbientlab.com */ -#import "MBLAnonymousEvent.h" -#import "MBLModule+Private.h" -#import "MBLFormat.h" -NS_ASSUME_NONNULL_BEGIN +// Convert to/from void* without ownership, only use when lifetime +// of object is guaranteed elsewhere +public func bridge(obj : T) -> UnsafeMutableRawPointer { + return Unmanaged.passUnretained(obj).toOpaque() +} +public func bridge(ptr : UnsafeRawPointer) -> T { + return Unmanaged.fromOpaque(ptr).takeUnretainedValue() +} -@interface MBLAnonymousEvent (Private) - -- (instancetype)initWithRegister:(MBLRegister *)reg; - -@end - -NS_ASSUME_NONNULL_END +// Convert to/from void* with ownership, make sure these are always +// called in matching paris +public func bridgeRetained(obj : T) -> UnsafeMutableRawPointer { + return Unmanaged.passRetained(obj).toOpaque() +} +public func bridgeTransfer(ptr : UnsafeRawPointer) -> T { + return Unmanaged.fromOpaque(ptr).takeRetainedValue() +} diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData+Private.h b/MetaWear/Core/CBUUID.swift similarity index 64% rename from MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData+Private.h rename to MetaWear/Core/CBUUID.swift index 4d8e9fd..ee5f6b5 100644 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData+Private.h +++ b/MetaWear/Core/CBUUID.swift @@ -1,8 +1,8 @@ /** - * MBLAccelerometerBoschFlatData+Private.h - * MetaWear + * CBUUID.swift + * MetaWear-Swift * - * Created by Stephen Schiffli on 1/18/17. + * Created by Stephen Schiffli on 12/14/17. * Copyright 2017 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights @@ -33,16 +33,20 @@ * contact MbientLab via email: hello@mbientlab.com */ -#import "MBLAccelerometerBoschFlatData.h" -@class MBLAccelerometerBosch; +import CoreBluetooth -NS_ASSUME_NONNULL_BEGIN -@interface MBLAccelerometerBoschFlatData (Private) - -- (instancetype)initWithIsFlat:(BOOL)isFlat faceDown:(BOOL)faceDown timestamp:(NSDate *)timestamp data:(NSData *)data; -- (instancetype)initWithIsFlat:(BOOL)isFlat timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END +extension CBUUID { + public static let metaWearService = CBUUID(string: "326A9000-85CB-9195-D9DD-464CFBBAE75A") + public static let metaWearCommand = CBUUID(string: "326A9001-85CB-9195-D9DD-464CFBBAE75A") + public static let metaWearNotification = CBUUID(string: "326A9006-85CB-9195-D9DD-464CFBBAE75A") + public static let metaWearDfuService = CBUUID(string: "00001530-1212-EFDE-1523-785FEABCD123") + public static let batteryService = CBUUID(string: "180F") + public static let batteryLife = CBUUID(string: "2A19") + public static let disService = CBUUID(string: "180A") + public static let disModelNumber = CBUUID(string: "2A24") + public static let disSerialNumber = CBUUID(string: "2A25") + public static let disFirmwareRev = CBUUID(string: "2A26") + public static let disHardwareRev = CBUUID(string: "2A27") + public static let disManufacturerName = CBUUID(string: "2A29") +} diff --git a/MetaWear/Internal/Modules/Temperature/MBLOnDieTemperature0.m b/MetaWear/Core/DeviceInformation.swift similarity index 67% rename from MetaWear/Internal/Modules/Temperature/MBLOnDieTemperature0.m rename to MetaWear/Core/DeviceInformation.swift index 37b98d0..74864a4 100644 --- a/MetaWear/Internal/Modules/Temperature/MBLOnDieTemperature0.m +++ b/MetaWear/Core/DeviceInformation.swift @@ -1,9 +1,9 @@ /** - * MBLOnDieTemperature0.m + * DeviceInformation.swift * MetaWear * - * Created by Stephen Schiffli on 7/9/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. + * Created by Stephen Schiffli on 5/3/18. + * Copyright 2018 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights * granted under the terms of a software license agreement between the user who @@ -33,27 +33,22 @@ * contact MbientLab via email: hello@mbientlab.com */ -#import "MBLOnDieTemperature0.h" -#import "MBLNumericFormatter.h" -#import "MBLTemperature+Private.h" +import MetaWearCpp -static const double DEGREES_CELSIUS_PER_UNIT = 0.125; - -@implementation MBLOnDieTemperature0 - -- (instancetype)initWithTemperature:(MBLTemperature *)temperature -{ - self = [super initWithModule:temperature registerId:0x1 format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:YES scale:DEGREES_CELSIUS_PER_UNIT]]; - if (self) { - } - return self; +public struct DeviceInformation { + public let manufacturer: String + public let modelNumber: String + public let serialNumber: String + public let firmwareRevision: String + public let hardwareRevision: String } -- (BFTask *)performAsyncInitialization -{ - MBLTemperature *temperature = (MBLTemperature *)self.module; - temperature.source = MBLTemperatureSourceInternal; - return [super performAsyncInitialization]; +extension MblMwDeviceInformation { + func convert() -> DeviceInformation { + return DeviceInformation(manufacturer: String(cString: manufacturer), + modelNumber: String(cString: model_number), + serialNumber: String(cString: serial_number), + firmwareRevision: String(cString: firmware_revision), + hardwareRevision: String(cString: hardware_revision)) + } } - -@end diff --git a/MetaWear/Internal/Core/MBLLogger.m b/MetaWear/Core/FirmwareBuild.swift similarity index 54% rename from MetaWear/Internal/Core/MBLLogger.m rename to MetaWear/Core/FirmwareBuild.swift index 322b9ef..fa7e66a 100644 --- a/MetaWear/Internal/Core/MBLLogger.m +++ b/MetaWear/Core/FirmwareBuild.swift @@ -1,9 +1,9 @@ /** - * MBLLogger.m - * MetaWear + * FirmwareBuild.swift + * MetaWear-Swift * - * Created by Stephen Schiffli on 10/11/16. - * Copyright 2016 MbientLab Inc. All rights reserved. + * Created by Stephen Schiffli on 1/9/18. + * Copyright 2018 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights * granted under the terms of a software license agreement between the user who @@ -33,39 +33,45 @@ * contact MbientLab via email: hello@mbientlab.com */ +import CoreBluetooth +import BoltsSwift -#import "MBLLogger.h" -#import "MBLMetaWearManager+Private.h" -void MBLLog(MBLLogLevel level, NSString *format, ...) -{ - if (level > [MBLMetaWearManager sharedManager].logLevel || level == MBLLogLevelNone || !format) { - return; - } +public struct FirmwareBuild { + public let hardwareRev: String + public let modelNumber: String + public let buildFlavor: String + public let firmwareRev: String + public let filename: String - va_list args; - va_start(args, format); + public let firmwareURL: URL - NSMutableString *message = nil; - switch (level) { - case MBLLogLevelError: - message = [NSMutableString stringWithFormat:@"[%@]", @"Error"]; - break; - case MBLLogLevelWarning: - message = [NSMutableString stringWithFormat:@"[%@]", @"Warning"]; - break; - case MBLLogLevelInfo: - message = [NSMutableString stringWithFormat:@"[%@]", @"Info"]; - break; - case MBLLogLevelDebug: - message = [NSMutableString stringWithFormat:@"[%@]", @"Debug"]; - break; - case MBLLogLevelNone: - message = [NSMutableString string]; - break; + public init(hardwareRev: String, + modelNumber: String, + firmwareRev: String, + filename: String? = nil, + buildFlavor: String? = nil) { + self.hardwareRev = hardwareRev + self.modelNumber = modelNumber + self.buildFlavor = buildFlavor ?? "vanilla" + self.firmwareRev = firmwareRev + self.filename = filename ?? "firmware.bin" + + self.firmwareURL = URL(string: "https://mbientlab.com/releases/metawear/\(hardwareRev)/\(modelNumber)/\(self.buildFlavor)/\(firmwareRev)/\(self.filename)")! } - [message appendFormat:@": %@", format]; - NSLogv(message, args); - va_end(args); + public init(hardwareRev: String, + modelNumber: String, + firmwareRev: String, + customUrl: URL, + filename: String? = nil, + buildFlavor: String? = nil) { + self.hardwareRev = hardwareRev + self.modelNumber = modelNumber + self.buildFlavor = buildFlavor ?? "vanilla" + self.firmwareRev = firmwareRev + self.filename = filename ?? "firmware.bin" + + self.firmwareURL = customUrl + } } diff --git a/MetaWear/Core/FirmwareServer.swift b/MetaWear/Core/FirmwareServer.swift new file mode 100644 index 0000000..4b79c69 --- /dev/null +++ b/MetaWear/Core/FirmwareServer.swift @@ -0,0 +1,157 @@ +/** + * FirmwareServer.swift + * MetaWear-Swift + * + * Created by Stephen Schiffli on 1/9/18. + * Copyright 2018 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import CoreBluetooth +import BoltsSwift + + +public enum FirmwareError: Error { + case badServerResponse + case noAvailableFirmware(message: String) + case cannotSaveFile(message: String) +} + +public class FirmwareServer { + public static func getAllFirmwareAsync(hardwareRev: String, modelNumber: String, buildFlavor: String = "vanilla") -> Task<[FirmwareBuild]> { + let source = TaskCompletionSource<[FirmwareBuild]>() + // To get the latest firmware version we parse the json from our website, make sure to do + // this on a backgroud thread to avoid hanging the UI. + let request = URLRequest(url: URL(string: "https://mbientlab.com/releases/metawear/info1.json")!, + cachePolicy: .reloadIgnoringLocalAndRemoteCacheData, + timeoutInterval: 10) + URLSession.shared.dataTask(with: request) { (data, response, error) in + guard error == nil else { + source.trySet(error: error!) + return + } + guard let httpResponse = response as? HTTPURLResponse else { + source.trySet(error: FirmwareError.badServerResponse) + return + } + guard httpResponse.statusCode == 200 else { + source.trySet(error: FirmwareError.noAvailableFirmware(message: "Firmware URL \(request.url!) returned code \(httpResponse.statusCode)")) + return + } + + guard let info = try? JSONSerialization.jsonObject(with: data!) as? [String: [String: [String: [String: [String: String]]]]] else { + source.trySet(error: FirmwareError.badServerResponse) + return + } + let sdkVersion = "3.0.0"//Bundle(for: MetaWear.self).infoDictionary?["CFBundleShortVersionString"] ?? "3.0.0" + var allFirmwares: [FirmwareBuild] = [] + if let potentialVersions = info?[hardwareRev]?[modelNumber]?[buildFlavor] { + let validVersions = potentialVersions.filter { sdkVersion.isVersion(greaterThanOrEqualTo: $1["min-ios-version"] ?? "0") } + let sortedVersions = validVersions.sorted { $0.key < $1.key } + allFirmwares = sortedVersions.map { + FirmwareBuild(hardwareRev: hardwareRev, + modelNumber: modelNumber, + firmwareRev: $0, + filename: $1["filename"] ?? "firmware.bin", + buildFlavor: buildFlavor) + } + } + + if allFirmwares.count == 0 { + source.trySet(error: FirmwareError.noAvailableFirmware(message: "No valid firmware releases found. Please update your application and if problem persists, email developers@mbientlab.com")) + } + source.trySet(result: allFirmwares) + }.resume() + return source.task + } + + public static func getLatestFirmwareAsync(hardwareRev: String, modelNumber: String, buildFlavor: String = "vanilla") -> Task { + return FirmwareServer.getAllFirmwareAsync(hardwareRev: hardwareRev, modelNumber: modelNumber, buildFlavor: buildFlavor).continueOnSuccessWith { result in + return result.last! + } + } + + public static func getVersionAsync(hardwareRev: String, + modelNumber: String, + firmwareRev: String) -> Task { + var build = FirmwareBuild(hardwareRev: hardwareRev, + modelNumber: modelNumber, + firmwareRev: firmwareRev, + filename: "firmware.zip") + return build.firmwareURL.downloadAsync().continueWithTask { t -> Task in + if !t.faulted { + return t + } + build = FirmwareBuild(hardwareRev: hardwareRev, + modelNumber: modelNumber, + firmwareRev: firmwareRev, + filename: "firmware.bin") + return build.firmwareURL.downloadAsync() + } + } +} + + +extension URL { + public func downloadAsync() -> Task { + let source = TaskCompletionSource() + // Go grab the file at the URL + let url = self + print("Downloading... \(url)") + URLSession.shared.downloadTask(with: url) { (location, response, error) in + guard error == nil else { + source.trySet(error: error!) + return + } + guard let httpResponse = response as? HTTPURLResponse else { + source.trySet(error: FirmwareError.badServerResponse) + return + } + guard httpResponse.statusCode == 200 else { + source.trySet(error: FirmwareError.noAvailableFirmware(message: "URL \(url) returned code \(httpResponse.statusCode)")) + return + } + // If no download error, then copy the file to a permanent place. Note the location + // variable suppiled is invalid once this block returns. + do { + let tempUrl = try FileManager.default.url(for: .itemReplacementDirectory, + in: .userDomainMask, + appropriateFor: location, + create: true).appendingPathComponent(url.lastPathComponent) + try? FileManager.default.removeItem(at: tempUrl) + try FileManager.default.copyItem(at: location!, to: tempUrl) + source.trySet(result: tempUrl) + print("Download Complete") + } catch { + source.trySet(error: FirmwareError.cannotSaveFile(message: "Couldn't find temp directory to store firmware file. Please report issue to developers@mbientlab.com")) + } + }.resume() + return source.task + } +} diff --git a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData.h b/MetaWear/Core/LogDelegate.swift similarity index 67% rename from MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData.h rename to MetaWear/Core/LogDelegate.swift index a37b8ee..7a9c510 100644 --- a/MetaWear/Classes/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatData.h +++ b/MetaWear/Core/LogDelegate.swift @@ -1,8 +1,8 @@ /** - * MBLAccelerometerBoschFlatData.h - * MetaWear + * LogDelegate.swift + * MetaWear-Swift * - * Created by Stephen Schiffli on 1/18/17. + * Created by Stephen Schiffli on 12/14/17. * Copyright 2017 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights @@ -33,26 +33,39 @@ * contact MbientLab via email: hello@mbientlab.com */ -#import -NS_ASSUME_NONNULL_BEGIN +public protocol LogDelegate { + func logWith(_ level: LogLevel, message: String) +} -/** - Container for accelerometer flat data - */ -@interface MBLAccelerometerBoschFlatData : MBLDataSample - -/** - If YES, then the deivce is currently laying flat - */ -@property (nonatomic, readonly) BOOL isFlat; - -/** - If YES, then the device is flat with the top face down, otherwise it's flat - but with the right side up - */ -@property (nonatomic, readonly) BOOL faceDown; - -@end +public enum LogLevel: Int { + case debug = 0 + case info = 1 + case warning = 2 + case error = 3 + + var name: String { + switch self { + case .debug: + return "debug" + case .info: + return "info" + case .warning: + return "warning" + case .error: + return "error" + } + } +} -NS_ASSUME_NONNULL_END +public struct ConsoleLogger: LogDelegate { + public static let shared = ConsoleLogger() + + public var minLevel = LogLevel.info + public func logWith(_ level: LogLevel, message: String) { + guard level.rawValue >= minLevel.rawValue else { + return + } + print("\(level) \(message)") + } +} diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QRMSFormat.m b/MetaWear/Core/MblMwGattChar.swift similarity index 56% rename from MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QRMSFormat.m rename to MetaWear/Core/MblMwGattChar.swift index 377493f..9ac6a62 100644 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QRMSFormat.m +++ b/MetaWear/Core/MblMwGattChar.swift @@ -1,9 +1,9 @@ /** - * MBLAccelerometerMMA8452QRMSFormat.m - * MetaWear + * MblMwGattChar.swift + * MetaWear-Swift * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. + * Created by Stephen Schiffli on 12/14/17. + * Copyright 2017 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights * granted under the terms of a software license agreement between the user who @@ -33,41 +33,36 @@ * contact MbientLab via email: hello@mbientlab.com */ -#import "MBLAccelerometerMMA8452QRMSFormat.h" -#import "MBLModule+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLRMSAccelerometerData+Private.h" +import CoreBluetooth +import MetaWearCpp -@implementation MBLAccelerometerMMA8452QRMSFormat -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer -{ - self = [super initNumberWithLength:4 isSigned:NO]; - if (self) { - self.accelerometer = accelerometer; +// Helpers for dealing with the C++ version of GATT Service/Characteristic +extension MblMwGattChar: Hashable { + var serviceUUID: CBUUID { + var service_uuid_high_swap = service_uuid_high.byteSwapped + var data = Data(buffer: UnsafeBufferPointer(start: &service_uuid_high_swap, count: 1)) + var service_uuid_low_swap = service_uuid_low.byteSwapped + data.append(UnsafeBufferPointer(start: &service_uuid_low_swap, count: 1)) + return CBUUID(data: data) + } + var characteristicUUID: CBUUID { + var uuid_high_swap = uuid_high.byteSwapped + var data = Data(buffer: UnsafeBufferPointer(start: &uuid_high_swap, count: 1)) + var uuid_low_swap = uuid_low.byteSwapped + data.append(UnsafeBufferPointer(start: &uuid_low_swap, count: 1)) + return CBUUID(data: data) + } + public var hashValue: Int { + return service_uuid_high.hashValue ^ + service_uuid_low.hashValue ^ + uuid_high.hashValue ^ + uuid_low.hashValue + } + public static func ==(lhs: MblMwGattChar, rhs: MblMwGattChar) -> Bool { + return lhs.service_uuid_high == rhs.service_uuid_high && + lhs.service_uuid_low == rhs.service_uuid_low && + lhs.uuid_high == rhs.uuid_high && + lhs.uuid_low == rhs.uuid_low } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLAccelerometerMMA8452QRMSFormat *newFormat = [super copyWithZone:zone]; - newFormat.accelerometer = self.accelerometer; - return newFormat; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - const uint32_t raw = *(uint32_t *)data.bytes; - double rms = (double)raw / 1000.0; - return [[MBLRMSAccelerometerData alloc] initWithRMS:rms timestamp:date data:data]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - int firmwareUnit = value * 1000.0; - return [NSNumber numberWithInt:firmwareUnit]; } - -@end diff --git a/MetaWear/Internal/Core/MBLDispatchQueue.m b/MetaWear/Core/MetaBootFinder.swift similarity index 52% rename from MetaWear/Internal/Core/MBLDispatchQueue.m rename to MetaWear/Core/MetaBootFinder.swift index 1f31830..ad3d248 100644 --- a/MetaWear/Internal/Core/MBLDispatchQueue.m +++ b/MetaWear/Core/MetaBootFinder.swift @@ -1,9 +1,9 @@ /** - * MBLDispatchQueue.m - * MetaWear + * MetaBootFinder.swift + * MetaWear-Swift * - * Created by Stephen Schiffli on 11/2/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. + * Created by Stephen Schiffli on 1/10/18. + * Copyright 2018 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights * granted under the terms of a software license agreement between the user who @@ -33,79 +33,50 @@ * contact MbientLab via email: hello@mbientlab.com */ -#import "MBLDispatchQueue.h" -#import "MBLMetaWearManager+Private.h" +import CoreBluetooth +import BoltsSwift -@interface MBLDispatchQueue () -@property (nonatomic) NSObject *queueMutex; -@property (nonatomic) NSOperationQueue *queue; -@property (nonatomic) int suspendCount; -@end -@implementation MBLDispatchQueue - -- (instancetype)initWithName:(NSString *)name -{ - self = [super init]; - if (self) { - self.queueMutex = [[NSObject alloc] init]; - self.queue = [[NSOperationQueue alloc] init]; - self.queue.name = name; - self.queue.maxConcurrentOperationCount = 1; - self.suspendCount = 0; +fileprivate let peripheralFinderQueue = DispatchQueue(label: "com.mbientlab.PeripheralFinderQueue") +public class MetaBootFinder: NSObject { + let uuid: UUID + let source = TaskCompletionSource<(CBCentralManager, CBPeripheral)>() + var central: CBCentralManager? + + public init(_ uuid: UUID) { + self.uuid = uuid } - return self; -} - -- (void)addOperationWithBlock:(MBLVoidHandler)block -{ - if (block) { - @synchronized(self.queueMutex) { - [self.queue addOperationWithBlock:block]; + + public func start() -> Task<(CBCentralManager, CBPeripheral)> { + if central == nil { + central = CBCentralManager(delegate: self, queue: peripheralFinderQueue) } + return source.task } } -- (BOOL)suspend -{ - BOOL wasSuspended = YES; - @synchronized(self.queueMutex) { - if (self.suspendCount == 0) { - self.queue.suspended = YES; - wasSuspended = NO; +extension MetaBootFinder: CBCentralManagerDelegate { + public func centralManagerDidUpdateState(_ central: CBCentralManager) { + switch central.state { + case .unsupported: + source.trySet(error: MetaWearError.bluetoothUnsupported) + case .unauthorized: + source.trySet(error: MetaWearError.bluetoothUnauthorized) + case .poweredOff: + source.trySet(error: MetaWearError.bluetoothPoweredOff) + case .unknown: + break // update imminent + case .resetting: + break // update imminent + case .poweredOn: + central.scanForPeripherals(withServices: [.metaWearDfuService]) } - self.suspendCount++; } - return wasSuspended; -} - -- (void)resume -{ - @synchronized(self.queueMutex) { - if (self.suspendCount == 1) { - self.queue.suspended = NO; - } - if (self.suspendCount > 0) { - self.suspendCount--; + + public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { + if peripheral.identifier == uuid { + central.stopScan() + source.trySet(result: (central, peripheral)) } } } - -- (void)forceResume -{ - @synchronized(self.queueMutex) { - self.suspendCount = 0; - self.queue.suspended = NO; - } -} - -- (void)reset -{ - @synchronized(self.queueMutex) { - [self.queue cancelAllOperations]; - self.suspendCount = 0; - self.queue.suspended = NO; - } -} - -@end diff --git a/MetaWear/Core/MetaWear.swift b/MetaWear/Core/MetaWear.swift new file mode 100644 index 0000000..c18e823 --- /dev/null +++ b/MetaWear/Core/MetaWear.swift @@ -0,0 +1,491 @@ +/** + * MetaWear.swift + * MetaWear-Swift + * + * Created by Stephen Schiffli on 12/14/17. + * Copyright 2017 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import CoreBluetooth +import MetaWearCpp +import BoltsSwift + + +public enum MetaWearError: Error { + case operationFailed(message: String) + case bluetoothUnsupported + case bluetoothUnauthorized + case bluetoothPoweredOff +} + +// Folder to store device information +fileprivate let appSupportDirectory = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first! +fileprivate let adQueue = DispatchQueue(label: "com.mbientlab.adQueue") + +public class MetaWear: NSObject { + public var logDelegate: LogDelegate? + public let peripheral: CBPeripheral + public internal(set) weak var scanner: MetaWearScanner? + public internal(set) var board: OpaquePointer! + public internal(set) var advertisementData: [String : Any] { + get { + return adQueue.sync { advertisementDataImpl } + } + set { + adQueue.sync { advertisementDataImpl = newValue } + } + } + public internal(set) var rssi: Int = 0 + public internal(set) var mac: String? + public internal(set) var info: DeviceInformation? + public internal(set) var isConnectedAndSetup = false + public var isMetaBoot: Bool { + let services = advertisementData[CBAdvertisementDataServiceUUIDsKey] as? [CBUUID] + return services?.contains(.metaWearDfuService) ?? false + } + public var name: String { + // peripheral.name may be cached, use the name from advertising data + let adName = advertisementData[CBAdvertisementDataLocalNameKey] as? String + return adName ?? peripheral.name ?? "MetaWear" + } + public var advertisementReceived: (() -> Void)? + public var uniqueUrl: URL { + var url = appSupportDirectory.appendingPathComponent("com.mbientlab.devices", isDirectory: true) + try? FileManager.default.createDirectory(at: url, withIntermediateDirectories: true) + url.appendPathComponent(peripheral.identifier.uuidString + ".file") + return url + } + + public func averageRSSI(lastNSeconds: Double = 5.0) -> Double? { + let filteredRSSI = rssiHistory.filter { -$0.0.timeIntervalSinceNow < lastNSeconds } + guard filteredRSSI.count > 0 else { + return nil + } + let sumArray = filteredRSSI.reduce(0.0) { $0 + $1.1 } + return sumArray / Double(filteredRSSI.count) + } + + // The result of the task returned can be used to watch for disconnects + public func connectAndSetup() -> Task> { + let source = TaskCompletionSource>() + scanner?.bleQueue.async { + guard !self.isConnectedAndSetup else { + let disconnectSource = TaskCompletionSource() + self.disconnectionSources.append(disconnectSource) + source.trySet(result: disconnectSource.task) + return + } + self.connectionSources.append(source) + if self.connectionSources.count == 1 { + self.scanner?.connect(self) + } + } + return source.task + } + + public func cancelConnection() { + scanner?.cancelConnection(self) + } + + public func remember() { + scanner?.remember(self) + } + + public func forget() { + scanner?.forget(self) + } + + public func serialize() -> [UInt8] { + var count: UInt32 = 0 + let start = mbl_mw_metawearboard_serialize(board, &count) + let data = Array(UnsafeBufferPointer(start: start, count: Int(count))) + mbl_mw_memory_free(start) + return data + } + + public func deserialize(_ _data: [UInt8]) { + var data = _data + mbl_mw_metawearboard_deserialize(board, &data, UInt32(data.count)) + } + + public func readHardwareRev() -> Task { + return readCharacteristic(.disService, .disHardwareRev).continueOnSuccessWith { + return String(data: $0, encoding: .utf8) ?? "" + } + } + + public func readModelNumber() -> Task { + return readCharacteristic(.disService, .disModelNumber).continueOnSuccessWith { + return String(data: $0, encoding: .utf8) ?? "" + } + } + + public func readFirmwareRev() -> Task { + return readCharacteristic(.disService, .disFirmwareRev).continueOnSuccessWith { + return String(data: $0, encoding: .utf8) ?? "" + } + } + + public func latestFirmware() -> Task { + let tasks = [readHardwareRev(), readModelNumber()] + return Task.whenAllResult(tasks).continueOnSuccessWithTask { result -> Task in + return FirmwareServer.getLatestFirmwareAsync(hardwareRev: result[0], modelNumber: result[1]) + } + } + + public func checkForFirmwareUpdate() -> Task { + var latestBuild: FirmwareBuild? + return latestFirmware().continueOnSuccessWithTask { result -> Task in + latestBuild = result + return self.readFirmwareRev() + }.continueOnSuccessWith { result in + if result.isVersion(lessThan: latestBuild!.firmwareRev) { + return latestBuild + } + return nil + } + } + + public func getCharacteristic(_ serviceUUID: CBUUID, + _ characteristicUUID: CBUUID) -> (error: Error?, characteristic: CBCharacteristic?) { + guard self.isConnectedAndSetup else { + return (MetaWearError.operationFailed(message: "call connectAndSetup before performing operations"), nil) + } + guard let service = self.peripheral.services?.first(where: { $0.uuid == serviceUUID }) else { + return (MetaWearError.operationFailed(message: "service not found"), nil) + } + guard let characteristic = service.characteristics?.first(where: { $0.uuid == characteristicUUID }) else { + return (MetaWearError.operationFailed(message: "characteristics not found"), nil) + } + return (nil, characteristic) + } + + public func readCharacteristic(_ serviceUUID: CBUUID, _ characteristicUUID: CBUUID) -> Task { + let source = TaskCompletionSource() + scanner?.bleQueue.async { + let result = self.getCharacteristic(serviceUUID, characteristicUUID) + guard let characteristic = result.characteristic else { + source.trySet(error: result.error!) + return + } + var tmp = self.localReadCallbacks[characteristic] ?? [] + tmp.append(source) + self.localReadCallbacks[characteristic] = tmp + self.peripheral.readValue(for: characteristic) + } + return source.task + } + + /// Internal details below + fileprivate var gattCharMap: [MblMwGattChar: CBCharacteristic] = [:] + fileprivate var subscribeCompleteCallbacks: [CBCharacteristic: MblMwFnVoidVoidPtrInt] = [:] + fileprivate var onDataCallbacks: [CBCharacteristic: MblMwFnIntVoidPtrArray] = [:] + fileprivate var onReadCallbacks: [CBCharacteristic: MblMwFnIntVoidPtrArray] = [:] + fileprivate var onDisconnectCallback: MblMwFnVoidVoidPtrInt? + fileprivate var disconnectionSources: [TaskCompletionSource] = [] + fileprivate var connectionSources: [TaskCompletionSource>] = [] + fileprivate var localReadCallbacks: [CBCharacteristic: [TaskCompletionSource]] = [:] + fileprivate var advertisementDataImpl: [String : Any] = [:] + + fileprivate var serviceCount = 0 + var rssiHistory: [(Date, Double)] = [] + + init(peripheral: CBPeripheral, scanner: MetaWearScanner) { + self.peripheral = peripheral + self.scanner = scanner + super.init() + self.peripheral.delegate = self + var connection = MblMwBtleConnection(context: bridge(obj: self), + write_gatt_char: writeGattChar, + read_gatt_char: readGattChar, + enable_notifications: enableNotifications, + on_disconnect: onDisconnect) + self.board = mbl_mw_metawearboard_create(&connection) + self.mac = UserDefaults.standard.string(forKey: "com.mbientlab.macstorage." + peripheral.identifier.uuidString) + } + + func didConnect() { + // Perform a service discovery and setup + peripheral.discoverServices([ + .metaWearService, + .metaWearDfuService, + .batteryService, + .disService + ]) + } + func didFailToConnect(error: Error?) { + invokeConnectionHandlers(error: error, cancelled: false) + invokeDisconnectionHandlers(error: error) + } + func didDisconnectPeripheral(error: Error?) { + onDisconnectCallback?(UnsafeRawPointer(board), 0) + onDisconnectCallback = nil + invokeConnectionHandlers(error: error, cancelled: error == nil) + invokeDisconnectionHandlers(error: error) + } + func invokeDisconnectionHandlers(error: Error?) { + assert(DispatchQueue.isBleQueue) + self.isConnectedAndSetup = false + let unexpected = (error != nil) && (error as? CBError)?.code != .peripheralDisconnected + self.disconnectionSources.forEach { unexpected ? $0.set(error: error!) : $0.set(result: self) } + self.disconnectionSources.removeAll(keepingCapacity: true) + } + func invokeConnectionHandlers(error: Error?, cancelled: Bool) { + assert(DispatchQueue.isBleQueue) + if !cancelled && error == nil { + self.isConnectedAndSetup = true + } + // Clear out the connectionSources array now because we use the + // length as an indication of a pending operation, and if any of + // the callback call connectAndSetup, we need the right thing to happen + let localConnectionSources = connectionSources + connectionSources.removeAll(keepingCapacity: true) + + if let error = error { + localConnectionSources.forEach { $0.trySet(error: error) } + } else if cancelled { + localConnectionSources.forEach { $0.tryCancel() } + } else { + let source = TaskCompletionSource() + disconnectionSources.append(source) + localConnectionSources.forEach { $0.trySet(result: source.task) } + } + } + fileprivate func getCharacteristic(_ characteristicPtr: UnsafePointer?) -> CBCharacteristic? { + guard let characteristicPtr = characteristicPtr else { + return nil + } + if let characteristic = gattCharMap[characteristicPtr.pointee] { + return characteristic + } + + let serviceUUID = characteristicPtr.pointee.serviceUUID + let _service = peripheral.services?.first { service -> Bool in + return service.uuid == serviceUUID + } + guard let service = _service else { + return nil + } + + let characteristicUUID = characteristicPtr.pointee.characteristicUUID + let _characteristic = service.characteristics?.first { characteristic -> Bool in + return characteristic.uuid == characteristicUUID + } + guard let characteristic = _characteristic else { + return nil + } + + gattCharMap[characteristicPtr.pointee] = characteristic + return characteristic + } +} + +extension MetaWear: CBPeripheralDelegate { + public func peripheral(_ peripheral: CBPeripheral, didDiscoverServices error: Error?) { + gattCharMap = [:] + serviceCount = 0 + for service in peripheral.services! { + switch service.uuid { + case .metaWearService: + peripheral.discoverCharacteristics([ + .metaWearCommand, + .metaWearNotification], for: service) + case .batteryService: + peripheral.discoverCharacteristics([.batteryLife], for: service) + case .disService: + peripheral.discoverCharacteristics( + [.disManufacturerName, + .disSerialNumber, + .disHardwareRev, + .disFirmwareRev, + .disModelNumber], for: service) + case .metaWearDfuService: + break // Expected service, but we don't need to discover its characteristics + default: + let error = MetaWearError.operationFailed(message: "MetaWear device contained an unexpected BLE service. Please try connection again.") + self.invokeConnectionHandlers(error: error, cancelled: false) + self.invokeDisconnectionHandlers(error: error) + self.cancelConnection() + break + } + } + } + public func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) { + guard !isMetaBoot else { + scanner?.bleQueue.async { + self.invokeConnectionHandlers(error: nil, cancelled: false) + } + return + } + serviceCount += 1 + if serviceCount == 3 { + // Setup the CPP SDK + mbl_mw_metawearboard_initialize(board, bridgeRetained(obj: self)) { (context, board, code) in + let device: MetaWear = bridgeTransfer(ptr: context!) + let error = code != 0 ? MetaWearError.operationFailed(message: "initialized failed: \(code)") : nil + // Finished if we had an error + guard error == nil else { + device.scanner?.bleQueue.async { + device.invokeConnectionHandlers(error: error, cancelled: false) + device.cancelConnection() + } + return + } + // Grab the device info + let rawInfo = mbl_mw_metawearboard_get_device_information(device.board) + device.info = rawInfo?.pointee.convert() + mbl_mw_memory_free(UnsafeMutableRawPointer(mutating: rawInfo)) + // Grab and cache the mac address if needed + var task = Task<()>(()) + if device.mac == nil { + let source = TaskCompletionSource() + let signal = mbl_mw_settings_get_mac_data_signal(board) + mbl_mw_datasignal_subscribe(signal, bridgeRetained(obj: source)) { (context, dataPtr) in + let source: TaskCompletionSource = bridgeTransfer(ptr: context!) + if let dataPtr = dataPtr { + source.set(result: dataPtr.pointee.valueAs()) + } else { + source.set(error: MetaWearError.operationFailed(message: "failed not read mac")) + } + } + mbl_mw_datasignal_read(signal) + task = source.task.continueWith { + mbl_mw_datasignal_unsubscribe(signal) + device.mac = $0.result + UserDefaults.standard.set(device.mac , forKey: "com.mbientlab.macstorage." + device.peripheral.identifier.uuidString) + } + } + // Finish off the connections + if let bleQueue = device.scanner?.bleQueue { + task.continueWith(.queue(bleQueue)) { _ in + device.invokeConnectionHandlers(error: nil, cancelled: false) + } + } + } + } + } + public func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { + guard error == nil else { + logDelegate?.logWith(.error, message: "didUpdateValueForCharacteristic \(error!)") + return + } + if characteristic.uuid == .metaWearNotification { + logDelegate?.logWith(.info, message: "Received: \(characteristic.value?.hexEncodedString() ?? "N/A")") + } else { + logDelegate?.logWith(.info, message: "didUpdateValueForCharacteristic \(characteristic)") + } + guard let data = characteristic.value else { + return + } + if let onRead = onReadCallbacks[characteristic] { + data.withUnsafeBytes { (bytes: UnsafePointer) -> () in + let _ = onRead(UnsafeRawPointer(board), bytes, UInt8(data.count)) + } + onReadCallbacks.removeValue(forKey: characteristic) + } + if let onData = onDataCallbacks[characteristic] { + data.withUnsafeBytes { (bytes: UnsafePointer) -> () in + let _ = onData(UnsafeRawPointer(board), bytes, UInt8(data.count)) + } + } + if let sources = localReadCallbacks.removeValue(forKey: characteristic) { + sources.forEach { $0.trySet(result: data) } + } + } + public func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) { + // didWriteValueFor + } + public func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: Error?) { + logDelegate?.logWith(.info, message: "didUpdateNotificationStateFor \(characteristic)") + subscribeCompleteCallbacks[characteristic]?(UnsafeRawPointer(board), error == nil ? 0 : 1) + } +} + +fileprivate var commandCount = 0 +// Global callback functions +fileprivate func writeGattChar(context: UnsafeMutableRawPointer?, + caller: UnsafeRawPointer?, + writeType: MblMwGattCharWriteType, + characteristicPtr: UnsafePointer?, + valuePtr: UnsafePointer?, + length: UInt8) { + let device: MetaWear = bridge(ptr: context!) + if let charToWrite = device.getCharacteristic(characteristicPtr) { + let data = Data(bytes: valuePtr!, count: Int(length)) + device.logDelegate?.logWith(.info, message: "Writing: \(charToWrite.uuid) \(data.hexEncodedString())") + // Throttle by having every Nth request wait for response + commandCount += 1 + let type: CBCharacteristicWriteType = commandCount % 10 == 0 ? .withResponse : .withoutResponse + device.peripheral.writeValue(data, for: charToWrite, type: type) + } +} + +fileprivate func readGattChar(context: UnsafeMutableRawPointer?, + caller: UnsafeRawPointer?, + characteristicPtr: UnsafePointer?, + callback: MblMwFnIntVoidPtrArray?) { + let device: MetaWear = bridge(ptr: context!) + if let charToRead = device.getCharacteristic(characteristicPtr) { + // Save the callback + device.onReadCallbacks[charToRead] = callback + // Request the read + device.peripheral.readValue(for: charToRead) + } +} + +fileprivate func enableNotifications(context: UnsafeMutableRawPointer?, + caller: UnsafeRawPointer?, + characteristicPtr: UnsafePointer?, + onData: MblMwFnIntVoidPtrArray?, + subscribeComplete: MblMwFnVoidVoidPtrInt?) { + let device: MetaWear = bridge(ptr: context!) + if let charToNotify = device.getCharacteristic(characteristicPtr) { + // Save the callbacks + device.onDataCallbacks[charToNotify] = onData + device.subscribeCompleteCallbacks[charToNotify] = subscribeComplete + // Turn on the notification stream + device.peripheral.setNotifyValue(true, for: charToNotify) + } else { + subscribeComplete?(caller, 1) + } +} + +fileprivate func onDisconnect(context: UnsafeMutableRawPointer?, + caller: UnsafeRawPointer?, + handler: MblMwFnVoidVoidPtrInt?) { + let device: MetaWear = bridge(ptr: context!) + device.onDisconnectCallback = handler +} + +extension Data { + public func hexEncodedString() -> String { + return map { String(format: "%02hhx", $0) }.joined() + } +} diff --git a/MetaWear/Core/MetaWearData.swift b/MetaWear/Core/MetaWearData.swift new file mode 100644 index 0000000..7f5dbc5 --- /dev/null +++ b/MetaWear/Core/MetaWearData.swift @@ -0,0 +1,103 @@ +/** + * MetaWearData.swift + * MetaWear-Swift + * + * Created by Stephen Schiffli on 12/14/17. + * Copyright 2017 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import MetaWearCpp + + +// Native swift struct for holding data from the MetaWear +// This was created because the C++ library destroys MblMwData objects +// after the callbacks, but sometimes we need them to live longer +public struct MetaWearData { + public let timestamp: Date + let data: [UInt8] + let typeId: MblMwDataTypeId + + public func valueAs() -> T { + return doTheParse(length: UInt8(data.count), type_id: typeId, value: UnsafeRawPointer(data)) + } +} + +extension MblMwData { + public func copy() -> MetaWearData { + let arrayPtr = value.bindMemory(to: UInt8.self, capacity: Int(length)) + return MetaWearData(timestamp: timestamp, + data: Array(UnsafeBufferPointer(start: arrayPtr, count: Int(length))), + typeId: type_id) + } + public var timestamp: Date { + return Date(timeIntervalSince1970: Double(epoch) / 1000.0) + } + public func valueAs() -> T { + return doTheParse(length: length, type_id: type_id, value: value) + } +} + +fileprivate func doTheParse(length: UInt8, type_id: MblMwDataTypeId, value: UnsafeRawPointer) -> T { + guard type_id != MBL_MW_DT_ID_STRING else { + assert(T.self == String.self || T.self == String?.self) + return String(cString: value.assumingMemoryBound(to: CChar.self)) as! T + } + // Generalized flow + assert(MemoryLayout.size == length) + switch type_id { + case MBL_MW_DT_ID_UINT32: + assert(T.self == UInt32.self) + case MBL_MW_DT_ID_FLOAT: + assert(T.self == Float.self) + case MBL_MW_DT_ID_CARTESIAN_FLOAT: + assert(T.self == MblMwCartesianFloat.self) + case MBL_MW_DT_ID_INT32: + assert(T.self == Int32.self) + case MBL_MW_DT_ID_BYTE_ARRAY: + assert(T.self == [UInt8].self) + case MBL_MW_DT_ID_BATTERY_STATE: + assert(T.self == MblMwBatteryState.self) + case MBL_MW_DT_ID_TCS34725_ADC: + assert(T.self == MblMwTcs34725ColorAdc.self) + case MBL_MW_DT_ID_EULER_ANGLE: + assert(T.self == MblMwEulerAngles.self) + case MBL_MW_DT_ID_QUATERNION: + assert(T.self == MblMwQuaternion.self) + case MBL_MW_DT_ID_CORRECTED_CARTESIAN_FLOAT: + assert(T.self == MblMwCorrectedCartesianFloat.self) + case MBL_MW_DT_ID_OVERFLOW_STATE: + assert(T.self == MblMwOverflowState.self) + case MBL_MW_DT_ID_SENSOR_ORIENTATION: + assert(T.self == MblMwSensorOrientation.self) + default: + fatalError("unknown data type") + } + return value.bindMemory(to: T.self, capacity: 1).pointee +} diff --git a/MetaWear/Core/MetaWearScanner.swift b/MetaWear/Core/MetaWearScanner.swift new file mode 100644 index 0000000..04da0d6 --- /dev/null +++ b/MetaWear/Core/MetaWearScanner.swift @@ -0,0 +1,245 @@ +/** + * MetaWearScanner.swift + * MetaWear-Swift + * + * Created by Stephen Schiffli on 12/14/17. + * Copyright 2017 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import CoreBluetooth +import BoltsSwift + + +fileprivate let rememberedDevicesKey = "com.mbientlab.rememberedDevices" +fileprivate var scannerCount = 0 + +public class MetaWearScanner: NSObject { + public static let shared = MetaWearScanner() + + public var deviceMap: [CBPeripheral: MetaWear] = [:] + public var didUpdateState: ((CBCentralManager) -> Void)? { + didSet { + didUpdateState?(central) + } + } + + public override init() { + super.init() + let options: [String : Any] = [:] + //options[CBCentralManagerOptionRestoreIdentifierKey] = restoreIdentifier + self.central = CBCentralManager(delegate: self, + queue: bleQueue, + options: options) + } + + public func startScan(allowDuplicates: Bool, callback: @escaping (MetaWear) -> Void) { + runWhenPoweredOn { + self.callback = callback + self.central.scanForPeripherals(withServices: [.metaWearService, + .metaWearDfuService], + options: [CBCentralManagerScanOptionAllowDuplicatesKey: allowDuplicates]) + } + } + + public func stopScan() { + self.callback = nil + runWhenPoweredOn { + self.central.stopScan() + } + } + + public func retrieveSavedMetaWearsAsync() -> Task<[MetaWear]> { + let source = TaskCompletionSource<[MetaWear]>() + runWhenPoweredOn { + var devices: [MetaWear] = [] + if let ids = UserDefaults.standard.stringArray(forKey: rememberedDevicesKey) { + let uuids = ids.map { UUID(uuidString: $0)! } + let peripherals = self.central.retrievePeripherals(withIdentifiers: uuids) + devices = peripherals.map { peripheral -> MetaWear in + let device = self.deviceMap[peripheral] ?? MetaWear(peripheral: peripheral, scanner: self) + self.deviceMap[peripheral] = device + return device + } + } + source.trySet(result: devices) + } + return source.task + } + + + // Internal details below + var allowDuplicates: Bool = false + var callback: ((MetaWear) -> Void)? + var central: CBCentralManager! = nil + var isScanning = false + var centralStateUpdateSources: [TaskCompletionSource<()>] = [] + var runOnPowerOn: [() -> Void] = [] + let bleQueue: DispatchQueue = { + let queue = DispatchQueue(label: "com.mbientlab.bleQueue\(scannerCount)") + scannerCount += 1 + queue.setSpecific(key: bleQueueKey, value: bleQueueValue) + return queue + }() + + func connect(_ device: MetaWear) { + runWhenPoweredOn { + self.central.connect(device.peripheral) + } + } + + func cancelConnection(_ device: MetaWear) { + runWhenPoweredOn { + self.central.cancelPeripheralConnection(device.peripheral) + } + } + + func runWhenPoweredOn(_ code: @escaping () -> Void) { + bleQueue.async { + if self.central.state == .poweredOn { + code() + } else { + self.runOnPowerOn.append(code) + } + } + } + + func remember(_ device: MetaWear) { + let idString = device.peripheral.identifier.uuidString + var devices = UserDefaults.standard.stringArray(forKey: rememberedDevicesKey) ?? [] + if !devices.contains(idString) { + devices.append(idString) + } + UserDefaults.standard.set(devices, forKey: rememberedDevicesKey) + } + func forget(_ device: MetaWear) { + var devices = UserDefaults.standard.stringArray(forKey: rememberedDevicesKey) + if let idx = devices?.index(of: device.peripheral.identifier.uuidString) { + devices?.remove(at: idx) + UserDefaults.standard.set(devices, forKey: rememberedDevicesKey) + } + } + + func updateCentralStateSource(_ source: TaskCompletionSource<()>) { + switch central.state { + case .unknown: + break // Updates are imminent, so wait + case .resetting: + break // Updates are imminent, so wait + case .unsupported: + source.set(error: MetaWearError.bluetoothUnsupported) + case .unauthorized: + source.set(error: MetaWearError.bluetoothUnauthorized) + case .poweredOff: + source.set(error: MetaWearError.bluetoothPoweredOff) + case .poweredOn: + source.set(result: ()) + } + } + + func centralStateTask() -> Task<()> { + let source = TaskCompletionSource<()>() + bleQueue.async { + self.updateCentralStateSource(source) + if !source.task.completed { + self.centralStateUpdateSources.append(source) + } + } + return source.task + } +} + +fileprivate let bleQueueKey = DispatchSpecificKey() +fileprivate let bleQueueValue = 1111 +extension DispatchQueue { + class var isBleQueue: Bool { + return DispatchQueue.getSpecific(key: bleQueueKey) == bleQueueValue + } +} + +extension MetaWearScanner: CBCentralManagerDelegate { + public func centralManagerDidUpdateState(_ central: CBCentralManager) { + didUpdateState?(central) + + // TODO: This seems like an iOS bug. If bluetooth powers off the + // peripherials disconnect, but we don't get a deviceDidDisconnect callback. + if central.state != .poweredOn { + deviceMap.forEach { $0.value.didDisconnectPeripheral(error: MetaWearError.bluetoothPoweredOff) } + } + // Execute all commands when the central is ready + if central.state == .poweredOn { + let localRunOnPowerOn = runOnPowerOn + runOnPowerOn.removeAll() + localRunOnPowerOn.forEach { $0() } + } + + centralStateUpdateSources.forEach { self.updateCentralStateSource($0) } + centralStateUpdateSources = centralStateUpdateSources.filter { !$0.task.completed } + } + public func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) { + let device = deviceMap[peripheral] ?? MetaWear(peripheral: peripheral, scanner: self) + deviceMap[peripheral] = device + device.advertisementData = advertisementData + device.rssi = RSSI.intValue + // Timestamp and save the last N RSSI samples + device.rssiHistory.insert((Date(), RSSI.doubleValue), at: 0) + if device.rssiHistory.count > 10 { + device.rssiHistory.removeLast() + } + device.advertisementReceived?() + callback?(device) + } + public func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { + deviceMap[peripheral]?.didConnect() + } + public func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) { + deviceMap[peripheral]?.didFailToConnect(error: error) + } + public func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { + deviceMap[peripheral]?.didDisconnectPeripheral(error: error) + } + // public func centralManager(_ central: CBCentralManager, willRestoreState dict: [String : Any]) { + // MetaWearScanner.willRestoreState?(dict) + + // An array (an instance of NSArray) of CBPeripheral objects that contains + // all of the peripherals that were connected to the central manager + // (or had a connection pending) at the time the app was terminated by the system. + // let a = dict[CBCentralManagerRestoredStatePeripheralsKey] + + // An array (an instance of NSArray) of service UUIDs (represented by CBUUID objects) + // that contains all the services the central manager was scanning for at the + // time the app was terminated by the system. + // let b = dict[CBCentralManagerRestoredStateScanServicesKey] + + // A dictionary (an instance of NSDictionary) that contains all of the + // peripheral scan options that were being used by the central manager + // at the time the app was terminated by the system. + // let c = dict[CBCentralManagerRestoredStateScanOptionsKey] + // } +} diff --git a/MetaWear/Core/String+VersionCompare.swift b/MetaWear/Core/String+VersionCompare.swift new file mode 100644 index 0000000..df9de97 --- /dev/null +++ b/MetaWear/Core/String+VersionCompare.swift @@ -0,0 +1,66 @@ +/** + * String+VersionCompare.swift + * MetaWear-Swift + * + * Created by Stephen Schiffli on 1/22/18. + * Copyright 2018 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + + +extension String { + /// Inner comparison utility to handle same versions with different length. (Ex: "1.0.0" & "1.0") + private func compare(toVersion targetVersion: String) -> ComparisonResult { + let versionDelimiter = "." + var result: ComparisonResult = .orderedSame + var versionComponents = components(separatedBy: versionDelimiter) + var targetComponents = targetVersion.components(separatedBy: versionDelimiter) + let spareCount = versionComponents.count - targetComponents.count + + if spareCount == 0 { + result = compare(targetVersion, options: .numeric) + } else { + let spareZeros = repeatElement("0", count: abs(spareCount)) + if spareCount > 0 { + targetComponents.append(contentsOf: spareZeros) + } else { + versionComponents.append(contentsOf: spareZeros) + } + result = versionComponents.joined(separator: versionDelimiter) + .compare(targetComponents.joined(separator: versionDelimiter), options: .numeric) + } + return result + } + + public func isVersion(equalTo targetVersion: String) -> Bool { return compare(toVersion: targetVersion) == .orderedSame } + public func isVersion(greaterThan targetVersion: String) -> Bool { return compare(toVersion: targetVersion) == .orderedDescending } + public func isVersion(greaterThanOrEqualTo targetVersion: String) -> Bool { return compare(toVersion: targetVersion) != .orderedAscending } + public func isVersion(lessThan targetVersion: String) -> Bool { return compare(toVersion: targetVersion) == .orderedAscending } + public func isVersion(lessThanOrEqualTo targetVersion: String) -> Bool { return compare(toVersion: targetVersion) != .orderedDescending } +} diff --git a/MetaWear/Internal/Categories/BFTask+MBLPrivate.h b/MetaWear/Internal/Categories/BFTask+MBLPrivate.h deleted file mode 100644 index a05ca37..0000000 --- a/MetaWear/Internal/Categories/BFTask+MBLPrivate.h +++ /dev/null @@ -1,71 +0,0 @@ -/** - * BFTask+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface BFExecutor (MBLPrivate) - -+ (instancetype)metaWearExecutor; -+ (instancetype)simulatorExecutor; - -@end - - -@interface BFTask<__covariant ResultType> (MBLPrivate) - -typedef void (^MBLPrivateSuccessBlock)(ResultType result); -typedef void (^MBLPrivateErrorBlock)(NSError *error); -typedef __nullable id(^MBLPrivateContinuationBlock)(BFTask *t); - -- (BFTask *)successOnMetaWear:(MBLPrivateSuccessBlock)block NS_SWIFT_NAME(successOnMetaWear(block:)); -- (BFTask *)failureOnMetaWear:(MBLPrivateErrorBlock)block NS_SWIFT_NAME(failureOnMetaWear(block:)); - -- (BFTask *)continueOnMetaWearWithSuccessBlock:(MBLPrivateContinuationBlock)block NS_SWIFT_NAME(continueOnMetaWearWithSuccess(block:)); -- (BFTask *)continueOnMetaWearWithBlock:(MBLPrivateContinuationBlock)block NS_SWIFT_NAME(continueOnMetaWear(block:)); - -+ (instancetype)taskFromMetaWearWithBlock:(id (^)(void))block; -+ (instancetype)taskFromSimulatorWithBlock:(id (^)(void))block; - -@end - - -extern void MBLForceLoadCategory_BFTask_Private(void); - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Categories/BFTask+MBLPrivate.m b/MetaWear/Internal/Categories/BFTask+MBLPrivate.m deleted file mode 100644 index 81955bd..0000000 --- a/MetaWear/Internal/Categories/BFTask+MBLPrivate.m +++ /dev/null @@ -1,119 +0,0 @@ -/** - * BFTask+Private.m - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "BFTask+MBLPrivate.h" -#import "MBLConstants+Private.h" - -@implementation BFExecutor (MBLPrivate) - -+ (BFExecutor *)metaWearExecutor -{ - static BFExecutor *singleton; - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - singleton = [BFExecutor executorWithDispatchQueue:[MBLConstants metaWearQueue]]; - }); - return singleton; -} - -+ (BFExecutor *)simulatorExecutor -{ - static BFExecutor *singleton; - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - // Time simulator queue is like a sub-queue of metaWearQueue - singleton = [BFExecutor executorWithBlock:^void(void(^block)(void)) { - dispatch_async([MBLConstants metaWearQueue], ^{ - dispatch_sync([MBLConstants simulatorQueue], block); - }); - }]; - }); - return singleton; -} -@end - -@implementation BFTask (Private) - -- (BFTask *)successOnMetaWear:(MBLPrivateSuccessBlock)block -{ - return [self continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - block(task.result); - return task; - }]; -} - -- (BFTask *)failureOnMetaWear:(MBLPrivateErrorBlock)block -{ - return [self continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.error) { - block(task.error); - } - return task; - }]; -} - -- (BFTask *)continueOnMetaWearWithSuccessBlock:(MBLPrivateContinuationBlock)block -{ - BFExecutor *executor = [MBLConstants isSimulatorQueue] ? [BFExecutor simulatorExecutor] : [BFExecutor metaWearExecutor]; - return [self continueWithExecutor:executor withSuccessBlock:block]; -} - -- (BFTask *)continueOnMetaWearWithBlock:(MBLPrivateContinuationBlock)block -{ - BFExecutor *executor = [MBLConstants isSimulatorQueue] ? [BFExecutor simulatorExecutor] : [BFExecutor metaWearExecutor]; - return [self continueWithExecutor:executor withBlock:block]; -} - -+ (instancetype)taskFromMetaWearWithBlock:(id (^)(void))block { - BFExecutor *executor = [MBLConstants isSimulatorQueue] ? [BFExecutor simulatorExecutor] : [BFExecutor metaWearExecutor]; - return [[self taskWithResult:nil] continueWithExecutor:executor withBlock:^id(BFTask *task) { - return block(); - }]; -} - -+ (instancetype)taskFromSimulatorWithBlock:(id (^)(void))block -{ - return [[self taskWithResult:nil] continueWithExecutor:[BFExecutor simulatorExecutor] withBlock:^id(BFTask *task) { - return block(); - }]; -} - -@end - -void MBLForceLoadCategory_BFTask_Private() -{ - NSString *string = nil; - [string description]; -} diff --git a/MetaWear/Internal/Categories/MBLCategoryLoader.h b/MetaWear/Internal/Categories/MBLCategoryLoader.h deleted file mode 100644 index 8a1a14c..0000000 --- a/MetaWear/Internal/Categories/MBLCategoryLoader.h +++ /dev/null @@ -1,42 +0,0 @@ -/** - * MBLCategoryLoader.h - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -@interface MBLCategoryLoader : NSObject - -+ (void)loadPrivateCategories; - -@end diff --git a/MetaWear/Internal/Categories/MBLCategoryLoader.m b/MetaWear/Internal/Categories/MBLCategoryLoader.m deleted file mode 100644 index a893427..0000000 --- a/MetaWear/Internal/Categories/MBLCategoryLoader.m +++ /dev/null @@ -1,50 +0,0 @@ -/** - * MBLCategoryLoader.m - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLCategoryLoader.h" -#import "BFTask+MBLPrivate.h" -#import "BFTask+MBLExtensions.h" -#import "FastCoder.h" - -@implementation MBLCategoryLoader - -+ (void)loadPrivateCategories -{ - MBLForceLoadCategory_BFTask_Private(); - MBLForceLoadCategory_BFTask_MBLExtensions(); -} - -@end diff --git a/MetaWear/Internal/Core/MBLAnalytics.h b/MetaWear/Internal/Core/MBLAnalytics.h deleted file mode 100644 index 7018a44..0000000 --- a/MetaWear/Internal/Core/MBLAnalytics.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLAnalytics.h - * MetaWear - * - * Created by Stephen Schiffli on 11/27/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - - -@interface MBLAnalytics : NSObject -+ (instancetype)sharedManager; - -- (void)postEventForDevice:(NSUUID *)uuid eventCategory:(NSString *)category eventAction:(NSString *)action eventLabel:(NSString *)label; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLAnalytics.m b/MetaWear/Internal/Core/MBLAnalytics.m deleted file mode 100644 index 09daa03..0000000 --- a/MetaWear/Internal/Core/MBLAnalytics.m +++ /dev/null @@ -1,119 +0,0 @@ -/** - * MBLAnalytics.m - * MetaWear - * - * Created by Stephen Schiffli on 11/27/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAnalytics.h" -#import "MBLLogger.h" - -static const NSString *const VERSION = @"1"; -static const NSString *const GOOGLE_ANALYTICS_ID = @"UA-57166859-3"; -static NSString *const GOOGLE_ANALYTICS_URL = @"https://ssl.google-analytics.com/collect"; - -@interface MBLAnalyticMessage : NSObject -@property (nonatomic) NSString *postPayload; - -- (instancetype)initWithDevice:(NSUUID *)uuid eventCategory:(NSString *)category eventAction:(NSString *)action eventLabel:(NSString *)label; -- (void)post; -@end - - -@interface MBLAnalytics () -@end - -@implementation MBLAnalytics - -+ (instancetype)sharedManager -{ - static MBLAnalytics *singleton = nil; - if (!singleton) { - singleton = [[MBLAnalytics alloc] init]; - } - return singleton; -} - -- (void)postEventForDevice:(NSUUID *)uuid eventCategory:(NSString *)category eventAction:(NSString *)action eventLabel:(NSString *)label -{ - [[[MBLAnalyticMessage alloc] initWithDevice:uuid eventCategory:category eventAction:action eventLabel:label] post]; -} - -@end - -@implementation MBLAnalyticMessage - -- (instancetype)initWithDevice:(NSUUID *)uuid eventCategory:(NSString *)category eventAction:(NSString *)action eventLabel:(NSString *)label -{ - self = [super init]; - if (self) { - self.postPayload = [NSString stringWithFormat:@"%@&t=event&ec=%@&ea=%@&el=%@", - [self basePost:uuid], - [category stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - [action stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - [label stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - nil]; - } - return self; -} - -- (NSString *)basePost:(NSUUID *)uuid -{ - return [NSString stringWithFormat:@"v=%@&tid=%@&cid=%@&an=%@&av=%@&aid=%@&ds=ios", - [VERSION stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - [GOOGLE_ANALYTICS_ID stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - [uuid.UUIDString stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - [[[NSBundle mainBundle] objectForInfoDictionaryKey:(__bridge NSString *)kCFBundleNameKey] stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - [[[NSBundle mainBundle] objectForInfoDictionaryKey:(__bridge NSString *)kCFBundleVersionKey] stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - [[NSBundle mainBundle].bundleIdentifier stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet], - nil]; -} - -- (void)post -{ - NSData *postData = [self.postPayload dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; - NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)postData.length]; - - NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ; - [request setURL:[NSURL URLWithString:GOOGLE_ANALYTICS_URL]]; - [request setHTTPMethod:@"POST"]; - [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; - [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; - [request setHTTPBody:postData]; - NSString *tmp = self.postPayload; - [[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *connectionError) { - if (connectionError) { - MBLLog(MBLLogLevelDebug, @"[Analytics] issue posting \n%@\%@", tmp, connectionError); - } - }] resume]; -} - -@end diff --git a/MetaWear/Internal/Core/MBLConstants+Private.h b/MetaWear/Internal/Core/MBLConstants+Private.h deleted file mode 100644 index d3543c9..0000000 --- a/MetaWear/Internal/Core/MBLConstants+Private.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * MBLConstants+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 9/27/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -@interface MBLConstants : NSObject - -+ (dispatch_queue_t)metaWearQueue; -+ (dispatch_queue_t)simulatorQueue; -+ (BOOL)isSimulatorQueue; -+ (BOOL)isMetaWearQueue; - -+ (CBUUID *)serviceUUID; -+ (CBUUID *)commandUUID; -+ (CBUUID *)notificationUUID; - -+ (CBUUID *)DFUServiceUUID; - -+ (CBUUID *)batteryServiceUUID; -+ (CBUUID *)batteryLifeUUID; - -+ (CBUUID *)DISServiceUUID; -+ (CBUUID *)DISModelNumberUUID; -+ (CBUUID *)DISSerialNumberUUID; -+ (CBUUID *)DISFirmwareRevUUID; -+ (CBUUID *)DISHardwareRevUUID; -+ (CBUUID *)DISManufacturerNameUUID; - -+ (BOOL)versionString:(NSString *)a isLessThan:(NSString *)b; -+ (double)clampDouble:(double)x low:(double)low high:(double)high; -+ (double)clampInt:(int)x low:(int)low high:(int)high; - -@end diff --git a/MetaWear/Internal/Core/MBLConversion.h b/MetaWear/Internal/Core/MBLConversion.h deleted file mode 100644 index 68c98cb..0000000 --- a/MetaWear/Internal/Core/MBLConversion.h +++ /dev/null @@ -1,86 +0,0 @@ -/** - * MBLConversion.h - * MetaWear - * - * Created by Stephen Schiffli on 5/5/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLConversion : NSObject - -/** - @param number Number you want to convert - @param int32Pointer Pointer to int32 where the result will be stored - @returns YES if successful, NO if error - */ -+ (BOOL)number:(NSNumber *)number toInt32:(int32_t *)int32Pointer; - -/** - @param number Number you want to convert - @param uint32Pointer Pointer to uint32 where the result will be stored - @returns YES if successful, NO if error - */ -+ (BOOL)number:(NSNumber *)number toUint32:(uint32_t *)uint32Pointer; - -/** - @param number Number you want to convert - @param int16Pointer Pointer to int16 where the result will be stored - @returns YES if successful, NO if error - */ -+ (BOOL)number:(NSNumber *)number toInt16:(int16_t *)int16Pointer; - -/** - @param number Number you want to convert - @param uint16Pointer Pointer to uint16 where the result will be stored - @returns YES if successful, NO if error - */ -+ (BOOL)number:(NSNumber *)number toUint16:(uint16_t *)uint16Pointer; - -/** - @param number Number you want to convert - @param int8Pointer Pointer to int8 where the result will be stored - @returns YES if successful, NO if error - */ -+ (BOOL)number:(NSNumber *)number toInt8:(int8_t *)int8Pointer; - -/** - @param number Number you want to convert - @param uint8Pointer Pointer to uint8 where the result will be stored - @returns YES if successful, NO if error - */ -+ (BOOL)number:(NSNumber *)number toUint8:(uint8_t *)uint8Pointer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLConversion.m b/MetaWear/Internal/Core/MBLConversion.m deleted file mode 100644 index edcac0e..0000000 --- a/MetaWear/Internal/Core/MBLConversion.m +++ /dev/null @@ -1,107 +0,0 @@ -/** - * MBLConversion.m - * MetaWear - * - * Created by Stephen Schiffli on 5/5/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLConversion.h" - -@implementation MBLConversion - -+ (BOOL)number:(NSNumber *)number toInt32:(int32_t *)int32Pointer -{ - double boundsCheck = number.doubleValue; - if (boundsCheck < INT32_MIN || boundsCheck > INT32_MAX) { - return NO; - } - int32_t value = number.intValue; - memcpy(int32Pointer, &value, sizeof(int32_t)); - return YES; -} - -+ (BOOL)number:(NSNumber *)number toUint32:(uint32_t *)uint32Pointer -{ - double boundsCheck = number.doubleValue; - if (boundsCheck < 0 || boundsCheck > UINT32_MAX) { - return NO; - } - uint32_t value = number.unsignedIntValue; - memcpy(uint32Pointer, &value, sizeof(uint32_t)); - return YES; -} - - -+ (BOOL)number:(NSNumber *)number toInt16:(int16_t *)int16Pointer -{ - double boundsCheck = number.doubleValue; - if (boundsCheck < INT16_MIN || boundsCheck > INT16_MAX) { - return NO; - } - int16_t value = number.shortValue; - memcpy(int16Pointer, &value, sizeof(int16_t)); - return YES; -} - -+ (BOOL)number:(NSNumber *)number toUint16:(uint16_t *)uint16Pointer -{ - double boundsCheck = number.doubleValue; - if (boundsCheck < 0 || boundsCheck > UINT16_MAX) { - return NO; - } - uint16_t value = number.unsignedShortValue; - memcpy(uint16Pointer, &value, sizeof(uint16_t)); - return YES; -} - -+ (BOOL)number:(NSNumber *)number toInt8:(int8_t *)int8Pointer -{ - double boundsCheck = number.doubleValue; - if (boundsCheck < INT8_MIN || boundsCheck > INT8_MAX) { - return NO; - } - int8_t value = number.charValue; - memcpy(int8Pointer, &value, sizeof(int8_t)); - return YES; -} - -+ (BOOL)number:(NSNumber *)number toUint8:(uint8_t *)uint8Pointer -{ - double boundsCheck = number.doubleValue; - if (boundsCheck < 0 || boundsCheck > UINT8_MAX) { - return NO; - } - uint8_t value = number.unsignedCharValue; - memcpy(uint8Pointer, &value, sizeof(uint8_t)); - return YES; -} - -@end diff --git a/MetaWear/Internal/Core/MBLData+Private.h b/MetaWear/Internal/Core/MBLData+Private.h deleted file mode 100644 index aedbf22..0000000 --- a/MetaWear/Internal/Core/MBLData+Private.h +++ /dev/null @@ -1,54 +0,0 @@ -/** - * MBData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLData.h" -#import "MBLRegister+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLData (Private) - -- (BFTask *)simulatedReadAsync:(BOOL)isLocal; - -/** - Manually log values when this data is read, note you need to set up something - else that will perform the actual reads. The result of the returned task is - an MBLEvent that is used for downloading the data. - */ -- (BFTask *)addLoggingEntry; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Internal/Core/MBLDataSample+Private.h b/MetaWear/Internal/Core/MBLDataSample+Private.h deleted file mode 100644 index c30b3ec..0000000 --- a/MetaWear/Internal/Core/MBLDataSample+Private.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLDataSample+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 5/7/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLDataSample.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLDataSample (Private) -- (instancetype)initWithTimestamp:(NSDate *)timestamp data:(NSData *)data; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLDependentData.h b/MetaWear/Internal/Core/MBLDependentData.h deleted file mode 100644 index 4abc50e..0000000 --- a/MetaWear/Internal/Core/MBLDependentData.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLDependentData.h - * MetaWear - * - * Created by Stephen Schiffli on 12/17/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -@class MBLModule; -@class MBLFormat; - -@interface MBLDependentData : MBLData - -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format dependent:(MBLRegister *)dependent; - -@end diff --git a/MetaWear/Internal/Core/MBLDependentData.m b/MetaWear/Internal/Core/MBLDependentData.m deleted file mode 100644 index 7933a32..0000000 --- a/MetaWear/Internal/Core/MBLDependentData.m +++ /dev/null @@ -1,74 +0,0 @@ -/** - * MBLDependentData.m - * MetaWear - * - * Created by Stephen Schiffli on 12/17/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLDependentData.h" -#import "MBLRegister+Private.h" - -@interface MBLDependentData () -@property (nonatomic) MBLRegister *dependent; -@end - -@implementation MBLDependentData - -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format dependent:(MBLRegister *)dependent -{ - self = [super initWithModule:module registerId:registerId format:format]; - if (self) { - self.dependent = dependent; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - return [self.dependent initializeAsync]; -} - -- (BFTask *)performAsyncDeinitialization -{ - return [self.dependent deinitializeAsync]; -} - -- (BFTask *)performAsyncActivation -{ - return [self.dependent activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [self.dependent deactivateAsync]; -} - -@end diff --git a/MetaWear/Internal/Core/MBLDispatchQueue.h b/MetaWear/Internal/Core/MBLDispatchQueue.h deleted file mode 100644 index 877322a..0000000 --- a/MetaWear/Internal/Core/MBLDispatchQueue.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * MBLDispatchQueue.h - * MetaWear - * - * Created by Stephen Schiffli on 11/2/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLDispatchQueue : NSObject - -- (instancetype)initWithName:(NSString *)name; - -- (void)addOperationWithBlock:(nullable MBLVoidHandler)block; - -// Returns if is was suspended before call. -- (BOOL)suspend; -- (void)resume; - -- (void)forceResume; -- (void)reset; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLDownloadOnlyEvent.h b/MetaWear/Internal/Core/MBLDownloadOnlyEvent.h deleted file mode 100644 index 4f75eeb..0000000 --- a/MetaWear/Internal/Core/MBLDownloadOnlyEvent.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLDownloadOnlyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 8/14/16. - * Copyright © 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLDownloadOnlyEvent : MBLEvent - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLDownloadOnlyEvent.m b/MetaWear/Internal/Core/MBLDownloadOnlyEvent.m deleted file mode 100644 index c033d9e..0000000 --- a/MetaWear/Internal/Core/MBLDownloadOnlyEvent.m +++ /dev/null @@ -1,62 +0,0 @@ -/** - * MBLDownloadOnlyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 8/14/16. - * Copyright © 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLDownloadOnlyEvent.h" -#import "MBLEvent+Private.h" -#import "MBLMetaWear+Private.h" - -@implementation MBLDownloadOnlyEvent - -- (BFTask *)initializeAsync -{ - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)deinitializeAsync -{ - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)activateAsync -{ - return [BFTask taskWithResult:nil]; -} - -- (BFTask *)deactivateAsync -{ - return [BFTask taskWithResult:nil]; -} - -@end diff --git a/MetaWear/Internal/Core/MBLEntityEvent+Private.h b/MetaWear/Internal/Core/MBLEntityEvent+Private.h deleted file mode 100644 index 82be92e..0000000 --- a/MetaWear/Internal/Core/MBLEntityEvent+Private.h +++ /dev/null @@ -1,53 +0,0 @@ -/** - * MBLEntityEvent+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 12/4/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEntityEvent.h" -@class MBLEntityModule; -@class MBLFormat; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLEntityEvent (Private) -@property (nonatomic) NSData *addEntityParameters; - -- (instancetype)initWithModule:(MBLEntityModule *)module - registerId:(uint8_t)registerId - addEntityParameters:(NSData *)addEntityParameters - format:(MBLFormat *)format; - -- (BFTask *)isStateValid; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLEntityModule+Private.h b/MetaWear/Internal/Core/MBLEntityModule+Private.h deleted file mode 100644 index 5703fc7..0000000 --- a/MetaWear/Internal/Core/MBLEntityModule+Private.h +++ /dev/null @@ -1,74 +0,0 @@ -/** - * MBLEntityModule+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLEntityModule.h" -#import "MBLDataSample+Private.h" -#import "MBLModule+Private.h" -#import "MBLRegister+Private.h" -#import "MBLEntityEvent+Private.h" -#import "BFTask+MBLPrivate.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLEntityModule (Private) - -@property (nonatomic) int activeNotifications; -@property (nonatomic) NSMutableArray *entities; -@property (nonatomic) int maxEntities; - -@property (nonatomic, nullable) MBLRegister *addEntity; -@property (nonatomic, nullable) MBLRegister *removeEntity; -@property (nonatomic, nullable) MBLRegister *activateEntity; -@property (nonatomic, nullable) MBLRegister *deactivateEntity; - -@property (nonatomic, nullable) MBLRegister *globalNotifications; -@property (nonatomic, nullable) MBLRegister *notificationEnable; - - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo; - -- (BFTask *)performAsyncInitializationForEntity:(MBLEntityEvent *)entity; -- (BFTask *)performAsyncDeinitializationForEntity:(MBLEntityEvent *)entity; - -- (BFTask *)performAsyncActivationForEntity:(MBLEntityEvent *)entity; -- (BFTask *)performAsyncDeactivationForEntity:(MBLEntityEvent *)entity; - -- (BFTask *)startNotificationsForEntity:(MBLEntityEvent *)entity; -- (BFTask *)stopNotificationsAsyncForEntity:(MBLEntityEvent *)entity; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLEvent+Private.h b/MetaWear/Internal/Core/MBLEvent+Private.h deleted file mode 100644 index 540f90a..0000000 --- a/MetaWear/Internal/Core/MBLEvent+Private.h +++ /dev/null @@ -1,56 +0,0 @@ -/** - * MBLEvent+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/13/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent.h" -#import "MBLRegister+Private.h" -#import "MBLModule+Private.h" -#import "MBLFilter.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLEvent (Private) -@property (nonatomic, readonly) NSMutableArray *loggingIds; -@property (nonatomic, readonly) NSMutableArray *commandIds; -@property (nonatomic, readonly) NSMutableArray *commandActivatedRegisters; - -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format; -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format; - -- (MBLFilter *)rmsOfEventWithInputLength:(uint8_t)inputLength inputCount:(uint8_t)inputCount format:(MBLFormat *)format; -- (MBLFilter *)rssOfEventWithInputLength:(uint8_t)inputLength inputCount:(uint8_t)inputCount format:(MBLFormat *)format; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLFilter+Private.h b/MetaWear/Internal/Core/MBLFilter+Private.h deleted file mode 100644 index 422bff9..0000000 --- a/MetaWear/Internal/Core/MBLFilter+Private.h +++ /dev/null @@ -1,56 +0,0 @@ -/** - * MBLFilter+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 2/10/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFilter.h" -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLFilter (Private) - -@property (nonatomic, readonly) MBLEvent *trigger; -@property (nonatomic, readonly) MBLData *stateSetResetGet; - -- (instancetype)initWithTrigger:(MBLEvent *)trigger - filterParameters:(NSData *)parameters - format:(MBLFormat *)format; - -- (BFTask *)resetStateWithDataAsync:(nullable NSData *)data; - -- (BFTask *)resetParametersWithData:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLFirmwareBuild.h b/MetaWear/Internal/Core/MBLFirmwareBuild.h deleted file mode 100644 index 81ab106..0000000 --- a/MetaWear/Internal/Core/MBLFirmwareBuild.h +++ /dev/null @@ -1,75 +0,0 @@ -/** - * MBLFirmwareBuild.h - * MetaWear - * - * Created by Stephen Schiffli on 7/22/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLFirmwareBuild : NSObject - -- (instancetype)initWithHardwareRev:(NSString *)hardwareRev - modelNumber:(NSString *)modelNumber - buildFlavor:(NSString *)buildFlavor - firmwareRev:(NSString *)firmwareRev - filename:(NSString *)filename; - -- (instancetype)initWithHardwareRev:(NSString *)hardwareRev - modelNumber:(NSString *)modelNumber - url:(NSURL *)customUrl; - -@property (nonatomic, readonly, nullable) NSString *hardwareRev; -@property (nonatomic, readonly, nullable) NSString *modelNumber; -@property (nonatomic, readonly, nullable) NSString *buildFlavor; -@property (nonatomic, readonly, nullable) NSString *firmwareRev; -@property (nonatomic, readonly, nullable) NSString *filename; - -@property (nonatomic, readonly) NSURL *firmwareURL; -@property (nonatomic, readonly, nullable) NSURL *firmwareLocalFile; - -/** - If the provided is a URL version this will download it to a local file - for use with the acutal DFU process - */ -- (BFTask *)downloadFirmwareAsync; - -/** - See if this specified firmware exists on our release server - */ -+ (BFTask *)fromReleaseServerWithHardwareRev:(NSString *)hardwareRev - modelNumber:(NSString *)modelNumber - firmwareRev:(NSString *)firmwareRev; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLFirmwareBuild.m b/MetaWear/Internal/Core/MBLFirmwareBuild.m deleted file mode 100644 index 4fe0695..0000000 --- a/MetaWear/Internal/Core/MBLFirmwareBuild.m +++ /dev/null @@ -1,163 +0,0 @@ -/** - * MBLFirmwareBuild.m - * MetaWear - * - * Created by Stephen Schiffli on 7/22/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFirmwareBuild.h" -#import "MBLLogger.h" -#import "BFTask+MBLPrivate.h" - -@interface MBLFirmwareBuild () -@property (nonatomic) NSString *hardwareRev; -@property (nonatomic) NSString *modelNumber; -@property (nonatomic) NSString *buildFlavor; -@property (nonatomic) NSString *firmwareRev; -@property (nonatomic) NSString *filename; - -@property (nonatomic) NSURL *firmwareURL; -@property (nonatomic) NSURL *firmwareLocalFile; -@end - -@implementation MBLFirmwareBuild - -- (instancetype)initWithHardwareRev:(NSString *)hardwareRev - modelNumber:(NSString *)modelNumber - buildFlavor:(NSString *)buildFlavor - firmwareRev:(NSString *)firmwareRev - filename:(NSString *)filename -{ - self = [super init]; - if (self) { - self.hardwareRev = hardwareRev; - self.modelNumber = modelNumber; - self.buildFlavor = buildFlavor; - self.firmwareRev = firmwareRev; - self.filename = filename; - - self.firmwareURL = [NSURL URLWithString:[NSString stringWithFormat:@"https://mbientlab.com/releases/metawear/%@/%@/%@/%@/%@", - hardwareRev ? hardwareRev : @"0.1", - modelNumber ? modelNumber : @"0", - buildFlavor ? buildFlavor : @"vanilla", - firmwareRev ? firmwareRev : @"1.1.3", - filename ? filename : @"firmware.bin"]]; - } - return self; -} - -- (instancetype)initWithHardwareRev:(NSString *)hardwareRev - modelNumber:(NSString *)modelNumber - url:(NSURL *)customUrl -{ - self = [super init]; - if (self) { - self.hardwareRev = hardwareRev; - self.modelNumber = modelNumber; - self.filename = customUrl.lastPathComponent; - self.firmwareURL = customUrl; - if (customUrl.isFileURL) { - self.firmwareLocalFile = customUrl; - } - } - return self; -} - - -- (BFTask *)downloadFirmwareAsync -{ - if (self.firmwareLocalFile) { - return [BFTask taskWithResult:nil]; - } - // Go grab the file at the URL - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - MBLLog(MBLLogLevelInfo, @"Downloading... %@", self.firmwareURL); - [[[NSURLSession sharedSession] downloadTaskWithURL:self.firmwareURL completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) { - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; - if (error) { - [source trySetError:error]; - return; - } else if (httpResponse.statusCode != 200) { - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNoAvailableFirmware - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Firmware URL %@ returned code %ld", self.firmwareURL, (long)httpResponse.statusCode]}]]; - return; - } - // If no download error, then copy the file to a permanent place. Note the location - // variable suppiled is invalid once this block returns. - NSString *filepath = [NSTemporaryDirectory() stringByAppendingPathComponent:self.filename]; - if (!filepath) { - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorUnexpectedServices - userInfo:@{NSLocalizedDescriptionKey : @"Couldn't find temp directory to store firmware file. Please report issue to developers@mbientlab.com"}]]; - return; - } - NSURL *fileURL = [NSURL fileURLWithPath:filepath]; - NSError *err; - [[NSFileManager defaultManager] removeItemAtPath:filepath error:nil]; - if (![[NSFileManager defaultManager] copyItemAtURL:location toURL:fileURL error:&err]) { - [source trySetError:err]; - return; - } - MBLLog(MBLLogLevelInfo, @"Download Complete"); - self.firmwareLocalFile = fileURL; - [source trySetResult:fileURL]; - }] resume]; - return source.task; -} - -+ (BFTask *)fromReleaseServerWithHardwareRev:(NSString *)hardwareRev - modelNumber:(NSString *)modelNumber - firmwareRev:(NSString *)firmwareRev -{ - // First try to fetch a zip file - MBLFirmwareBuild __block *firmware = [[MBLFirmwareBuild alloc] initWithHardwareRev:hardwareRev - modelNumber:modelNumber - buildFlavor:@"vanilla" - firmwareRev:firmwareRev - filename:@"firmware.zip"]; - return [[[firmware downloadFirmwareAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (t.error == nil) { - return t; - } - // No zip file, try a bin instead - firmware = [[MBLFirmwareBuild alloc] initWithHardwareRev:hardwareRev - modelNumber:modelNumber - buildFlavor:@"vanilla" - firmwareRev:firmwareRev - filename:@"firmware.bin"]; - return [firmware downloadFirmwareAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return firmware; - }]; -} - -@end diff --git a/MetaWear/Internal/Core/MBLFormat.h b/MetaWear/Internal/Core/MBLFormat.h deleted file mode 100644 index 915c066..0000000 --- a/MetaWear/Internal/Core/MBLFormat.h +++ /dev/null @@ -1,75 +0,0 @@ -/** - * MBLFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 5/6/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(uint8_t, MBLFormatType) { - MBLFormatTypeNumber, - MBLFormatTypeArray, - MBLFormatTypeEncodedData -}; - -@interface MBLFormat : NSObject -@property (nonatomic) uint8_t length; -@property (nonatomic) MBLFormatType type; -@property (nonatomic) uint8_t offset; -@property (nonatomic) uint8_t elements; -// Used for Number types -@property (nonatomic) BOOL isSigned; - -+ (instancetype)writeOnly; - -- (instancetype)initNumberWithLength:(uint8_t)length isSigned:(BOOL)isSigned offset:(uint8_t)offset; -- (instancetype)initNumberWithLength:(uint8_t)length isSigned:(BOOL)isSigned; - -- (instancetype)initArrayWithElements:(uint8_t)elements elementSize:(uint8_t)elementSize isSigned:(BOOL)isSigned; - -- (instancetype)initEncodedDataWithLength:(uint8_t)length; - -/** - Convert a chunk of data from the wire, that's in - firmware units, to a friendly objective-c object - */ -- (id)entryFromData:(NSData *)data date:(NSDate *)date; - -/** - Convert the given value into firmware units - */ -- (NSNumber *)numberFromDouble:(double)value; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLFormat.m b/MetaWear/Internal/Core/MBLFormat.m deleted file mode 100644 index 0be84a7..0000000 --- a/MetaWear/Internal/Core/MBLFormat.m +++ /dev/null @@ -1,109 +0,0 @@ -/** - * MBLFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 5/6/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" -#import "MBLDataSample+Private.h" - -@implementation MBLFormat - -+ (instancetype)writeOnly -{ - return [[MBLFormat alloc] initEncodedDataWithLength:0]; -} - -- (instancetype)initNumberWithLength:(uint8_t)length isSigned:(BOOL)isSigned offset:(uint8_t)offset -{ - self = [super init]; - if (self) { - self.length = length; - self.elements = 1; - self.type = MBLFormatTypeNumber; - self.offset = offset; - self.isSigned = isSigned; - } - return self; -} - -- (instancetype)initNumberWithLength:(uint8_t)length isSigned:(BOOL)isSigned -{ - return [self initNumberWithLength:length isSigned:isSigned offset:0]; -} - -- (instancetype)initArrayWithElements:(uint8_t)elements elementSize:(uint8_t)elementSize isSigned:(BOOL)isSigned -{ - self = [super init]; - if (self) { - self.length = elements * elementSize; - self.elements = elements; - self.isSigned = isSigned; - self.type = MBLFormatTypeArray; - } - return self; -} - -- (instancetype)initEncodedDataWithLength:(uint8_t)length -{ - self = [super init]; - if (self) { - self.length = length; - self.elements = 1; - self.type = MBLFormatTypeEncodedData; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLFormat *newFormat = [[self class] allocWithZone:zone]; - newFormat.length = self.length; - newFormat.type = self.type; - newFormat.offset = self.offset; - newFormat.elements = self.elements; - newFormat.isSigned = self.isSigned; - return newFormat; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - return [[MBLDataSample alloc] initWithTimestamp:date data:data]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - [NSException raise:@"Derived class must implement numberFromDouble:" format:@""]; - return nil; -} - -@end diff --git a/MetaWear/Internal/Core/MBLLogger.h b/MetaWear/Internal/Core/MBLLogger.h deleted file mode 100644 index bd75af7..0000000 --- a/MetaWear/Internal/Core/MBLLogger.h +++ /dev/null @@ -1,38 +0,0 @@ -/** - * MBLLogger.h - * MetaWear - * - * Created by Stephen Schiffli on 10/11/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -void MBLLog(MBLLogLevel level, NSString *format, ...) NS_FORMAT_FUNCTION(2, 3); diff --git a/MetaWear/Internal/Core/MBLMacAddressFormat.h b/MetaWear/Internal/Core/MBLMacAddressFormat.h deleted file mode 100644 index bf3888c..0000000 --- a/MetaWear/Internal/Core/MBLMacAddressFormat.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLMacAddressFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 12/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLMacAddressFormat : MBLFormat - -@property (nonatomic) BOOL hasAddressType; - -- (instancetype)initWithAddressType:(BOOL)hasAddressType; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLMacAddressFormat.m b/MetaWear/Internal/Core/MBLMacAddressFormat.m deleted file mode 100644 index 5d9837a..0000000 --- a/MetaWear/Internal/Core/MBLMacAddressFormat.m +++ /dev/null @@ -1,76 +0,0 @@ -/** - * MBLMacAddressFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 12/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMacAddressFormat.h" -#import "MBLFormat.h" -#import "MBLStringData+Private.h" - -@implementation MBLMacAddressFormat - -- (instancetype)initWithAddressType:(BOOL)hasAddressType -{ - uint8_t length = hasAddressType ? 7 : 6; - self = [super initEncodedDataWithLength:length]; - if (self) { - self.hasAddressType = hasAddressType; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLMacAddressFormat *newFormat = [super copyWithZone:zone]; - newFormat.hasAddressType = self.hasAddressType; - return newFormat; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - if ((self.hasAddressType && data.length != 7) || (!self.hasAddressType && data.length != 6)) { - return [[MBLStringData alloc] initWithString:@"N/A" timestamp:date data:data]; - } - uint8_t const *macBytes = data.bytes; - uint8_t const offset = self.hasAddressType ? 1 : 0; - NSString *macStr = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X", macBytes[5 + offset], macBytes[4 + offset], macBytes[3 + offset], macBytes[2 + offset], macBytes[1 + offset], macBytes[0 + offset]]; - return [[MBLStringData alloc] initWithString:macStr timestamp:date data:data]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - [NSException raise:@"Cannout use MAC Address with filters" format:@""]; - return nil; -} - -@end diff --git a/MetaWear/Internal/Core/MBLMetaWear+Private.h b/MetaWear/Internal/Core/MBLMetaWear+Private.h deleted file mode 100644 index cc52da3..0000000 --- a/MetaWear/Internal/Core/MBLMetaWear+Private.h +++ /dev/null @@ -1,125 +0,0 @@ -/** - * MBLMetaWear+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 8/2/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMetaWear.h" -#import "MBLDataProcessor.h" -#import "MBLLogging.h" -#import "MBLCommand.h" -#import "MBLTestDebug.h" -#import "MBLMacro.h" -#import "MBLDispatchQueue.h" -#import "MBLNonVolatileState.h" -#import "MBLBluetoothPeripheral.h" -#import "MBLFirmwareUpdateInfo.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef void (^MBLSimulationHandler)(uint8_t module, uint8_t opcode, NSData *parameters); - -// Properties that certain privileged people need access too -@interface MBLMetaWear (Private) -@property (nonatomic) MBLConnectionState state; -@property (nonatomic, nonnull) NSUUID *identifier; -@property (nonatomic) NSDictionary *advertisementData; -@property (nonatomic, nullable) NSString *mac; -@property (nonatomic, nullable) NSNumber *discoveryTimeRSSI; -@property (nonatomic) BOOL isMetaBoot; - -@property (nonatomic) id peripheral; -@property (nonatomic) BOOL bypassSetup; -@property (nonatomic) BOOL bypassSanityCheck; - -@property (nonatomic, nullable, readonly) MBLDataProcessor *dataProcessor; -@property (nonatomic, nullable, readonly) MBLLogging *logging; -@property (nonatomic, nullable, readonly) MBLCommand *command; -@property (nonatomic, nullable, readonly) MBLTestDebug *testDebug; -@property (nonatomic, nullable, readonly) MBLMacro *macro; -@property (nonatomic, nullable) MBLDeviceInfo *deviceInfo; - -@property (nonatomic, readonly) MBLNonVolatileState *nonVolatileState; - -@property (nonatomic, readonly) MBLDispatchQueue *zeroCountQueue; - -@property (nonatomic, nullable) NSArray *modules; - -- (instancetype)initWithPeripheral:(id)peripheral; - -- (void)didConnect; -- (void)didDisconnect:(nullable NSError *)error; - -/// Because of iOS oddity we need to manually notify the peripheral -/// if bluetooth is powered off -- (void)bluetoothPoweredOff; - -/// Send raw bytes over BLE to the MetaWear command register -- (void)writeCommandRegister:(NSData *)data withResponse:(BOOL)withResponse; - -/** - The simulation feature allow you to execute API calls but instead - of sending the resulting bytes across the BLE link to the MetaWear, - they will just be passed into handler. - - Note you must wait on waitForSimulatorTurn before calling startSimulationWithHandler: - and must call stopSimulation when finished - */ -- (BFTask *)waitForSimulatorTurn; -- (void)startSimulationWithHandler:(MBLSimulationHandler)handler; -- (void)stopSimulation; - -/** - The sniffer allows you to see what bytes are being sent across the BLE link - */ -- (void)startSnifferWithHandler:(MBLDataHandler)handler; -- (void)stopSniffer; - -/** - The count feature allows us to keep track of the number of outstanding - transactions going to the MetaWear. Use incrementCount to indicate when - a new operation has started and decrementCount when it finishes. - Use the waitForCommandCompletion: to get a callback when all transactions - are complete. - */ -- (void)incrementCount; -- (void)decrementCount; -- (BFTask *)waitForCommandCompletion; -- (BFTask *)waitForSimulatorCompletion; - -- (BFTask *)prepareForFirmwareUpdateToVersionAsync:(nullable MBLFirmwareBuild *)firmware; - -- (void)updateName:(NSString *)name; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLMetaWearManager+Private.h b/MetaWear/Internal/Core/MBLMetaWearManager+Private.h deleted file mode 100644 index 2c66244..0000000 --- a/MetaWear/Internal/Core/MBLMetaWearManager+Private.h +++ /dev/null @@ -1,62 +0,0 @@ -/** - * MBLMetaWearManager+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/14/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMetaWearManager.h" -#import "MBLBluetoothCentral.h" - -NS_ASSUME_NONNULL_BEGIN - -void MBLSetUseMockManager(BOOL useMock); - -@interface MBLMetaWearManager (Private) -@property (nonatomic) id centralManager; - -// Shortcut for [MBLMetaWearManager sharedManager].dispatchQueue -+ (NSOperationQueue *)dispatchQueue; - -@property (nonatomic, readonly) NSString *latestFirmware; - -- (void)startScanForMetaWears:(BOOL)metaWears metaBoots:(BOOL)metaBoots duplicates:(NSNumber *)duplicates handler:(MBLArrayHandler)handler; - -- (void)connectMetaWear:(MBLMetaWear *)device; -- (void)disconnectMetaWear:(MBLMetaWear *)device fromPeripheralSide:(BOOL)fromPeripheralSide; - -- (void)rememberMetaWear:(MBLMetaWear *)device; -- (void)forgetMetaWear:(MBLMetaWear *)device; - -- (nullable NSString *)logFilename:(nullable NSString *)filename; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLModule+Private.h b/MetaWear/Internal/Core/MBLModule+Private.h deleted file mode 100644 index 7779f26..0000000 --- a/MetaWear/Internal/Core/MBLModule+Private.h +++ /dev/null @@ -1,174 +0,0 @@ -/** - * MBLModule+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/28/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLModule.h" -#import "MBLConstants.h" -#import "MBLModuleInfo.h" -#import - -@class MBLMetaWear; -@class MBLRegister; -@class MBLEvent; - -NS_ASSUME_NONNULL_BEGIN - -/** - Internal header hiding unnessary functions from API user - */ -@interface MBLModule (Private) -/** - Weak back pointer to the device which this module belongs to - */ -@property (nonatomic, weak, nullable) MBLMetaWear *device; -/** - List of all registers that have been added to the module. - */ -@property (nonatomic) NSMutableArray *registers; -/** - Module info as read from register 0 - */ -@property (nonatomic) MBLModuleInfo *moduleInfo; -/** - How many registers/events/data are currently using this module - */ -@property (nonatomic, readonly) int activateCount; -@property (nonatomic, readonly) int initializeCount; -/** - A common firmware paradigm is to have one register that takes 0x1 to enable - it and 0x0 to disable it. If such register exists, assign it here - */ -@property (nonatomic, nullable) MBLRegister *globalEnable; - - -/** - You should always use this factory function to create modules because - this instatiantes the proper subclass based on moduleInfo version - */ -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo; - -/** - Init the device object - */ -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo; - -/** - Make sure the state is valid, this is called on re-connect to make - sure the MetaWear isn't tampered with - */ -- (BFTask *)isStateValid; - -/** - The module needs to know about all the registers it has for data routing - purposes. - */ -- (void)addRegister:(MBLRegister *)reg; -/** - Find the register for this message. Data should be in the format - of [module id, reg id, index] each a uint8_t. - */ -- (BFTask *)getRegister:(NSData *)data; - -/** - Data from BLE radio first goes to the MBLMetaWear, which routes it - to the appropriate module (by calling this method). This method will - then pass the data along to the appropriate MBLRegister - */ -- (void)recievedData:(NSData *)data error:(nullable NSError *)error; - -/** - Let the module know our BLE link was disconnected for some reason - */ -- (void)deviceDisconnected:(nullable NSError *)error; -/** - Let the module know our BLE link connected - */ -- (BFTask *)deviceConnected; - -/** - A common firmware paradigm is the need to write one or more register to - initialize the module. This should be called before attempting to use - this module. Internally this just increments a counter, and when the count - goes from 0 to 1 (first call) it will invoke performAsyncInitialization. - As such MBLModule derivatives shouldn't override this, but rather - performAsyncInitialization. - */ -- (BFTask *)initializeAsync; -/** - A common firmware paradigm is the need to write one or more register to - deinitialize the module. This should be called after you are finished using - this module. Internally this just decrements a counter, and when the count - goes from 1 to 0 (no more users) it will invoke performAsyncDeinitialization. - As such MBLModule derivatives shouldn't override this, but rather performAsyncDeinitialization. - */ -- (BFTask *)deinitializeAsync; - -/** - A common firmware paradigm is the need to write one or more register to - activate, or enable, the module. This should be called after you have the module - all setup and are ready to recieve data. Internally this just increments a counter, - and when the count goes from 0 to 1 (first call) it will invoke performAsyncActivation. - As such MBLModule derivatives shouldn't override this, but rather - performAsyncActivation - */ -- (BFTask *)activateAsync; -/** - A common firmware paradigm is the need to write one or more register to - deactivate, or disable, the module. This should be called after you are finished - using this module. Internally this just decrements a counter, and when the count - goes from 1 to 0 (no more users) it will invoke performAsyncDeactivation. - As such MBLModule derivatives shouldn't override this, but rather performAsyncDeactivation. - */ -- (BFTask *)deactivateAsync; - -/** - Derieved classes should override this and put in module specific initialization code - */ -- (BFTask *)performAsyncInitialization; -/** - Derieved classes should override this and put in module specific deinitialization code - */ -- (BFTask *)performAsyncDeinitialization; -/** - Derieved classes should override this and put in module specific activation code - */ -- (BFTask *)performAsyncActivation; -/** - Derieved classes should override this and put in module specific deactivation code - */ -- (BFTask *)performAsyncDeactivation; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLModuleInfo.h b/MetaWear/Internal/Core/MBLModuleInfo.h deleted file mode 100644 index 1e0689d..0000000 --- a/MetaWear/Internal/Core/MBLModuleInfo.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLModuleInfo.h - * MetaWear - * - * Created by Stephen Schiffli on 7/14/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLModuleInfo : NSObject - -- (instancetype)initWithId:(uint8_t)moduleId data:(nullable NSData *)data; - -/** - Module id as listed in the MetaWear firmware docs - */ -@property (nonatomic) uint8_t moduleId; - -/** - Module Implementation - */ -@property (nonatomic) uint8_t moduleImplementation; -/** - Module Revision - */ -@property (nonatomic) uint8_t moduleRevision; -/** - Module Specific Data - */ -@property (nonatomic, nullable) NSData *moduleData; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLMovingAverage.h b/MetaWear/Internal/Core/MBLMovingAverage.h deleted file mode 100755 index 1ccae80..0000000 --- a/MetaWear/Internal/Core/MBLMovingAverage.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * MBLMovingAverage.h - * MetaWear - * - * Created by Stephen Schiffli on 2/24/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ -// -// Created by Alex Manarpies on 12/17/14. -// - -#import - - -/** -* Utility class for maintaining a moving average over a given time period. -* Credits: http://stackoverflow.com/a/14740836/331283 -*/ -@interface MBLMovingAverage : NSObject - -@property(nonatomic, readonly) double movingAverage; -@property(nonatomic, readonly) double cumulativeAverage; - -- (instancetype)initWithPeriod:(NSUInteger)period; - -- (void)addDatum:(NSNumber *)datum; - -@end \ No newline at end of file diff --git a/MetaWear/Internal/Core/MBLMovingAverage.m b/MetaWear/Internal/Core/MBLMovingAverage.m deleted file mode 100755 index 16a2458..0000000 --- a/MetaWear/Internal/Core/MBLMovingAverage.m +++ /dev/null @@ -1,80 +0,0 @@ -/** - * MBLMovingAverage.m - * MetaWear - * - * Created by Stephen Schiffli on 2/24/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ -// -// Created by Alex Manarpies on 12/17/14. -// - -#import "MBLMovingAverage.h" - - -@interface MBLMovingAverage () - -@property(nonatomic, strong) NSMutableArray *queue; -@property(nonatomic) NSUInteger period; -@property(nonatomic) NSUInteger count; - -@property(nonatomic, readwrite) double movingAverage; -@property(nonatomic, readwrite) double cumulativeAverage; - -@end - -@implementation MBLMovingAverage - -- (instancetype)initWithPeriod:(NSUInteger)period { - self = [self init]; - if (self) { - _period = period; - _queue = [[NSMutableArray alloc] initWithCapacity:period]; - } - return self; -} - -- (void)addDatum:(NSNumber *)datum { - [self.queue insertObject:datum atIndex:0]; - - //double removed = 0; - double datumd = [datum doubleValue]; - - if (self.queue.count > self.period) { - //removed = [[self.queue lastObject] doubleValue]; - [self.queue removeLastObject]; - } - - //self.movingAverage = self.movingAverage - (removed / self.period) + (datumd / self.period); - self.movingAverage = [[self.queue valueForKeyPath:@"@avg.self"] doubleValue]; - self.cumulativeAverage = self.cumulativeAverage + (datumd - self.cumulativeAverage) / ++self.count; -} - -@end \ No newline at end of file diff --git a/MetaWear/Internal/Core/MBLNonVolatileState.h b/MetaWear/Internal/Core/MBLNonVolatileState.h deleted file mode 100644 index e22bc83..0000000 --- a/MetaWear/Internal/Core/MBLNonVolatileState.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLNonVolatileState.h - * MetaWear - * - * Created by Stephen Schiffli on 11/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -static const int LOGGING_RESET_UIDS_MASK = 0x7; // Currently a 3 bit field [0,7] - -@interface MBLNonVolatileState : NSObject - -@property (nonatomic) NSMutableArray *logStartingDates; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLNonVolatileState.m b/MetaWear/Internal/Core/MBLNonVolatileState.m deleted file mode 100644 index e593978..0000000 --- a/MetaWear/Internal/Core/MBLNonVolatileState.m +++ /dev/null @@ -1,53 +0,0 @@ -/** - * MBLNonVolatileState.m - * MetaWear - * - * Created by Stephen Schiffli on 11/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLNonVolatileState.h" - - -@implementation MBLNonVolatileState - -- (instancetype)init -{ - self = [super init]; - if (self) { - self.logStartingDates = [NSMutableArray arrayWithCapacity:(LOGGING_RESET_UIDS_MASK + 1)]; - for (int i = 0; i < (LOGGING_RESET_UIDS_MASK + 1); i++) { - [self.logStartingDates addObject:[NSNull null]]; - } - } - return self; -} - -@end diff --git a/MetaWear/Internal/Core/MBLNumericData+Private.h b/MetaWear/Internal/Core/MBLNumericData+Private.h deleted file mode 100644 index a4218b2..0000000 --- a/MetaWear/Internal/Core/MBLNumericData+Private.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLNumericData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/22/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLNumericData.h" -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLNumericData (Private) - -- (instancetype)initWithNumber:(NSNumber *)number timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLNumericFormatter.h b/MetaWear/Internal/Core/MBLNumericFormatter.h deleted file mode 100644 index 5113141..0000000 --- a/MetaWear/Internal/Core/MBLNumericFormatter.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * MBLNumericFormatter.h - * MetaWear - * - * Created by Stephen Schiffli on 5/7/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLNumericFormatter : MBLFormat - -- (instancetype)initIntWithLength:(uint8_t)length isSigned:(BOOL)isSigned; -- (instancetype)initIntWithLength:(uint8_t)length isSigned:(BOOL)isSigned offset:(uint8_t)offset; - -- (instancetype)initDoubleWithLength:(uint8_t)length isSigned:(BOOL)isSigned scale:(double)scale; -- (instancetype)initDoubleWithLength:(uint8_t)length isSigned:(BOOL)isSigned scale:(double)scale offset:(uint8_t)offset; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLNumericFormatter.m b/MetaWear/Internal/Core/MBLNumericFormatter.m deleted file mode 100644 index 31813df..0000000 --- a/MetaWear/Internal/Core/MBLNumericFormatter.m +++ /dev/null @@ -1,134 +0,0 @@ -/** - * MBLNumericFormatter.m - * MetaWear - * - * Created by Stephen Schiffli on 5/7/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLNumericFormatter.h" -#import "MBLNumericData+Private.h" - -@interface MBLNumericFormatter () -@property (nonatomic) BOOL isDouble; -@property (nonatomic) double scale; -@end - -@implementation MBLNumericFormatter - -- (instancetype)initIntWithLength:(uint8_t)length isSigned:(BOOL)isSigned offset:(uint8_t)offset -{ - if (length > 8) { - [NSException raise:@"Invalid size" format:@"Cannot convert over 8 bytes bytes to int"]; - } - self = [super initNumberWithLength:length isSigned:isSigned offset:offset]; - if (self) { - self.isDouble = NO; - } - return self; -} - -- (instancetype)initIntWithLength:(uint8_t)length isSigned:(BOOL)isSigned -{ - return [self initIntWithLength:length isSigned:isSigned offset:0]; -} - -- (instancetype)initDoubleWithLength:(uint8_t)length isSigned:(BOOL)isSigned scale:(double)scale offset:(uint8_t)offset -{ - if (length > 8) { - [NSException raise:@"Invalid size" format:@"Cannot convert over 8 bytes bytes to int"]; - } - self = [super initNumberWithLength:length isSigned:isSigned offset:offset]; - if (self) { - self.isDouble = YES; - self.scale = scale; - } - return self; -} - -- (instancetype)initDoubleWithLength:(uint8_t)length isSigned:(BOOL)isSigned scale:(double)scale -{ - return [self initDoubleWithLength:length isSigned:isSigned scale:scale offset:0]; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLNumericFormatter *newFormat = [super copyWithZone:zone]; - newFormat.isDouble = self.isDouble; - newFormat.scale = self.scale; - return newFormat; -} - -// The analyzer doesn't like i64 here, but it fact has been set to a valid value -// this is well tested, so we just silence the analyzer here -#ifndef __clang_analyzer__ -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - NSNumber *value = nil; - assert(data.length <= 8); - if (self.isSigned) { - int64_t i64 = 0; - uint8_t *pi64 = (uint8_t *)&i64; - memcpy(pi64, data.bytes, data.length); - - // check if signed and if sign bit is set - const uint8_t *bytes = data.bytes; - if (bytes[data.length - 1] & 0x80) { - for (NSInteger i = data.length; i < sizeof(int64_t); i++) { - pi64[i] = 0xFF; // pad the upper order bytes - } - } - if (self.isDouble) { - value = [NSNumber numberWithDouble:(double)i64 * self.scale]; - } else { - value = [NSNumber numberWithLongLong:i64]; - } - } else { - uint64_t u64 = 0; - memcpy(&u64, data.bytes, data.length); - if (self.isDouble) { - value = [NSNumber numberWithDouble:(double)u64 * self.scale]; - } else { - value = [NSNumber numberWithUnsignedLongLong:u64]; - } - } - return [[MBLNumericData alloc] initWithNumber:value timestamp:date data:data]; -} -#endif - -- (NSNumber *)numberFromDouble:(double)value -{ - if (self.isDouble) { - value = value / self.scale; - } - return [NSNumber numberWithInt:value]; -} - -@end diff --git a/MetaWear/Internal/Core/MBLRegister+Private.h b/MetaWear/Internal/Core/MBLRegister+Private.h deleted file mode 100644 index 0666e9b..0000000 --- a/MetaWear/Internal/Core/MBLRegister+Private.h +++ /dev/null @@ -1,107 +0,0 @@ -/** - * MBLRegister+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/28/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLRegister.h" -#import "MBLConstants.h" -#import "MBLFormat.h" -#import - -@class MBLMetaWear; -@class MBLModule; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLRegister (Private) -@property (nonatomic, weak, nullable) MBLModule *module; -@property (nonatomic) uint8_t registerId; -@property (nonatomic) uint8_t index; -@property (nonatomic) MBLFormat *format; -@property (nonatomic, nullable) NSString *identifier; - -@property (nonatomic) int16_t initializeCount; -@property (nonatomic) int16_t activateCount; - -// State Accessors -@property (nonatomic) BOOL needsResponse; -@property (nonatomic) BOOL writeResponds; -@property (nonatomic) BOOL isNotifyingImpl; -@property (nonatomic) BOOL isLoggingImpl; -@property (nonatomic) BOOL hasCommandsImpl; - - -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format; -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format; -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId index:(uint8_t)index format:(MBLFormat *)format identifier:(nullable NSString *)identifier; -- (instancetype)initWithModule:(MBLModule *)module registerId:(uint8_t)registerId format:(MBLFormat *)format identifier:(NSString *)identifier; - -// readAsync here conflicts with the paramerized type readAsync on MBLData -- (BFTask *)readAsync NS_SWIFT_NAME(readRegisterAsync()); -- (BFTask *)readForcedIndexAsync:(uint8_t)index; -- (BFTask *)localReadAsync; -- (nullable NSData *)readParameters; - -- (BFTask *)writeDataAsync:(nullable NSData *)data; -- (nonnull BFTask *)writeByteAsync:(uint8_t)byte; - -- (void)addNotificationWithExecutor:(BFExecutor *)executor handler:(MBLObjectHandler)handler; -- (void)removeNotificationHandlers NS_SWIFT_NAME(removeRegisterNotificationHandlers()); - -// conflicts with the paramerized types on MBLEvent -- (BFTask *)startNotificationsWithHandlerAsync:(nullable MBLObjectHandler)handler; -- (BFTask *)startNotificationsWithExecutorAsync:(BFExecutor *)executor withHandler:(nullable MBLObjectHandler)handler NS_SWIFT_NAME(startRegisterNotificationsAsync(executor:handler:)); -- (BFTask *)stopNotificationsAsync NS_SWIFT_NAME(stopRegisterNotificationsAsync()); - -- (void)recievedData:(nullable NSData *)data error:(nullable NSError *)error; -- (void)deviceDisconnected:(nullable NSError *)error; -- (BFTask *)deviceConnected; - - -- (BFTask *)initializeAsync; -- (BFTask *)deinitializeAsync; -- (BFTask *)activateAsync; -- (BFTask *)deactivateAsync; - -- (BFTask *)performAsyncInitialization; -- (BFTask *)performAsyncDeinitialization; - -- (BFTask *)performAsyncActivation; -- (BFTask *)performAsyncDeactivation; - -- (BFTask *)performAsyncStartNotifications; -- (BFTask *)performAsyncStopNotificationsAsync; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLStringData+Private.h b/MetaWear/Internal/Core/MBLStringData+Private.h deleted file mode 100644 index f884aa2..0000000 --- a/MetaWear/Internal/Core/MBLStringData+Private.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLStringData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 12/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLStringData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLStringData (Private) - -- (instancetype)initWithString:(NSString *)string timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLTriggeredRead.h b/MetaWear/Internal/Core/MBLTriggeredRead.h deleted file mode 100644 index cf89999..0000000 --- a/MetaWear/Internal/Core/MBLTriggeredRead.h +++ /dev/null @@ -1,51 +0,0 @@ -/** - * MBLTriggeredRead.h - * MetaWear - * - * Created by Stephen Schiffli on 1/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLTriggeredRead : MBLEvent - -- (instancetype)initWithData:(MBLData *)data - trigger:(MBLEvent *)trigger; - -- (instancetype)initWithData:(MBLData *)data - period:(uint32_t)period - eventCount:(uint16_t)eventCount; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Core/MBLTriggeredRead.m b/MetaWear/Internal/Core/MBLTriggeredRead.m deleted file mode 100644 index 8fc908d..0000000 --- a/MetaWear/Internal/Core/MBLTriggeredRead.m +++ /dev/null @@ -1,117 +0,0 @@ -/** - * MBLTriggeredRead.m - * MetaWear - * - * Created by Stephen Schiffli on 1/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTriggeredRead.h" -#import "MBLData+Private.h" -#import "MBLEvent+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLTimer+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "BFTask+MBLPrivate.h" -#import "MBLTimerEvent+Private.h" - -typedef struct __attribute__((packed)) { - uint8_t module_id; - uint8_t register_id; - uint8_t index; - uint8_t offset:5; - uint8_t len:3; -} filter_param_t; - -@interface MBLTriggeredRead () -@property (nonatomic) MBLData *data; -@property (nonatomic) MBLEvent *trigger; -@end - -@implementation MBLTriggeredRead - -- (instancetype)initWithData:(MBLData *)data - trigger:(MBLEvent *)trigger -{ - self = [super initWithModule:data.module registerId:data.registerId | 0x80 format:data.format identifier:data.identifier]; - if (self) { - self.data = data; - self.trigger = trigger; - } - return self; -} - -- (instancetype)initWithData:(MBLData *)data - period:(uint32_t)period - eventCount:(uint16_t)eventCount -{ - return [self initWithData:data trigger:[data.module.device.timer eventWithPeriod:period eventCount:eventCount]]; -} - -- (BFTask *)performAsyncInitialization -{ - return [[self.data initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - BOOL localRead = !self.isNotifyingImpl; - if (localRead) { - self.registerId |= 0x40; // Set the local read bit - } - self.index = self.data.index; - return task; - }]; -} - -- (BFTask *)performAsyncDeinitialization -{ - return [[self.data deinitializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.registerId &= 0xBF; // Clear the local read bit - self.index = 0xFF; - return task; - }]; -} - -- (BFTask *)performAsyncActivation -{ - return [[self.data activateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - BOOL localRead = !self.isNotifyingImpl; - return [self.trigger programCommandsToRunOnEventAsync:^{ - [self.data simulatedReadAsync:localRead]; - }]; - }]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [[self.data deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.trigger eraseCommandsToRunOnEventAsync]; - }]; -} - -@end - diff --git a/MetaWear/Internal/DFU/MBLFirmwareUpdateManager.h b/MetaWear/Internal/DFU/MBLFirmwareUpdateManager.h deleted file mode 100644 index 52f770b..0000000 --- a/MetaWear/Internal/DFU/MBLFirmwareUpdateManager.h +++ /dev/null @@ -1,70 +0,0 @@ -/** - * MBLFirmwareUpdateManager.h - * MetaWear - * - * Created by Stephen Schiffli on 10/9/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import "MBLConstants.h" -#import "MBLFirmwareBuild.h" -#import "MBLFirmwareUpdateInfo.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - This manager bundles up all communication with the Nordic DFU code. All you do - is create an instance and then call startUpdate - */ -@interface MBLFirmwareUpdateManager : NSObject - -/** - Let the manager know the path the firmware file and what identifier we should update - */ -- (instancetype)initWithFirmware:(MBLFirmwareBuild *)firmware - identifier:(NSUUID *)identifier; - -/** - This starts the search for a device advertising the Nordic DFU service, then when it - finds one that corresponds with the identifier, it will connect and start the update process - */ -- (BFTask *)startUpdate; - - -/// Util functions -+ (BFTask *> *)getAllFirmwareForDeviceAsync:(MBLDeviceInfo *)device; -+ (BFTask *)getLatestFirmwareForDeviceAsync:(MBLDeviceInfo *)device; - -@end - -NS_ASSUME_NONNULL_END - diff --git a/MetaWear/Internal/DFU/MBLFirmwareUpdateManager.m b/MetaWear/Internal/DFU/MBLFirmwareUpdateManager.m deleted file mode 100644 index b6cd993..0000000 --- a/MetaWear/Internal/DFU/MBLFirmwareUpdateManager.m +++ /dev/null @@ -1,354 +0,0 @@ -/** - * MBLFirmwareUpdateManager.m - * MetaWear - * - * Created by Stephen Schiffli on 10/9/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFirmwareUpdateManager.h" -#import "MBLMetaWear+Private.h" -#import "MBLAnalytics.h" -#import "MBLConstants.h" -#import "MBLDeviceInfo.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLConstants+Private.h" -#import "BFTask+MBLExtensions.h" -#import "MBLLogger.h" - - -@interface MBLFirmwareUpdateManager() -@property (nonatomic) MBLFirmwareBuild *firmware; -@property (nonatomic) NSUUID *identifier; - -@property (nonatomic) BFTaskCompletionSource *source; -@property (nonatomic) BOOL updateDone; -@property (nonatomic) int recoveryTries; -@property (nonatomic) NSTimer *connectionWatchdog; -@property (nonatomic) NSError *recievedError; -@property (nonatomic) NSString *modelNumber; -@property (nonatomic) NSString *hardwareRev; - -@property (nonatomic) CBCentralManager *centralManager; -@property (nonatomic) CBPeripheral *peripheral; -@end - -@implementation MBLFirmwareUpdateManager - -- (instancetype)initWithFirmware:(MBLFirmwareBuild *)firmware - identifier:(NSUUID *)identifier -{ - self = [super init]; - if (self) { - self.firmware = firmware; - self.identifier = identifier; - - self.updateDone = NO; - self.recoveryTries = 2; - } - return self; -} - -- (BFTask *)startUpdate -{ - self.source = [BFTaskCompletionSource taskCompletionSource]; - // We assume that we just call the "jump to bootloader" on the MetaWear so we give it some - // time to reset and get into the bootloader. This wait time is ad-hoc, but experiments - // show it works well - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; - }); - return self.source.task; -} - -+ (BFTask *> *)getAllFirmwareForDeviceAsync:(MBLDeviceInfo *)device -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - // To get the latest firmware version we parse the json from our website, make sure to do - // this on a backgroud thread to avoid hanging the UI. - NSURL *url = [NSURL URLWithString:@"https://mbientlab.com/releases/metawear/info1.json"]; - [[NSURLSession.sharedSession dataTaskWithRequest:[[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:10] completionHandler:^(NSData *data, NSURLResponse * response, NSError *error) { - NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; - if (error) { - [source trySetError:error]; - return; - } else if (httpResponse.statusCode != 200) { - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNoAvailableFirmware - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Firmware URL %@ returned code %ld", url, (long)httpResponse.statusCode]}]]; - return; - } - - NSMutableArray *allFirmwares = [NSMutableArray array]; - NSDictionary *info = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; - if (info) { - NSString *buildFlavor = @"vanilla"; - NSString *hardwareRev = device.hardwareRevision ? device.hardwareRevision : @"0.1"; - NSString *modelNumber = device.modelNumber ? device.modelNumber : @"0"; - // The info1.json is a nested dictionary - NSDictionary *potentialVersions = info[hardwareRev][modelNumber][buildFlavor]; - NSSet *validVersions = [potentialVersions keysOfEntriesPassingTest:^BOOL(NSString *key, NSDictionary *obj, BOOL *stop) { - return ![MBLConstants versionString:kMBLAPIVersion isLessThan:obj[@"min-ios-version"]]; - }]; - NSArray *sortedVersions = [validVersions sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES]]]; - for (NSString *version in sortedVersions) { - [allFirmwares addObject:[[MBLFirmwareBuild alloc] initWithHardwareRev:hardwareRev - modelNumber:modelNumber - buildFlavor:buildFlavor - firmwareRev:version - filename:potentialVersions[version][@"filename"]]]; - } - } - if (allFirmwares.count == 0) { - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNoAvailableFirmware - userInfo:@{NSLocalizedDescriptionKey : @"No valid firmware releases found. Please update your application and if problem persists, email developers@mbientlab.com"}]]; - return; - } - [source trySetResult:allFirmwares]; - }] resume]; - return source.task; -} - -+ (BFTask *)getLatestFirmwareForDeviceAsync:(MBLDeviceInfo *)device -{ - return [[MBLFirmwareUpdateManager getAllFirmwareForDeviceAsync:device] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask *> *t) { - return t.result.lastObject; - }]; -} - - -- (void)attemptRecoveryWithError:(NSError *)error -{ - // Lets cache only the first encountered error - if (!self.recievedError) { - self.recievedError = error; - } - // See if we have any retries remaining - if (self.recoveryTries) { - self.recoveryTries--; - // Clear all the state and wait a few seconds before firing up the scanner again - self.updateDone = NO; - self.centralManager = nil; - [self.connectionWatchdog invalidate]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0 * NSEC_PER_SEC)), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ - self.centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; - }); - } else { - // If out of retries then report the first encountered error - [self.source trySetError:self.recievedError]; - } -} - -- (BOOL)sanityCheck -{ - // If we were given a firmware model, it damn well better match - if (self.firmware.modelNumber && self.modelNumber) { - // Sanity check the model number - if (![self.modelNumber isEqualToString:self.firmware.modelNumber]) { - self.recoveryTries = 0; - [self attemptRecoveryWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorWrongFirmwareModelNumber - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Couldn't perform DFU, bad model number given. Given %@, but expected %@", self.firmware.modelNumber, self.modelNumber]}]]; - return NO; - } - } - // If we were given a hardware rev, it damn well better match - if (self.firmware.hardwareRev && self.hardwareRev) { - // Sanity check the model number - if (![self.hardwareRev isEqualToString:self.firmware.hardwareRev]) { - self.recoveryTries = 0; - [self attemptRecoveryWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorWrongFirmwareModelNumber - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"Couldn't perform DFU, bad hardware rev given. Given %@, but expected %@", self.firmware.hardwareRev, self.hardwareRev]}]]; - return NO; - } - } - // Make sure local file is ready to go - if (!self.firmware.firmwareLocalFile) { - [self attemptRecoveryWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Couldn't perform DFU, firmware wasn't downloaded first."}]]; - return NO; - } - return YES; -} - -- (void)modelNumberReadFinished -{ - // Exit if sanity isn't found - if (![self sanityCheck]) { - return; - } - // Report the successful result! - self.peripheral.delegate = nil; - self.centralManager.delegate = nil; - [self.source trySetResult:[[MBLFirmwareUpdateInfo alloc] initWithFirmwareUrl:self.firmware.firmwareLocalFile - target:self.peripheral - centralManager:self.centralManager]]; -} - -- (void)connectionWatchdogTimeout:(NSTimer *)timer -{ - [self.centralManager stopScan]; - [self attemptRecoveryWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorNoFirmwareUpdater - userInfo:@{NSLocalizedDescriptionKey : @"MetaWear device didn't enter firmware update mode. Please wait 60 seconds and try update again."}]]; -} - - -#pragma mark - CBCentralManagerDelegate - -- (void)centralManagerDidUpdateState:(CBCentralManager *)central -{ - switch (central.state) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - case CBCentralManagerStateUnknown: - case CBCentralManagerStateResetting: - // Updates are imminent, so wait - break; - case CBCentralManagerStateUnsupported: - [self.source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothUnsupported - userInfo:@{NSLocalizedDescriptionKey : @"The platform doesn't support the Bluetooth Low Energy Central/Client role."}]]; - case CBCentralManagerStateUnauthorized: - [self.source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothUnauthorized - userInfo:@{NSLocalizedDescriptionKey : @"The application is not authorized to use the Bluetooth Low Energy Central/Client role."}]]; - case CBCentralManagerStatePoweredOff: - [self.source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorBluetoothPoweredOff - userInfo:@{NSLocalizedDescriptionKey : @"Core Bluetooth Error. Please ensure bluetooth is enabled."}]]; - case CBCentralManagerStatePoweredOn: - // As soon as the central is ready, start scanning! - [self.centralManager scanForPeripheralsWithServices:@[[MBLConstants DFUServiceUUID]] options:nil]; - MBLLog(MBLLogLevelInfo, @"Scanning for MetaBoot..."); - // For saftey we set up a timer, and will signal error if we fail to find the - // requested MetaBoot device within 10 seconds - self.connectionWatchdog = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:@selector(connectionWatchdogTimeout:) userInfo:nil repeats:NO]; - break; -#pragma clang diagnostic pop - } -} - -- (void)centralManager:(CBCentralManager *)central - didDiscoverPeripheral:(CBPeripheral *)peripheral - advertisementData:(NSDictionary *)advertisementData - RSSI:(NSNumber *)RSSI -{ - if ((self.identifier == nil) || [peripheral.identifier isEqual:self.identifier]) { - MBLLog(MBLLogLevelInfo, @"Found MetaBoot"); - // We found what we were looking for so stop the scan and let the DFU code know what device to update - self.identifier = peripheral.identifier; - [self.connectionWatchdog invalidate]; - [central stopScan]; - self.peripheral = peripheral; - [central connectPeripheral:peripheral options:nil]; - } -} - -- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral -{ - peripheral.delegate = self; - [peripheral discoverServices:@[[MBLConstants DISServiceUUID]]]; -} - -- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error -{ - [self attemptRecoveryWithError:error]; -} - -- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error -{ - [self attemptRecoveryWithError:error]; -} - -- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error -{ - if (error) { - [self attemptRecoveryWithError:error]; - return; - } - for (CBService *service in peripheral.services) { - if ([service.UUID isEqual:[MBLConstants DISServiceUUID]]) { - [peripheral discoverCharacteristics:@[[MBLConstants DISModelNumberUUID], [MBLConstants DISHardwareRevUUID]] forService:service]; - return; - } - } - [self modelNumberReadFinished]; -} - -- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error -{ - if (error) { - [self attemptRecoveryWithError:error]; - return; - } - if ([service.UUID isEqual:[MBLConstants DISServiceUUID]]) { - NSMutableArray *characteristicsToRead = [NSMutableArray array]; - for (CBCharacteristic *characteristic in service.characteristics) { - if ([characteristic.UUID isEqual:[MBLConstants DISModelNumberUUID]] || - [characteristic.UUID isEqual:[MBLConstants DISHardwareRevUUID]]) { - [characteristicsToRead addObject:characteristic]; - } - } - if (characteristicsToRead.count == 2) { - for (CBCharacteristic *characteristic in characteristicsToRead) { - [peripheral readValueForCharacteristic:characteristic]; - } - return; - } - } - [self modelNumberReadFinished]; -} - -- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error -{ - if (error) { - [self attemptRecoveryWithError:error]; - return; - } - if ([characteristic.UUID isEqual:[MBLConstants DISModelNumberUUID]]) { - self.modelNumber = [[NSString alloc] initWithBytes:characteristic.value.bytes - length:characteristic.value.length - encoding:NSASCIIStringEncoding]; - } - if ([characteristic.UUID isEqual:[MBLConstants DISHardwareRevUUID]]) { - self.hardwareRev = [[NSString alloc] initWithBytes:characteristic.value.bytes - length:characteristic.value.length - encoding:NSASCIIStringEncoding]; - } - if (self.modelNumber && self.hardwareRev) { - [self modelNumberReadFinished]; - } -} - -@end diff --git a/MetaWear/Internal/Mocks/MBLBluetoothCentral.h b/MetaWear/Internal/Mocks/MBLBluetoothCentral.h deleted file mode 100644 index b48b6ce..0000000 --- a/MetaWear/Internal/Mocks/MBLBluetoothCentral.h +++ /dev/null @@ -1,88 +0,0 @@ -/** - * MBLBluetoothCentral.h - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import "MBLBluetoothPeripheral.h" - -@protocol MBLBluetoothCentralDelegate; - -NS_ASSUME_NONNULL_BEGIN - -/** - To improve testabilty we need to mock CoreBluetooth objects. To do this we will make our - own protocols that are identical the CoreBluetooth interfaces and then code only to these. - That keeps the bulk of the code CoreBluetooth agnostic and allows us to create mock objects. - */ -@protocol MBLBluetoothCentral -@property id delegate; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -@property CBCentralManagerState state; -#pragma clang diagnostic pop - -- (id)initWithDelegate:(id)delegate queue:(dispatch_queue_t)queue options:(nullable NSDictionary *)options; - -- (NSArray> *)retrievePeripheralsWithIdentifiers:(NSArray *)identifiers; -- (NSArray> *)retrieveConnectedPeripheralsWithServices:(NSArray *)serviceUUIDs; -- (void)scanForPeripheralsWithServices:(nullable NSArray *)serviceUUIDs options:(nullable NSDictionary *)options; -- (void)stopScan; -- (void)connectPeripheral:(id)peripheral options:(nullable NSDictionary *)options; -- (void)cancelPeripheralConnection:(id)peripheral; -@end - -// CBPeripheral implements the protocol already! -@interface CBCentralManager (Private) -@end - - -/** - Also mock the delegate - */ -@protocol MBLBluetoothCentralDelegate -@required -- (void)centralManagerDidUpdateState:(id)central; - -@optional -- (void)centralManager:(id)central willRestoreState:(NSDictionary *)dict; -- (void)centralManager:(id)central didRetrievePeripherals:(NSArray> *)peripherals; -- (void)centralManager:(id)central didRetrieveConnectedPeripherals:(NSArray> *)peripherals; -- (void)centralManager:(id)central didDiscoverPeripheral:(id)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI; -- (void)centralManager:(id)central didConnectPeripheral:(id)peripheral; -- (void)centralManager:(id)central didFailToConnectPeripheral:(id)peripheral error:(nullable NSError *)error; -- (void)centralManager:(id)central didDisconnectPeripheral:(id)peripheral error:(nullable NSError *)error; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Mocks/MBLBluetoothCentralMock.h b/MetaWear/Internal/Mocks/MBLBluetoothCentralMock.h deleted file mode 100644 index cc5994d..0000000 --- a/MetaWear/Internal/Mocks/MBLBluetoothCentralMock.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLBluetoothCentralMock.h - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBluetoothCentral.h" - -@interface MBLBluetoothCentralMock : NSObject -@property id delegate; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" -@property CBCentralManagerState state; -#pragma clang diagnostic pop -@property dispatch_queue_t queue; - -@property (nonatomic) double connectWaitTime; -- (void)resetKnobs; -@end diff --git a/MetaWear/Internal/Mocks/MBLBluetoothCentralMock.m b/MetaWear/Internal/Mocks/MBLBluetoothCentralMock.m deleted file mode 100644 index af22e1b..0000000 --- a/MetaWear/Internal/Mocks/MBLBluetoothCentralMock.m +++ /dev/null @@ -1,152 +0,0 @@ -/** - * MBLBluetoothCentralMock.m - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBluetoothCentralMock.h" -#import "MBLBluetoothPeripheralMock.h" -#import "MBLMockPeripheralFactory.h" - -@interface MBLBluetoothCentralMock () -@property (nonatomic) NSDictionary *peripherals; -@property (nonatomic) BOOL isScanning; -@property (nonatomic) NSTimer *connectionTimer; -@end - -@implementation MBLBluetoothCentralMock - -- (id)initWithDelegate:(id)delegate queue:(dispatch_queue_t)queue options:(NSDictionary *)options -{ - self = [super init]; - if (self) { - self.delegate = delegate; - self.queue = queue; - - [self resetKnobs]; - - MBLBluetoothPeripheralMock *metawearR = [[MBLBluetoothPeripheralMock alloc] initWithVersion:MBLFirmwareVersion1_2_5 - model:MBLModelMetaWearR]; - MBLBluetoothPeripheralMock *metawearC = [[MBLBluetoothPeripheralMock alloc] initWithVersion:MBLFirmwareVersion1_2_5 - model:MBLModelMetaWearC]; - self.peripherals = @{ metawearR.identifier : metawearR, - metawearC.identifier : metawearC}; - - // Simulate the initial state tranistion of a the typical CoreBluetooth beast -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - self.state = CBCentralManagerStateUnknown; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), queue, ^{ - self.state = CBCentralManagerStatePoweredOn; - [self.delegate centralManagerDidUpdateState:self]; - }); -#pragma clang diagnostic pop - } - return self; -} - -- (void)resetKnobs -{ - self.connectWaitTime = 0.1; - [self.connectionTimer invalidate]; -} - -- (NSArray> *)retrievePeripheralsWithIdentifiers:(NSArray *)identifiers -{ - NSMutableArray *array = [NSMutableArray array]; - [self.peripherals enumerateKeysAndObjectsUsingBlock:^(NSUUID *key, MBLBluetoothPeripheralMock *obj, BOOL *stop) { - if ([identifiers containsObject:key]) { - [array addObject:obj]; - } - }]; - return array; -} - -- (NSArray> *)retrieveConnectedPeripheralsWithServices:(NSArray *)serviceUUIDs -{ - return [NSArray array]; -} - -- (void)scanForPeripheralsWithServices:(NSArray *)serviceUUIDs options:(NSDictionary *)options -{ - self.isScanning = YES; - dispatch_async(dispatch_get_main_queue(), ^{ - [self.peripherals enumerateKeysAndObjectsUsingBlock:^(NSUUID *key, MBLBluetoothPeripheralMock *obj, BOOL *stop) { - if (self.isScanning) { - [self.delegate centralManager:self - didDiscoverPeripheral:obj - advertisementData:@{} - RSSI:@-45.0]; - } - }]; - }); -} - -- (void)stopScan -{ - self.isScanning = NO; -} - -- (void)connectPeripheral:(id)peripheral options:(NSDictionary *)options -{ - if (peripheral.state == CBPeripheralStateConnecting) { - return; - } - // Slight delay for realism and testing - peripheral.state = CBPeripheralStateConnecting; - dispatch_async(dispatch_get_main_queue(), ^{ - self.connectionTimer = [NSTimer scheduledTimerWithTimeInterval:self.connectWaitTime target:self selector:@selector(didConnect:) userInfo:peripheral repeats:NO]; - }); -} - -- (void)didConnect:(NSTimer *)timer -{ - id peripheral = timer.userInfo; - peripheral.state = CBPeripheralStateConnected; - - dispatch_async(self.queue, ^{ - [self.delegate centralManager:self didConnectPeripheral:peripheral]; - }); -} - -- (void)cancelPeripheralConnection:(id)peripheral -{ - [self.connectionTimer invalidate]; - - // Slight delay for realism - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), self.queue, ^{ - peripheral.state = CBPeripheralStateDisconnected; - [self.delegate centralManager:self didDisconnectPeripheral:peripheral error:nil]; - }); -} - -@end diff --git a/MetaWear/Internal/Mocks/MBLBluetoothPeripheral.h b/MetaWear/Internal/Mocks/MBLBluetoothPeripheral.h deleted file mode 100644 index c01689b..0000000 --- a/MetaWear/Internal/Mocks/MBLBluetoothPeripheral.h +++ /dev/null @@ -1,80 +0,0 @@ -/** - * MBLBluetoothPeripheral.h - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import - -@protocol MBLBluetoothPeripheralDelegate; - -NS_ASSUME_NONNULL_BEGIN - -/** - To improve testabilty we need to mock CoreBluetooth objects. To do this we will make our - own protocols that are identical the CoreBluetooth interfaces and then code only to these. - That keeps the bulk of the code CoreBluetooth agnostic and allows us to create mock objects. - */ -@protocol MBLBluetoothPeripheral -@property id delegate; -@property NSString *name; -@property CBPeripheralState state; -@property NSArray *services; -@property NSUUID *identifier; - -- (void)readRSSI; -- (void)discoverServices:(nullable NSArray *)serviceUUIDs; -- (void)discoverCharacteristics:(nullable NSArray *)characteristicUUIDs forService:(CBService *)service; -- (void)readValueForCharacteristic:(CBCharacteristic *)characteristic; -- (void)writeValue:(NSData *)data forCharacteristic:(CBCharacteristic *)characteristic type:(CBCharacteristicWriteType)type; -- (void)setNotifyValue:(BOOL)enabled forCharacteristic:(CBCharacteristic *)characteristic; -@end - -// CBPeripheral implements the protocol already! -@interface CBPeripheral (Private) -@end - - -/** - Also mock the delegate - */ -@protocol MBLBluetoothPeripheralDelegate -@optional -- (void)peripheral:(id)peripheral didReadRSSI:(NSNumber *)RSSI error:(nullable NSError *)error; -- (void)peripheral:(id)peripheral didDiscoverServices:(nullable NSError *)error; -- (void)peripheral:(id)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(nullable NSError *)error; -- (void)peripheral:(id)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(nullable NSError *)error; -- (void)peripheral:(id)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(nullable NSError *)error; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Mocks/MBLBluetoothPeripheralMock.h b/MetaWear/Internal/Mocks/MBLBluetoothPeripheralMock.h deleted file mode 100644 index 3bab77f..0000000 --- a/MetaWear/Internal/Mocks/MBLBluetoothPeripheralMock.h +++ /dev/null @@ -1,68 +0,0 @@ -/** - * MBLBluetoothPeripheralMock.h - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBluetoothPeripheral.h" -#import - -typedef void (^MBLHapticHandler)(uint8_t dutyCycle, uint16_t pulseWidth); -typedef void (^MBLBuzzerHandler)(uint8_t dutyCycle, uint16_t pulseWidth); - - -@interface MBLBluetoothPeripheralMock : NSObject -// Properties required by the MBLBluetoothPeripheral protocol -@property id delegate; -@property NSString *name; -@property CBPeripheralState state; -@property NSArray *services; -@property NSUUID *identifier; - -// Fun knobs to play with for testing -@property (nonatomic) double discoverServicesWaitTime; -@property (nonatomic) uint32_t keyRegister; -@property (nonatomic) BOOL isMetaBoot; -@property (nonatomic) BOOL failServiceDiscoveryOnce; -- (void)resetKnobs; - -// In order to check that the peripherals are working you can watch them -// by attaching a handler to see what sort of outputs they report -@property (nonatomic) MBLHapticHandler hapticHandler; -@property (nonatomic) MBLBuzzerHandler buzzerHandler; - -- (instancetype)initWithVersion:(MBLFirmwareVersion)version model:(MBLModel)model; - -// Used by the mock modules to send firmware responses -- (void)messageSend:(uint8_t)modId regId:(uint8_t)regId notifyen:(uint8_t)notifyen data:(NSData *)data; - -@end diff --git a/MetaWear/Internal/Mocks/MBLBluetoothPeripheralMock.m b/MetaWear/Internal/Mocks/MBLBluetoothPeripheralMock.m deleted file mode 100644 index 5c5e816..0000000 --- a/MetaWear/Internal/Mocks/MBLBluetoothPeripheralMock.m +++ /dev/null @@ -1,467 +0,0 @@ -/** - * MBLBluetoothPeripheralMock.m - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBluetoothPeripheralMock.h" -#import "MBLMockUtils.h" -#import "MBLModuleMock.h" -#import "MBLMetaWear+Private.h" -#import "MBLConstants+Private.h" - -/* - Please forgive this hack - since CBMutableCharacteristic and CBMutableService - arn't allowed on tvOS we create a plain old NSObject with all the properties - of interest and just cast it to the CB types - again sorry for the hack - */ -@interface MBLServiceCharacteristicMock : NSObject -@property(retain, readwrite, nonatomic, nullable) CBUUID *UUID; -@property(assign, readwrite, nonatomic) CBCharacteristicProperties properties; -@property(retain, readwrite, nullable) NSData *value; -@property(retain, readwrite, nullable) NSArray *characteristics; -- (instancetype)initWithUUID:(CBUUID *)uuid; -@end -@implementation MBLServiceCharacteristicMock -- (instancetype)initWithUUID:(CBUUID *)uuid -{ - self = [super init]; - if (self) { - self.UUID = uuid; - self.properties = CBCharacteristicPropertyWriteWithoutResponse | CBCharacteristicWriteWithResponse; - } - return self; -} -@end - - -@interface MBLBluetoothPeripheralMock () -@property (nonatomic) MBLFirmwareVersion version; -@property (nonatomic) MBLModel model; - -@property (nonatomic) NSArray *modules; -@property (nonatomic) MBLModuleMock *testDebug; - -@property (nonatomic) CBMutableCharacteristic *command; -@property (nonatomic) CBMutableCharacteristic *notification; - -@property (nonatomic) CBMutableCharacteristic *batteryLife; - -@property (nonatomic) CBMutableCharacteristic *DISModelNumber; -@property (nonatomic) CBMutableCharacteristic *DISSerialNumber; -@property (nonatomic) CBMutableCharacteristic *DISFirmwareRev; -@property (nonatomic) CBMutableCharacteristic *DISHardwareRev; -@property (nonatomic) CBMutableCharacteristic *DISManufacturerName; - -@property (nonatomic) NSTimer *discoveryTimer; -@end - -@implementation MBLBluetoothPeripheralMock - -- (id)copyWithZone:(NSZone *)zone -{ - MBLBluetoothPeripheralMock *newPeripheral = [[self class] allocWithZone:zone]; - newPeripheral.delegate = self.delegate; - newPeripheral.name = self.name; - newPeripheral.state = self.state; - newPeripheral.services = self.services; - newPeripheral.identifier = self.identifier; - - newPeripheral.discoverServicesWaitTime = self.discoverServicesWaitTime; - newPeripheral.keyRegister = self.keyRegister; - newPeripheral.isMetaBoot = self.isMetaBoot; - - newPeripheral.hapticHandler = self.hapticHandler; - newPeripheral.buzzerHandler = self.buzzerHandler; - - newPeripheral.version = self.version; - newPeripheral.model = self.model; - - newPeripheral.modules = self.modules; - newPeripheral.testDebug = self.testDebug; - - newPeripheral.command = self.command; - newPeripheral.notification = self.notification; - - newPeripheral.batteryLife = self.batteryLife; - - newPeripheral.DISModelNumber = self.DISModelNumber; - newPeripheral.DISSerialNumber = self.DISSerialNumber; - newPeripheral.DISFirmwareRev = self.DISFirmwareRev; - newPeripheral.DISHardwareRev = self.DISHardwareRev; - newPeripheral.DISManufacturerName = self.DISManufacturerName; - return newPeripheral; -} - -- (BOOL)isEqual:(id)object -{ - if (self == object) { - return YES; - } - if (![object isKindOfClass:[MBLBluetoothPeripheralMock class]]) { - return NO; - } - return [self.identifier isEqual:((MBLBluetoothPeripheralMock *)object).identifier]; -} - -- (NSUInteger)hash -{ - return self.identifier.hash; -} - -- (instancetype)initWithVersion:(MBLFirmwareVersion)version model:(MBLModel)model -{ - self = [super init]; - if (self) { - self.name = @"MetaWear"; - self.state = CBPeripheralStateDisconnected; - self.identifier = [[NSUUID alloc] initWithUUIDString:[NSString stringWithFormat:@"E621%04X-C36C-495A-93FC-0C247A3E6E5F", model]]; - - [self resetKnobs]; - - self.version = version; - self.model = model; - - self.modules = @[[NSNull null], - [MBLModuleMock mechanicalSwitch:self], - [MBLModuleMock led:self], - [MBLModuleMock accelerometer:self], - [MBLModuleMock temperature:self], - [MBLModuleMock gpio:self], - [NSNull null], - [NSNull null], - [MBLModuleMock hapticBuzzer:self], - [NSNull null], - [NSNull null], - [MBLModuleMock logging:self], - [NSNull null], - [MBLModuleMock serial:self], - [NSNull null], - [NSNull null], - [NSNull null], - [NSNull null], - [MBLModuleMock barometer:self], - [NSNull null], - [NSNull null], - [NSNull null], - [NSNull null], - [NSNull null], - [NSNull null], - [NSNull null]]; - self.testDebug = [MBLModuleMock testDebug:self]; - } - return self; -} - -- (void)resetKnobs -{ - self.discoverServicesWaitTime = 0.1; - [self.discoveryTimer invalidate]; - self.keyRegister = 0; - self.isMetaBoot = NO; - self.failServiceDiscoveryOnce = NO; -} - -//- (NSData *)getAddEntityResponse:(NSData *)data -//{ -// NSData *response = nil; -// -// uint8_t const *byte = data.bytes; -// uint8_t moduleId = *byte; -// byte++; -// uint8_t regId = *byte; -// uint8_t responseId = 0xFF; -// if (moduleId == 0x9 && regId == 0x2) { -// responseId = self.dataFilterCount++; -// } else if (moduleId == 0xA && regId == 0x2) { -// responseId = self.eventCount++; -// } else if (moduleId == 0xB && regId == 0x2) { -// responseId = self.logCount++; -// } else if (moduleId == 0xC && regId == 0x2) { -// responseId = self.timerCount++; -// } else if (moduleId == 0xE && regId == 0x3) { -// responseId = self.ancsCount++; -// } else if (moduleId == 0xF && regId == 0x2) { -// responseId = self.macroCount++; -// } -// if (responseId != 0xFF) { -// response = [MBLMockUtils dataFromString:[NSString stringWithFormat:@"%02X-%02X-%02X", moduleId, regId, responseId]]; -// } -// return response; -//} - -- (void)readRSSI -{ - dispatch_async(dispatch_get_main_queue(), ^{ - [self.delegate peripheral:self didReadRSSI:@-45.0 error:nil]; - }); -} - -- (void)discoverServices:(NSArray *)serviceUUIDs -{ - NSMutableArray *services = [NSMutableArray array]; - for (CBUUID *uuid in serviceUUIDs) { - // DFU Service IFF MetaBoot mode requested - if (self.isMetaBoot != [uuid isEqual:[MBLConstants DFUServiceUUID]]) { - continue; - } -#if TARGET_OS_TV - [services addObject:[[MBLServiceCharacteristicMock alloc] initWithUUID:uuid]]; -#else - [services addObject:[[CBMutableService alloc] initWithType:uuid primary:YES]]; -#endif - } - self.services = services; - dispatch_async(dispatch_get_main_queue(), ^{ - self.discoveryTimer = [NSTimer scheduledTimerWithTimeInterval:self.discoverServicesWaitTime target:self selector:@selector(didDiscover:) userInfo:nil repeats:NO]; - }); -} - -- (void)didDiscover:(NSTimer *)timer -{ - NSError *error = nil; - if (self.failServiceDiscoveryOnce) { - self.failServiceDiscoveryOnce = NO; - error = [NSError errorWithDomain:kMBLErrorDomain code:kMBLErrorUnexpectedServices userInfo:nil]; - } - [self.delegate peripheral:self didDiscoverServices:error]; -} - -+ (CBMutableCharacteristic *)readOnly:(CBUUID *)uuid -{ -#if TARGET_OS_TV - return (CBMutableCharacteristic *)[[MBLServiceCharacteristicMock alloc] initWithUUID:uuid]; -#else - return [[CBMutableCharacteristic alloc] initWithType:uuid - properties:CBCharacteristicPropertyRead - value:nil - permissions:CBAttributePermissionsReadable]; -#endif -} -+ (CBMutableCharacteristic *)readWrite:(CBUUID *)uuid -{ -#if TARGET_OS_TV - return (CBMutableCharacteristic *)[[MBLServiceCharacteristicMock alloc] initWithUUID:uuid]; -#else - return [[CBMutableCharacteristic alloc] initWithType:uuid - properties: - CBCharacteristicPropertyRead | - CBCharacteristicPropertyWriteWithoutResponse | - CBCharacteristicPropertyWrite - value:nil - permissions: - CBAttributePermissionsReadable | - CBAttributePermissionsWriteable]; -#endif -} -+ (CBMutableCharacteristic *)readNotify:(CBUUID *)uuid -{ -#if TARGET_OS_TV - return (CBMutableCharacteristic *)[[MBLServiceCharacteristicMock alloc] initWithUUID:uuid]; -#else - return [[CBMutableCharacteristic alloc] initWithType:uuid - properties: - CBCharacteristicPropertyRead | - CBCharacteristicPropertyNotify - value:nil - permissions: - CBAttributePermissionsReadable]; -#endif -} - - -- (void)discoverCharacteristics:(NSArray *)characteristicUUIDs forService:(CBService *)service -{ - dispatch_async(dispatch_get_main_queue(), ^{ - NSMutableArray *characteristics = [NSMutableArray array]; - if ([service.UUID isEqual:[MBLConstants serviceUUID]]) { - for (CBUUID *uuid in characteristicUUIDs) { - if ([uuid isEqual:[MBLConstants commandUUID]]) { - self.command = [MBLBluetoothPeripheralMock readWrite:uuid]; - [characteristics addObject:self.command]; - } else if ([uuid isEqual:[MBLConstants notificationUUID]]) { - self.notification = [MBLBluetoothPeripheralMock readNotify:uuid]; - [characteristics addObject:self.notification]; - } - } - } else if ([service.UUID isEqual:[MBLConstants batteryServiceUUID]]) { - for (CBUUID *uuid in characteristicUUIDs) { - if ([uuid isEqual:[MBLConstants batteryLifeUUID]]) { - self.batteryLife = [MBLBluetoothPeripheralMock readOnly:uuid]; - [characteristics addObject:self.batteryLife]; - } - } - } else if ([service.UUID isEqual:[MBLConstants DISServiceUUID]]) { - for (CBUUID *uuid in characteristicUUIDs) { - if ([uuid isEqual:[MBLConstants DISManufacturerNameUUID]]) { - self.DISManufacturerName = [MBLBluetoothPeripheralMock readOnly:uuid]; - [characteristics addObject:self.DISManufacturerName]; - } else if ([uuid isEqual:[MBLConstants DISSerialNumberUUID]]) { - self.DISSerialNumber = [MBLBluetoothPeripheralMock readOnly:uuid]; - [characteristics addObject:self.DISSerialNumber]; - } else if ([uuid isEqual:[MBLConstants DISHardwareRevUUID]]) { - self.DISHardwareRev = [MBLBluetoothPeripheralMock readOnly:uuid]; - [characteristics addObject:self.DISHardwareRev]; - } else if ([uuid isEqual:[MBLConstants DISFirmwareRevUUID]]) { - self.DISFirmwareRev = [MBLBluetoothPeripheralMock readOnly:uuid]; - [characteristics addObject:self.DISFirmwareRev]; - } else if ([uuid isEqual:[MBLConstants DISModelNumberUUID]]) { - self.DISModelNumber = [MBLBluetoothPeripheralMock readOnly:uuid]; - [characteristics addObject:self.DISModelNumber]; - } - } - } - ((CBMutableService *)service).characteristics = characteristics; - [self.delegate peripheral:self didDiscoverCharacteristicsForService:service error:nil]; - }); -} - -- (void)readValueForCharacteristic:(CBCharacteristic *)characteristic -{ - NSData *result = nil; - CBUUID *uuid = characteristic.UUID; - if ([uuid isEqual:[MBLConstants DISManufacturerNameUUID]]) { - result = [@"MbientLab Inc" dataUsingEncoding:NSASCIIStringEncoding]; - } else if ([uuid isEqual:[MBLConstants DISSerialNumberUUID]]) { - result = [@"FFFFFFFF" dataUsingEncoding:NSASCIIStringEncoding]; - } else if ([uuid isEqual:[MBLConstants DISHardwareRevUUID]]) { - switch (self.model) { - case MBLModelMetaWearR: - result = [@"0.2" dataUsingEncoding:NSASCIIStringEncoding]; - break; - case MBLModelMetaWearRG: - case MBLModelMetaWearRPro: - case MBLModelMetaWearC: - case MBLModelMetaWearCPro: - case MBLModelMetaEnvironment: - case MBLModelMetaDetector: - result = [@"0.3" dataUsingEncoding:NSASCIIStringEncoding]; - break; - case MBLModelMetaHealth: - case MBLModelMetaTracker: - case MBLModelMetaMotionR: - case MBLModelMetaMotionC: - result = [@"0.1" dataUsingEncoding:NSASCIIStringEncoding]; - break; - default: - break; - } - } else if ([uuid isEqual:[MBLConstants DISFirmwareRevUUID]]) { - result = [MBLFirmwareVersionString(self.version) dataUsingEncoding:NSASCIIStringEncoding]; - } else if ([uuid isEqual:[MBLConstants DISModelNumberUUID]]) { - switch (self.model) { - case MBLModelMetaWearR: - result = [@"0" dataUsingEncoding:NSASCIIStringEncoding]; - break; - case MBLModelMetaWearRG: - case MBLModelMetaWearRPro: - result = [@"1" dataUsingEncoding:NSASCIIStringEncoding]; - break; - case MBLModelMetaWearC: - case MBLModelMetaWearCPro: - case MBLModelMetaEnvironment: - case MBLModelMetaDetector: - result = [@"2" dataUsingEncoding:NSASCIIStringEncoding]; - break; - case MBLModelMetaHealth: - result = [@"3" dataUsingEncoding:NSASCIIStringEncoding]; - break; - case MBLModelMetaTracker: - result = [@"4" dataUsingEncoding:NSASCIIStringEncoding]; - break; - case MBLModelMetaMotionR: - result = [@"5" dataUsingEncoding:NSASCIIStringEncoding]; - break; - case MBLModelMetaMotionC: - result = [@"6" dataUsingEncoding:NSASCIIStringEncoding]; - break; - default: - break; - } - } else if ([uuid isEqual:[MBLConstants batteryLifeUUID]]) { - uint8_t battery = 99; - result = [NSData dataWithBytes:&battery length:sizeof(battery)]; - } - - if (result) { - ((CBMutableCharacteristic *)characteristic).value = result; - [self.delegate peripheral:self didUpdateValueForCharacteristic:characteristic error:nil]; - } -} - -- (void)writeValue:(NSData *)data forCharacteristic:(CBCharacteristic *)characteristic type:(CBCharacteristicWriteType)type -{ - if (type == CBCharacteristicWriteWithResponse) { - dispatch_async(dispatch_get_main_queue(), ^{ - [self.delegate peripheral:self didWriteValueForCharacteristic:characteristic error:nil]; - }); - } - message_payload_t const *msg = data.bytes; - if (msg->mod_id < self.modules.count) { - id module = self.modules[msg->mod_id]; - if ([module respondsToSelector:@selector(processMessage:)]) { - [module processMessage:msg]; - } else { - if (msg->red_id == 0x80) { - // Response to mod info reads with a null response - [self messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:nil]; - } - } - } else if (msg->mod_id == 0xFE) { - if ([self.testDebug respondsToSelector:@selector(processMessage:)]) { - [self.testDebug processMessage:msg]; - } else if (msg->red_id == 0x80) { - // Response to mod info reads with a null response - [self messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:nil]; - } - } -} - -- (void)setNotifyValue:(BOOL)enabled forCharacteristic:(CBCharacteristic *)characteristic -{ - // We will assume its always notifiying -} - -- (void)messageSend:(uint8_t)modId regId:(uint8_t)regId notifyen:(uint8_t)notifyen data:(NSData *)data -{ - if (notifyen) { - dispatch_async(dispatch_get_main_queue(), ^{ - uint8_t header[] = { modId, regId }; - NSMutableData *msg = [NSMutableData dataWithBytes:header length:sizeof(header)]; - [msg appendData:data]; - self.notification.value = msg; - [self.delegate peripheral:self didUpdateValueForCharacteristic:self.notification error:nil]; - }); - } -} - -@end diff --git a/MetaWear/Internal/Mocks/MBLDeviceLookup.h b/MetaWear/Internal/Mocks/MBLDeviceLookup.h deleted file mode 100644 index 11832d2..0000000 --- a/MetaWear/Internal/Mocks/MBLDeviceLookup.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLDeviceLookup.h - * MetaWear - * - * Created by Stephen Schiffli on 3/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -@interface MBLDeviceLookup : NSObject - -+ (NSString *)metawearModelString; -+ (MBLModel)metawearModel; -+ (NSString *)metawearMAC; -+ (BFTask *)deviceForTestWithTimeout:(NSTimeInterval)timeout; -+ (BFTask *)connectDevice:(MBLMetaWear *)device timeout:(NSTimeInterval)timeout forceClear:(BOOL)forceClear; - -@end diff --git a/MetaWear/Internal/Mocks/MBLDeviceLookup.m b/MetaWear/Internal/Mocks/MBLDeviceLookup.m deleted file mode 100644 index 7215632..0000000 --- a/MetaWear/Internal/Mocks/MBLDeviceLookup.m +++ /dev/null @@ -1,165 +0,0 @@ -/** - * MBLDeviceLookup.m - * MetaWear - * - * Created by Stephen Schiffli on 3/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLDeviceLookup.h" -#import "MBLLogger.h" - -@implementation MBLDeviceLookup - -+ (NSString *)metawearModelString -{ - NSDictionary *environment = [[NSProcessInfo processInfo] environment]; - NSString *model = environment[@"METAWEAR_MODEL_UNDER_TEST"]; - assert(model && ![model isEqualToString:@""]); - return model; -} - -+ (MBLModel)metawearModel -{ - NSString *modelString = [MBLDeviceLookup metawearModelString]; - MBLModel model; - if ([modelString isEqualToString:@"R"]) { - model = MBLModelMetaWearR; - } else if ([modelString isEqualToString:@"RG"]) { - model = MBLModelMetaWearRG; - } else if ([modelString isEqualToString:@"RPRO"]) { - model = MBLModelMetaWearRPro; - } else if ([modelString isEqualToString:@"C"]) { - model = MBLModelMetaWearC; - } else if ([modelString isEqualToString:@"CPRO"]) { - model = MBLModelMetaWearCPro; - } else if ([modelString isEqualToString:@"CDET"]) { - model = MBLModelMetaDetector; - } else if ([modelString isEqualToString:@"CENV"]) { - model = MBLModelMetaEnvironment; - } else if ([modelString isEqualToString:@"HEALTH"]) { - model = MBLModelMetaHealth; - } else if ([modelString isEqualToString:@"TRAK"]) { - model = MBLModelMetaTracker; - } else if ([modelString isEqualToString:@"MMR"]) { - model = MBLModelMetaMotionR; - } else if ([modelString isEqualToString:@"MMC"]) { - model = MBLModelMetaMotionC; - } else { - MBLLog(MBLLogLevelWarning, @"Uknown model %@", modelString); - model = MBLModelUnknown; - } - return model; -} - -+ (NSString *)metawearMAC -{ - NSString *MACKey = [[MBLDeviceLookup metawearModelString] stringByAppendingString:@"_MAC"]; - NSDictionary *environment = [[NSProcessInfo processInfo] environment]; - NSString *mac = environment[MACKey]; - assert(mac && ![mac isEqualToString:@""]); - return mac; -} - -+ (BFTask *)deviceForTestWithTimeout:(NSTimeInterval)timeout -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - - NSString *deviceMAC = [MBLDeviceLookup metawearMAC]; - // First check the device cache - [[[[MBLMetaWearManager sharedManager] retrieveSavedMetaWearsAsync] success:^(NSArray *array) { - for (MBLMetaWear *cur in array) { - if ([cur.mac isEqualToString:deviceMAC]) { - [source trySetResult:cur]; - return; - } - } - NSMutableSet *deviceSet = [NSMutableSet set]; - // Then move to scanning - [[MBLMetaWearManager sharedManager] startScanForMetaWearsAllowDuplicates:NO handler:^(NSArray *array) { - for (MBLMetaWear *cur in array) { - if (![deviceSet containsObject:cur]) { - [deviceSet addObject:cur]; - // Check if we have a chached mac, otherwise me must connect to get it - if (cur.mac) { - if ([cur.mac isEqualToString:deviceMAC]) { - [cur rememberDevice]; - [[MBLMetaWearManager sharedManager] stopScan]; - [source trySetResult:cur]; - } - } else { - [[[cur connectWithTimeoutAsync:10.0] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [cur disconnectAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if ([cur.mac isEqualToString:deviceMAC]) { - [cur rememberDevice]; - [[MBLMetaWearManager sharedManager] stopScan]; - [source trySetResult:cur]; - } - return nil; - }]; - } - } - } - }]; - }] failure:^(NSError * _Nonnull error) { - [source trySetError:error]; - }]; - - // We do this on main thread because performSelector afterDelay isn't working on other threads - dispatch_async(dispatch_get_main_queue(), ^{ - [[MBLDeviceLookup class] performSelector:@selector(searchTimeout:) withObject:source afterDelay:timeout]; - }); - return source.task; -} - -+ (void)searchTimeout:(BFTaskCompletionSource *)source -{ - // Set a timeout error - [source trySetError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorConnectionTimeout - userInfo:@{NSLocalizedDescriptionKey : @"Couldn't find to MetaWear, double check UUID's and battery levels."}]]; -} - -+ (BFTask *)connectDevice:(MBLMetaWear *)device timeout:(NSTimeInterval)timeout forceClear:(BOOL)forceClear -{ - return [[[device connectWithTimeoutAsync:timeout] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - // Reboot if device is programmed elsewhere since we can't be sure of its current state - if (device.programedByOtherApp || forceClear) { - NSLog(@"Taking ownership of device"); - return [device setConfigurationAsync:nil]; - } - return nil; - }] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [device connectWithTimeoutAsync:timeout]; - }]; -} - -@end diff --git a/MetaWear/Internal/Mocks/MBLMockPeripheralFactory.h b/MetaWear/Internal/Mocks/MBLMockPeripheralFactory.h deleted file mode 100644 index 445a577..0000000 --- a/MetaWear/Internal/Mocks/MBLMockPeripheralFactory.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLMockPeripheralFactory.h - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBluetoothPeripheralMock.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLMockPeripheralFactory : NSObject - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Mocks/MBLMockPeripheralFactory.m b/MetaWear/Internal/Mocks/MBLMockPeripheralFactory.m deleted file mode 100644 index a4d6177..0000000 --- a/MetaWear/Internal/Mocks/MBLMockPeripheralFactory.m +++ /dev/null @@ -1,39 +0,0 @@ -/** - * MBLMockPeripheralFactory.m - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ -#import "MBLMockPeripheralFactory.h" - -@implementation MBLMockPeripheralFactory - -@end diff --git a/MetaWear/Internal/Mocks/MBLMockUtils.h b/MetaWear/Internal/Mocks/MBLMockUtils.h deleted file mode 100644 index ec7165e..0000000 --- a/MetaWear/Internal/Mocks/MBLMockUtils.h +++ /dev/null @@ -1,41 +0,0 @@ -/** - * MBLMockUtils.h - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -@interface MBLMockUtils : NSObject -+ (NSMutableData *)dataFromString:(NSString *)data; -+ (NSMutableString *)stringFromData:(NSData *)data; -@end diff --git a/MetaWear/Internal/Mocks/MBLMockUtils.m b/MetaWear/Internal/Mocks/MBLMockUtils.m deleted file mode 100644 index 9c2c96a..0000000 --- a/MetaWear/Internal/Mocks/MBLMockUtils.m +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLMockUtils.m - * MetaWear - * - * Created by Stephen Schiffli on 9/23/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ -#import "MBLMockUtils.h" - -@implementation MBLMockUtils - -+ (NSMutableData *)dataFromString:(NSString *)data -{ - NSArray *bytes = [data componentsSeparatedByString:@"-"]; - NSMutableData *mutableData = [NSMutableData data]; - for (NSString *byte in bytes) { - unsigned tmp; - [[NSScanner scannerWithString:byte] scanHexInt:&tmp]; - [mutableData appendBytes:&tmp length:1]; - } - return mutableData; -} - -+ (NSMutableString *)stringFromData:(NSData *)data -{ - NSMutableString *string = [NSMutableString string]; - uint8_t const *byte = data.bytes; - for (int i = 0; i < data.length; i++, byte++) { - if (string.length) { - [string appendString:@"-"]; - } - [string appendFormat:@"%02X", *byte]; - } - return string; -} - -@end diff --git a/MetaWear/Internal/Mocks/MBLModuleMock.h b/MetaWear/Internal/Mocks/MBLModuleMock.h deleted file mode 100644 index 3d4ddaa..0000000 --- a/MetaWear/Internal/Mocks/MBLModuleMock.h +++ /dev/null @@ -1,62 +0,0 @@ -/** - * MBLModuleMock.h - * MetaWear - * - * Created by Stephen Schiffli on 9/26/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -@class MBLBluetoothPeripheralMock; - -typedef struct __attribute__((packed)) { - uint8_t mod_id; - uint8_t red_id; - uint8_t data[18]; -} message_payload_t; - - -@interface MBLModuleMock : NSObject -+ (instancetype)mechanicalSwitch:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)led:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)accelerometer:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)temperature:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)gpio:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)hapticBuzzer:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)logging:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)timer:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)serial:(MBLBluetoothPeripheralMock *)peripheral; -+ (instancetype)barometer:(MBLBluetoothPeripheralMock *)peripheral; - -+ (instancetype)testDebug:(MBLBluetoothPeripheralMock *)peripheral; - -- (void)processMessage:(message_payload_t const *)msg; - -@end diff --git a/MetaWear/Internal/Mocks/MBLModuleMock.m b/MetaWear/Internal/Mocks/MBLModuleMock.m deleted file mode 100644 index 1cc6c0c..0000000 --- a/MetaWear/Internal/Mocks/MBLModuleMock.m +++ /dev/null @@ -1,518 +0,0 @@ -/** - * MBLModuleMock.m - * MetaWear - * - * Created by Stephen Schiffli on 9/26/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLModuleMock.h" -#import "MBLMockUtils.h" -#import "MBLBluetoothPeripheralMock.h" -#import "MBLBluetoothCentralMock.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLLogging.h" -#import "MBLLED+Private.h" -#import "MBLTimer+Private.h" - - -static const uint8_t MECHANICAL_SWITCH_ID = 0x1; -static const uint8_t LED_ID = 0x2; -static const uint8_t ACCELEROMETER_ID = 0x3; -static const uint8_t TEMPERATURE_ID = 0x4; -static const uint8_t GPIO_ID = 0x5; -//static const uint8_t NEOPIXEL_ID = 0x6; -//static const uint8_t IBEACON_ID = 0x7; -static const uint8_t HAPTIC_BUZZER_ID = 0x8; -//static const uint8_t DATA_PROCESSOR_ID = 0x9; -//static const uint8_t COMMAND_ID = 0xA; -static const uint8_t LOGGING_ID = 0xB; -static const uint8_t TIMER_ID = 0xC; -static const uint8_t SERIAL_ID = 0xD; -//static const uint8_t ANCS_ID = 0xE; -//static const uint8_t MACRO_ID = 0xF; -//static const uint8_t CONDUCTANCE_ID = 0x10; -//static const uint8_t SETTINGS_ID = 0x11; -static const uint8_t BAROMETER_ID = 0x12; -//static const uint8_t GYRO_ID = 0x13; -//static const uint8_t AMBIENT_LIGHT_ID = 0x14; -//static const uint8_t MAGNETOMETER_ID = 0x15; -//static const uint8_t HYGROMETER_ID = 0x16; -//static const uint8_t PHOTOMETER_ID = 0x17; -//static const uint8_t PROXIMITY_ID = 0x18; -//static const uint8_t SENSOR_FUSTION_ID = 0x19; - -static const uint8_t TEST_DEBUG_ID = 0xFE; - - -typedef void (^MBLMessageHandler)(message_payload_t const *msg); -typedef void (^MBLNotificationMessageHandler)(message_payload_t const *msg, BOOL isStarting); - - -@interface MBLGPIOMock : MBLModuleMock -@property (nonatomic) NSArray *pins; -- (instancetype)initWithPeripheral:(MBLBluetoothPeripheralMock *)peripheral; -@end - - -@interface MBLModuleMock () -@property (nonatomic) MBLBluetoothPeripheralMock *peripheral; -@property (nonatomic) uint8_t modId; -@property (nonatomic) NSMutableDictionary *handlers; - -- (void)handleRead:(uint8_t)regId handler:(MBLMessageHandler)handler; -- (void)handleWrite:(uint8_t)regId handler:(MBLMessageHandler)handler; -- (void)handleNotification:(uint8_t)regId handler:(MBLNotificationMessageHandler)handler; - -@end - -@implementation MBLModuleMock - -- (instancetype)initWithPeripheral:(MBLBluetoothPeripheralMock *)peripheral - modId:(uint8_t)modId - modImpl:(uint8_t)modImpl - modRev:(uint8_t)modRev - extra:(NSData *)extra -{ - self = [super init]; - if (self) { - self.peripheral = peripheral; - self.modId = modId; - self.handlers = [NSMutableDictionary dictionary]; - - // Default mod info reg handling - uint8_t header[] = { modImpl, modRev }; - NSMutableData *data = [NSMutableData dataWithBytes:header length:sizeof(header)]; - if (extra) { - [data appendData:extra]; - } - [self handleRead:0 handler:^(message_payload_t const *msg) { - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:data]; - }]; - } - return self; -} - -- (void)processMessage:(message_payload_t const *)msg -{ - MBLMessageHandler handler = self.handlers[[NSNumber numberWithUnsignedChar:msg->red_id]]; - if (handler) { - handler(msg); - } -} - -- (void)handleRead:(uint8_t)regId handler:(MBLMessageHandler)handler -{ - self.handlers[[NSNumber numberWithUnsignedChar:regId | 0x80]] = handler; -} - -- (void)handleWrite:(uint8_t)regId handler:(MBLMessageHandler)handler -{ - self.handlers[[NSNumber numberWithUnsignedChar:regId]] = handler; -} - -- (void)handleNotification:(uint8_t)regId handler:(MBLNotificationMessageHandler)handler -{ - [self handleWrite:regId handler:^(message_payload_t const *msg) { - if (msg->data[0]) { - handler(msg, YES); - } else { - handler(msg, NO); - } - }]; -} - -//[self addHardcodedResponse:@"03-80-01-00" toRequest:@"03-80"]; -//[self addHardcodedResponse:@"05-80-00-02-03-03-03-03-01-01-01-01" toRequest:@"05-80"]; -//[self addHardcodedResponse:@"06-80-00-00" toRequest:@"06-80"]; -//[self addHardcodedResponse:@"07-80-00-00" toRequest:@"07-80"]; -//[self addHardcodedResponse:@"08-80-00-00" toRequest:@"08-80"]; -//[self addHardcodedResponse:@"09-80-00-00-1C" toRequest:@"09-80"]; -//[self addHardcodedResponse:@"0B-80-00-00-08-80-2F" toRequest:@"0B-80"]; -//[self addHardcodedResponse:@"0A-80-00-00-1C" toRequest:@"0A-80"]; -//[self addHardcodedResponse:@"0C-80-00-00-08" toRequest:@"0C-80"]; -//[self addHardcodedResponse:@"0D-80-00-00" toRequest:@"0D-80"]; -//[self addHardcodedResponse:@"0E-80-00-00-04" toRequest:@"0E-80"]; -//[self addHardcodedResponse:@"0F-80-00-00" toRequest:@"0F-80"]; -//[self addHardcodedResponse:@"10-80" toRequest:@"10-80"]; -//[self addHardcodedResponse:@"11-80-00-00" toRequest:@"11-80"]; -//[self addHardcodedResponse:@"12-80-00-00" toRequest:@"12-80"]; -//[self addHardcodedResponse:@"13-80-00-00" toRequest:@"13-80"]; -//[self addHardcodedResponse:@"14-80-00-00" toRequest:@"14-80"]; -//[self addHardcodedResponse:@"15-80-00-00" toRequest:@"15-80"]; -//[self addHardcodedResponse:@"16-80-00-00" toRequest:@"16-80"]; -//[self addHardcodedResponse:@"17-80-00-00" toRequest:@"17-80"]; -//[self addHardcodedResponse:@"18-80-00-00" toRequest:@"18-80"]; -//[self addHardcodedResponse:@"FE-80-00-00" toRequest:@"FE-80"]; - -+ (instancetype)mechanicalSwitch:(MBLBluetoothPeripheralMock *)peripheral -{ - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral modId:MECHANICAL_SWITCH_ID modImpl:0 modRev:0 extra:nil]; - - uint8_t __block switchState = 0; - [module handleRead:1 handler:^(message_payload_t const *msg) { - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&switchState length:sizeof(switchState)]]; - switchState = switchState ? 0 : 1; - }]; - - dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()); - dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 0.1 * NSEC_PER_SEC, 0.01 * NSEC_PER_SEC); - dispatch_source_set_event_handler(timer, ^{ - [peripheral messageSend:MECHANICAL_SWITCH_ID regId:1 notifyen:1 data:[NSData dataWithBytes:&switchState length:sizeof(switchState)]]; - switchState = switchState ? 0 : 1; - }); - [module handleNotification:1 handler:^(message_payload_t const *msg, BOOL isStarting) { - if (isStarting) { - dispatch_resume(timer); - } else { - dispatch_suspend(timer); - } - }]; - - return module; -} - -+ (instancetype)led:(MBLBluetoothPeripheralMock *)peripheral -{ - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral modId:LED_ID modImpl:0 modRev:0 extra:nil]; - - NSNumber __block *timeToTurnOff = nil; - [module handleWrite:1 handler:^(message_payload_t const *msg) { - NSLog(@"LED ON"); - if (timeToTurnOff) { - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(timeToTurnOff.doubleValue * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - NSLog(@"LED OFF"); - }); - } - }]; - [module handleWrite:2 handler:^(message_payload_t const *msg) { - NSLog(@"LED OFF"); - }]; - [module handleWrite:3 handler:^(message_payload_t const *msg) { - mw_led_flash_params_t *params = (mw_led_flash_params_t *)msg->data; - if (params->repeat_count != 0xFF) { - timeToTurnOff = [NSNumber numberWithDouble:(double)(params->repeat_count * params->time_period) / 1000.0]; - } - }]; - - return module; -} - -+ (instancetype)accelerometer:(MBLBluetoothPeripheralMock *)peripheral -{ - // BMI160 - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral modId:ACCELEROMETER_ID modImpl:1 modRev:2 extra:nil]; - - int __block count = 0; - dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue()); - dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, (1.0 / 50.0) * NSEC_PER_SEC, 0.01 * NSEC_PER_SEC); // 50Hz - dispatch_source_set_event_handler(timer, ^{ - int16_t value[3] = { 0, 0, (sin(M_PI * (count++ / 8.0)) * 4096) + 4543 }; // 3.125Hz wave (50 / 16) - [peripheral messageSend:ACCELEROMETER_ID regId:4 notifyen:1 data:[NSData dataWithBytes:&value length:6]]; - }); - [module handleNotification:4 handler:^(message_payload_t const *msg, BOOL isStarting) { - if (isStarting) { - dispatch_resume(timer); - } else { - dispatch_suspend(timer); - } - }]; - - return module; -} - -+ (instancetype)temperature:(MBLBluetoothPeripheralMock *)peripheral -{ - uint8_t extra[] = { 0x00, 0x03, 0x01, 0x02 }; - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral - modId:TEMPERATURE_ID - modImpl:1 - modRev:0 - extra:[NSData dataWithBytes:&extra length:sizeof(extra)]]; - - [module handleRead:1 handler:^(const message_payload_t *msg) { - const int16_t temp = 208; - uint8_t data[] = { msg->data[0], temp & 0xFF, temp >> 8 }; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&data length:sizeof(data)]]; - }]; - return module; -} - -+ (instancetype)serial:(MBLBluetoothPeripheralMock *)peripheral -{ - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral modId:SERIAL_ID modImpl:0 modRev:1 extra:nil]; - - NSMutableDictionary *i2cData = [NSMutableDictionary dictionary]; - [module handleWrite:1 handler:^(message_payload_t const *msg) { - NSNumber *key = [NSNumber numberWithInt:*((uint16_t *)&msg->data[0])]; - NSData *value = [NSData dataWithBytes:&msg->data[4] length:msg->data[3]]; - i2cData[key] = value; - }]; - [module handleRead:1 handler:^(message_payload_t const *msg) { - NSData *result = i2cData[[NSNumber numberWithInt:*((uint16_t *)&msg->data[0])]]; - if (!result) { - uint8_t data[17] = { 0 }; - result = [NSData dataWithBytes:&data length:msg->data[3]]; - } - NSMutableData *data = [NSMutableData dataWithBytes:&msg->data[2] length:1]; - [data appendData:result]; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:data]; - }]; - - return module; -} - -+ (instancetype)gpio:(MBLBluetoothPeripheralMock *)peripheral -{ - return [[MBLGPIOMock alloc] initWithPeripheral:peripheral]; -} - -+ (instancetype)hapticBuzzer:(MBLBluetoothPeripheralMock *)peripheral -{ - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral modId:HAPTIC_BUZZER_ID modImpl:0 modRev:0 extra:nil]; - [module handleWrite:1 handler:^(message_payload_t const *msg) { - BOOL isBuzzer = msg->data[3] == 1; - uint16_t pwidth = *((uint16_t *)&msg->data[1]); - uint8_t dcycle = msg->data[0]; - if (isBuzzer) { - if (peripheral.buzzerHandler) { - peripheral.buzzerHandler(dcycle, pwidth); - } - } else { - if (peripheral.hapticHandler) { - peripheral.hapticHandler(dcycle, pwidth); - } - } - }]; - return module; -} - -+ (instancetype)logging:(MBLBluetoothPeripheralMock *)peripheral -{ - mw_log_module_info extra = { 0 }; - extra.logTriggers = 8; - extra.logCap = 10000; - NSMutableArray *entries = [NSMutableArray array]; - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral - modId:LOGGING_ID - modImpl:0 - modRev:2 - extra:[NSData dataWithBytes:&extra length:sizeof(extra)]]; - - [module handleWrite:2 handler:^(const message_payload_t *msg) { - mw_log_trigger_t *entry = (mw_log_trigger_t *)msg->data; - [entries addObject:[NSData dataWithBytes:entry length:sizeof(mw_log_trigger_t)]]; - uint8_t logId = entries.count - 1; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&logId length:1]]; - }]; - [module handleRead:2 handler:^(message_payload_t const *msg) { - NSData *data = entries[msg->data[0]]; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:data]; - }]; - [module handleRead:4 handler:^(message_payload_t const *msg) { - uint64_t resp = 0; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&resp length:5]]; - }]; - [module handleRead:5 handler:^(message_payload_t const *msg) { - uint32_t resp = 10000; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&resp length:sizeof(resp)]]; - }]; - [module handleWrite:6 handler:^(const message_payload_t *msg) { - uint32_t numToReadout = *(uint32_t *)msg->data; - mw_log_entry_t entry; - entry.triggerId = 0; - entry.resetId = 0; - entry.timestamp = 0; - entry.data[0] = 1; - entry.data[1] = 0; - entry.data[2] = 0; - entry.data[3] = 0; - for (int i = 0; i < numToReadout; i++) { - entry.timestamp += 1; - [peripheral messageSend:msg->mod_id regId:0x7 notifyen:1 data:[NSData dataWithBytes:&entry length:sizeof(mw_log_entry_t)]]; - } - uint32_t zero = 0; - [peripheral messageSend:msg->mod_id regId:0x8 notifyen:1 data:[NSData dataWithBytes:&zero length:sizeof(zero)]]; - }]; - return module; -} - -+ (instancetype)timer:(MBLBluetoothPeripheralMock *)peripheral -{ - uint8_t extra[] = { 0x08 }; - NSMutableArray *timers = [NSMutableArray array]; - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral - modId:TIMER_ID - modImpl:0 - modRev:0 - extra:[NSData dataWithBytes:&extra length:sizeof(extra)]]; - - [module handleWrite:2 handler:^(const message_payload_t *msg) { - mw_timer_param_t *timer = (mw_timer_param_t *)msg->data; - [timers addObject:[NSValue valueWithBytes:timer objCType:@encode(mw_timer_param_t)]]; - }]; - [module handleRead:2 handler:^(message_payload_t const *msg) { - mw_timer_param_t timer; - NSValue *value = timers[msg->data[0]]; - [value getValue:&timer]; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&timer length:sizeof(mw_timer_param_t)]]; - }]; - return module; -} - -+ (instancetype)barometer:(MBLBluetoothPeripheralMock *)peripheral -{ - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral modId:BAROMETER_ID modImpl:0 modRev:0 extra:nil]; - - BOOL __block pressureState = 0; - [module handleRead:1 handler:^(message_payload_t const *msg) { - uint32_t resp = pressureState ? 0xFFFC1800 : 0x0003E800; - pressureState = pressureState ? 0 : 1; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&resp length:sizeof(resp)]]; - }]; - - BOOL __block altitudeState = 0; - [module handleRead:2 handler:^(message_payload_t const *msg) { - uint32_t resp = altitudeState ? 0xFFFC1800 : 0x0003E800; - altitudeState = altitudeState ? 0 : 1; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&resp length:sizeof(resp)]]; - }]; - - return module; -} - -+ (instancetype)testDebug:(MBLBluetoothPeripheralMock *)peripheral -{ - MBLModuleMock *module = [[MBLModuleMock alloc] initWithPeripheral:peripheral modId:TEST_DEBUG_ID modImpl:0 modRev:1 extra:nil]; - [module handleRead:4 handler:^(message_payload_t const *msg) { - uint32_t keyValue = peripheral.keyRegister; - [peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&keyValue length:sizeof(keyValue)]]; - }]; - - [module handleWrite:6 handler:^(message_payload_t const *msg) { - [((MBLBluetoothCentralMock *)[MBLMetaWearManager sharedManager].centralManager) cancelPeripheralConnection:peripheral]; - }]; - [module handleWrite:2 handler:^(message_payload_t const *msg) { - peripheral.isMetaBoot = YES; - [((MBLBluetoothCentralMock *)[MBLMetaWearManager sharedManager].centralManager) cancelPeripheralConnection:peripheral]; - }]; - return module; -} - - -@end - - -@interface MBLPinMock : NSObject -@property (nonatomic) uint16_t analogRef; -@property (nonatomic) uint16_t analogAbs; -@property (nonatomic) uint8_t digital; - -- (void)setHigh; -- (void)setLow; -@end - -@implementation MBLPinMock -- (instancetype)init -{ - self = [super init]; - [self setDouble]; - return self; -} -- (void)setHigh -{ - self.digital = 1; - self.analogAbs = 3000; - self.analogRef = 1020; -} -- (void)setLow -{ - self.digital = 0; - self.analogAbs = 10; - self.analogRef = 2; -} -- (void)setDouble -{ - self.digital = 0; - self.analogAbs = 600; - self.analogRef = 181; -} -@end - - -@implementation MBLGPIOMock -- (instancetype)initWithPeripheral:(MBLBluetoothPeripheralMock *)peripheral -{ - uint8_t extra[] = { 03, 03, 03, 03, 01, 01, 01, 01 }; - self = [super initWithPeripheral:peripheral - modId:GPIO_ID - modImpl:0 - modRev:2 - extra:[NSData dataWithBytes:&extra length:sizeof(extra)]]; - if (self) { - self.pins = @[[[MBLPinMock alloc] init],[[MBLPinMock alloc] init],[[MBLPinMock alloc] init],[[MBLPinMock alloc] init], - [[MBLPinMock alloc] init],[[MBLPinMock alloc] init],[[MBLPinMock alloc] init],[[MBLPinMock alloc] init]]; - } - return self; -} -- (void)processMessage:(message_payload_t const *)msg -{ - uint8_t pinIdx = msg->data[0]; - uint8_t indexSpoof = msg->data[4]; - MBLPinMock *pin = self.pins[pinIdx]; - - if (indexSpoof != 0xFF) { - pinIdx = indexSpoof; - } - - if (msg->red_id == 0x1) { - [pin setHigh]; - } else if (msg->red_id == 0x2) { - [pin setLow]; - } else if (msg->red_id == 0x3) { - [pin setHigh]; - } else if (msg->red_id == 0x4) { - [pin setLow]; - } else if (msg->red_id == 0x5) { - [pin setDouble]; - } else if (msg->red_id == 0x86) { - uint8_t data[] = { pinIdx, pin.analogAbs & 0xFF, pin.analogAbs >> 8 }; - [self.peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&data length:sizeof(data)]]; - } else if (msg->red_id == 0x87) { - uint8_t data[] = { pinIdx, pin.analogRef & 0xFF, pin.analogRef >> 8 }; - [self.peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&data length:sizeof(data)]]; - } else if (msg->red_id == 0x88) { - uint8_t data[] = { pinIdx, pin.digital }; - [self.peripheral messageSend:msg->mod_id regId:msg->red_id notifyen:1 data:[NSData dataWithBytes:&data length:sizeof(data)]]; - } else if (msg->red_id == 0x80) { - [super processMessage:msg]; - } -} -@end diff --git a/MetaWear/Internal/Modules/ANCS/MBLANCSEventData+Private.h b/MetaWear/Internal/Modules/ANCS/MBLANCSEventData+Private.h deleted file mode 100644 index 7bd225a..0000000 --- a/MetaWear/Internal/Modules/ANCS/MBLANCSEventData+Private.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLANCSEventData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 11/20/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLANCSEventData.h" -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLANCSEventData (Private) -+ (MBLFormat *)formatter; - -- (instancetype)initWithData:(NSData *)data timestamp:(NSDate *)timestamp; -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255+Private.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255+Private.h deleted file mode 100644 index 13c5eb4..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255+Private.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLAccelerometerBMA255+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 2/29/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMA255.h" - -@interface MBLAccelerometerBMA255 (Private) - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent+Private.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent+Private.h deleted file mode 100644 index ecd16d4..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMA255/MBLAccelerometerBMA255MotionEvent+Private.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * MBLAccelerometerBMA255MotionEvent+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 3/1/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMA255MotionEvent.h" -@class MBLAccelerometerBMA255; - -@interface MBLAccelerometerBMA255MotionEvent (Private) - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBMA255 *)accelerometer; - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160+Private.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160+Private.h deleted file mode 100644 index 8053024..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160+Private.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLAccelerometerBMI160+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMI160.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBMI160 (Private) -@property (nonatomic) MBLRegister *accelPowerMode; -@property (nonatomic) MBLRegister *accelDataConfig; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent+Private.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent+Private.h deleted file mode 100644 index 2f47c31..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160MotionEvent+Private.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerBMI160MotionEvent+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/28/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMI160MotionEvent.h" -@class MBLAccelerometerBMI160; - -@interface MBLAccelerometerBMI160MotionEvent (Private) -@property (nonatomic) MBLRegister *motionInterruptEn; -@property (nonatomic) MBLRegister *motionConfig; - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBMI160 *)accelerometer; - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160StepEvent.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160StepEvent.h deleted file mode 100644 index 13bea11..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160StepEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLAccelerometerBMI160StepEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 7/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerBMI160; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBMI160StepEvent : MBLEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBMI160 *)accelerometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160StepEvent.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160StepEvent.m deleted file mode 100644 index 1bfabcb..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/AccelerometerBMI160/MBLAccelerometerBMI160StepEvent.m +++ /dev/null @@ -1,87 +0,0 @@ -/** - * MBLAccelerometerBMI160StepEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 7/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBMI160StepEvent.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLNumericFormatter.h" - -@interface MBLAccelerometerBMI160StepEvent () -@property (nonatomic) MBLRegister *stepCounterInterruptEn; -@property (nonatomic) MBLRegister *stepCounterConfig; -@end - -@implementation MBLAccelerometerBMI160StepEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBMI160 *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x19 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO] identifier:@"step-detector"]; - if (self) { - self.stepCounterInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x17 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.stepCounterConfig = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x18 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - bmi160_reg_step_conf_t regs = { 0 }; - - // No real descriptions given, just the defaut values for "Normal Mode" - regs.step_conf_0.alpha = 0; - regs.step_conf_0.min_threshold = 2; - regs.step_conf_0.steptime_min = 5; - regs.step_conf_1.min_step_buf = 3; - regs.step_conf_1.step_cnt_en = 1; - - [tasks addObject:[self.stepCounterConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_reg_step_conf_t)]]]; - - // Write the enable bit for tap detection interrupts - uint8_t data[] = { (1 << 0) , 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - [tasks addObject:[self.stepCounterInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]]; - - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bit for tap detection interrupts - uint8_t data[] = { 0, (1 << 0) }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.stepCounterInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch+Private.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch+Private.h deleted file mode 100644 index 3704893..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBosch+Private.h +++ /dev/null @@ -1,42 +0,0 @@ -/** - * MBLAccelerometerBosch+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 2/29/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBosch.h" - -@interface MBLAccelerometerBosch (Private) - -@property (nonatomic) MBLRegister *accelDataConfig; - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschAxisReadyEvent.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschAxisReadyEvent.h deleted file mode 100644 index 98bfa42..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschAxisReadyEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerBoschAxisReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerBosch; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschAxisReadyEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer axis:(uint8_t)axis; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschAxisReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschAxisReadyEvent.m deleted file mode 100644 index fac0eb9..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschAxisReadyEvent.m +++ /dev/null @@ -1,95 +0,0 @@ -/** - * MBLAccelerometerBoschAxisReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschAxisReadyEvent.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLAccelerometerBoschFormat.h" -#import "MBLLogger.h" - -@implementation MBLAccelerometerBoschAxisReadyEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer axis:(uint8_t)axis -{ - NSString *identifier = nil; - MBLAccelerometerAxis typedAxis = axis; - switch (typedAxis) { - case MBLAccelerometerAxisX: - identifier = @"acceleration[0]"; - break; - case MBLAccelerometerAxisY: - identifier = @"acceleration[1]"; - break; - case MBLAccelerometerAxisZ: - identifier = @"acceleration[2]"; - break; - } - self = [super initWithModule:accelerometer registerId:0x4 format:[[MBLAccelerometerBoschFormat alloc] initWithAccelerometer:accelerometer axis:axis] identifier:identifier]; - return self; -} - -- (BFTask *)performAsyncInitialization -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent initializeAsync]; -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent deinitializeAsync]; -} - -- (BFTask *)performAsyncActivation -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent deactivateAsync]; -} - -- (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler -{ - MBLAccelerometerBosch *accelerometer = (MBLAccelerometerBosch *)self.module; - if (accelerometer.sampleFrequency > 200) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] due to Bluetooth LE bandwidth limitations, notications faster than 200Hz will result in packet loss"); - } - return [super startNotificationsWithHandlerAsync:handler]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.h deleted file mode 100644 index d0d0207..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLAccelerometerBoschDataReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerBosch; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschDataReadyEvent : MBLEvent -@property (nonatomic) MBLRegister *accelDataInterruptEn; - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.m deleted file mode 100644 index bde6e3d..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschDataReadyEvent.m +++ /dev/null @@ -1,78 +0,0 @@ -/** - * MBLAccelerometerBoschDataReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschDataReadyEvent.h" -#import "MBLAccelerometerBoschPackedDataReadyEvent.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLAccelerometerBoschFormat.h" -#import "MBLNumericFormatter.h" -#import "MBLLogger.h" - - -@implementation MBLAccelerometerBoschDataReadyEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x4 format:[[MBLAccelerometerBoschFormat alloc] initWithAccelerometer:accelerometer packed:NO] identifier:@"acceleration"]; - if (self) { - self.accelDataInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - // Enable interrupts - uint8_t data[] = { 0x1, 0x0 }; - return [self.accelDataInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:2]]; -} - -- (BFTask *)performAsyncDeinitialization -{ - // Disable interrupts - uint8_t data[] = { 0x0, 0x1 }; - return [self.accelDataInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:2]]; -} - -- (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler -{ - MBLAccelerometerBosch *accelerometer = (MBLAccelerometerBosch *)self.module; - if (accelerometer.packedDataReadyEvent && accelerometer.sampleFrequency >= 100 ) { - MBLLog(MBLLogLevelWarning, @"For high frequency streaming, use packedDataReadyEvent"); - } - return [super startNotificationsWithHandlerAsync:handler]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent+Private.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent+Private.h deleted file mode 100644 index 4568217..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatEvent+Private.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLAccelerometerBoschFlatEvent+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 7/20/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschFlatEvent.h" -@class MBLAccelerometerBosch; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschFlatEvent (Private) - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatFormat.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatFormat.h deleted file mode 100644 index 4857e7f..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatFormat.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLAccelerometerBoschFlatFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 8/11/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" -#import "MBLAccelerometerBosch+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschFlatFormat : MBLFormat -@property (nonatomic, weak) MBLAccelerometerBosch *accelerometer; - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatFormat.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatFormat.m deleted file mode 100644 index 49e7c6d..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFlatFormat.m +++ /dev/null @@ -1,77 +0,0 @@ -/** - * MBLAccelerometerBoschFlatFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 8/11/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschFlatFormat.h" -#import "MBLAccelerometerBoschFlatData+Private.h" -#import "MBLModule+Private.h" -#import "MBLModuleInfo.h" - -@implementation MBLAccelerometerBoschFlatFormat - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer -{ - self = [super initEncodedDataWithLength:1]; - if (self) { - self.accelerometer = accelerometer; - } - return self; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - const uint8_t raw = *(uint8_t *)data.bytes; - BOOL faceDown = NO; - BOOL isFlat = NO; - if (self.accelerometer.moduleInfo.moduleRevision >= 2) { - faceDown = raw & (1 << 1); - isFlat = raw & (1 << 2); - return [[MBLAccelerometerBoschFlatData alloc] initWithIsFlat:isFlat faceDown:faceDown timestamp:date data:data]; - } else { - isFlat = raw & (1 << 1); - return [[MBLAccelerometerBoschFlatData alloc] initWithIsFlat:isFlat timestamp:date data:data]; - } -} - -- (NSNumber *)numberFromDouble:(double)value -{ - // TODO How to also check for up vs down - if (value) { - return [NSNumber numberWithInt:3]; - } else { - return [NSNumber numberWithInt:1]; - } -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFormat.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFormat.h deleted file mode 100644 index dab9c9e..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFormat.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * MBLAccelerometerBoschFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" -#import "MBLAccelerometerBosch+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschFormat : MBLFormat -@property (nonatomic, weak) MBLAccelerometerBosch *accelerometer; -@property (nonatomic) BOOL packed; - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer packed:(BOOL)packed; -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer axis:(uint8_t)axis; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFormat.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFormat.m deleted file mode 100644 index 3b86fba..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschFormat.m +++ /dev/null @@ -1,144 +0,0 @@ -/** - * MBLAccelerometerBoschFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschFormat.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLNumericData+Private.h" - -@implementation MBLAccelerometerBoschFormat - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer packed:(BOOL)packed -{ - self = [super initArrayWithElements:packed ? 9 : 3 elementSize:2 isSigned:YES]; - if (self) { - self.accelerometer = accelerometer; - self.packed = packed; - } - return self; -} - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer axis:(uint8_t)axis -{ - NSAssert(__builtin_popcount(axis) == 1, @"Only one axis at a time please"); - MBLAccelerometerAxis typedAxis = axis; - switch (typedAxis) { - case MBLAccelerometerAxisX: - self = [super initNumberWithLength:2 isSigned:YES offset:0]; - break; - case MBLAccelerometerAxisY: - self = [super initNumberWithLength:2 isSigned:YES offset:2]; - break; - case MBLAccelerometerAxisZ: - self = [super initNumberWithLength:2 isSigned:YES offset:4]; - break; - } - if (self) { - self.accelerometer = accelerometer; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLAccelerometerBoschFormat *newFormat = [super copyWithZone:zone]; - newFormat.accelerometer = self.accelerometer; - newFormat.packed = self.packed; - return newFormat; -} - -- (id)singleEntryFromData:(NSData *)data date:(NSDate *)date -{ - double x = DBL_MIN, y = DBL_MIN, z = DBL_MIN; - const uint8_t *bytes = data.bytes; - double scale; - switch (self.accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange16G: - scale = 16.0 / 32768.0; - break; - case MBLAccelerometerBoschRange8G: - scale = 8.0 / 32768.0; - break; - case MBLAccelerometerBoschRange4G: - scale = 4.0 / 32768.0; - break; - case MBLAccelerometerBoschRange2G: - scale = 2.0 / 32768.0; - break; - } - x = (double)(*(int16_t *)&bytes[0]) * scale; - if (self.type == MBLFormatTypeArray) { - y = (double)(*(int16_t *)&bytes[2]) * scale; - z = (double)(*(int16_t *)&bytes[4]) * scale; - } - - if (self.type == MBLFormatTypeArray) { - return [[MBLAccelerometerData alloc] initWithX:x y:y z:z timestamp:date data:data]; - } else { - return [[MBLNumericData alloc] initWithNumber:[NSNumber numberWithDouble:x] timestamp:date data:data]; - } -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - if (self.packed) { - return @[[self singleEntryFromData:[data subdataWithRange:NSMakeRange(0, 6)] date:date], - [self singleEntryFromData:[data subdataWithRange:NSMakeRange(6, 6)] date:date], - [self singleEntryFromData:[data subdataWithRange:NSMakeRange(12, 6)] date:date]]; - } else { - return [self singleEntryFromData:data date:date]; - } -} - -- (NSNumber *)numberFromDouble:(double)value -{ - double scale; - switch (self.accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange16G: - scale = 16.0 / 32768.0; - break; - case MBLAccelerometerBoschRange8G: - scale = 8.0 / 32768.0; - break; - case MBLAccelerometerBoschRange4G: - scale = 4.0 / 32768.0; - break; - case MBLAccelerometerBoschRange2G: - scale = 2.0 / 32768.0; - break; - } - return [NSNumber numberWithInt:value / scale]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent+Private.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent+Private.h deleted file mode 100644 index c9a74f4..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschLowOrHighGEvent+Private.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLAccelerometerBoschLowOrHighGEvent+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschLowOrHighGEvent.h" -@class MBLAccelerometerBosch; - -@interface MBLAccelerometerBoschLowOrHighGEvent (Private) -@property (nonatomic) double lowOrHighGDurationMultiplier; - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationEvent.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationEvent.h deleted file mode 100644 index 662c8ef..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLAccelerometerBoschOrientationEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 6/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerBosch; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschOrientationEvent : MBLEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationEvent.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationEvent.m deleted file mode 100644 index 3c906d5..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationEvent.m +++ /dev/null @@ -1,86 +0,0 @@ -/** - * MBLAccelerometerBoschOrientationEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 6/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschOrientationEvent.h" -#import "MBLAccelerometerBoschOrientationFormat.h" -#import "MBLAccelerometerBosch+Private.h" - -@interface MBLAccelerometerBoschOrientationEvent () -@property (nonatomic) MBLRegister *orientInterruptEn; -@property (nonatomic) MBLRegister *orientConfig; -@end - -@implementation MBLAccelerometerBoschOrientationEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x11 format:[[MBLAccelerometerBoschOrientationFormat alloc] init] identifier:@"orientation"]; - if (self) { - self.orientInterruptEn = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0F format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.orientConfig = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x10 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - /* - TODO: The defaults seem fine, maybe want to explore these in the future - bmi160_reg_int_orient_t regs = { 0 }; - regs.int_orient_0.int_orient_blocking; - regs.int_orient_0.int_orient_hy; - regs.int_orient_0.int_orient_mode; - - regs.int_orient_1.int_orient_axes_ex; - regs.int_orient_1.int_orient_theta; - regs.int_orient_1.int_orient_ud_en; - - [self.orientConfig writeDataAsync:[NSData dataWithBytes:®s length:sizeof(bmi160_reg_int_orient_t)]]; - */ - // Write the enable bit for orientation interrupts - uint8_t data[] = { (1 << 0), 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.orientInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bit for orientation interrupts - uint8_t data[] = { 0, (1 << 0) }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.orientInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationFormat.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationFormat.h deleted file mode 100644 index 17a686e..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationFormat.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLAccelerometerBoschOrientationFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 6/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschOrientationFormat : MBLFormat - -- (instancetype)init; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationFormat.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationFormat.m deleted file mode 100644 index 4e0ad58..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschOrientationFormat.m +++ /dev/null @@ -1,88 +0,0 @@ -/** - * MBLAccelerometerBoschOrientationFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 6/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschOrientationFormat.h" -#import "MBLOrientationData+Private.h" - -@implementation MBLAccelerometerBoschOrientationFormat - -- (instancetype)init -{ - self = [super initEncodedDataWithLength:1]; - return self; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - MBLAccelerometerOrientation result; - uint8_t updsideDown = ((*(uint8_t *)data.bytes) >> 3) & 0x1; - uint8_t orient = ((*(uint8_t *)data.bytes) >> 1) & 0x3; - switch (orient) { - case 0: - result = MBLAccelerometerOrientationLandscapeRight; - break; - case 1: - result = MBLAccelerometerOrientationLandscapeLeft; - break; - case 2: - result = MBLAccelerometerOrientationPortrait; - break; - case 3: - result = MBLAccelerometerOrientationPortraitUpsideDown; - break; - default: - result = 0; - NSAssert(NO, @"Unexpected byte from the orientation"); - } - return [[MBLOrientationData alloc] initWithOrientation:result - facingDirection:updsideDown ? MBLAccelerometerFacingDirectionDownward : MBLAccelerometerFacingDirectionUpward - timestamp:date - data:data]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - uint8_t orientationValue = 3; - if (fabs(value - MBLAccelerometerOrientationLandscapeRight) < DBL_EPSILON) { - orientationValue = 0; - } else if (fabs(value - MBLAccelerometerOrientationLandscapeLeft) < DBL_EPSILON) { - orientationValue = 1; - } else if (fabs(value - MBLAccelerometerOrientationPortrait) < DBL_EPSILON) { - orientationValue = 2; - } - return [NSNumber numberWithUnsignedChar:(orientationValue << 1) | 0x1]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.h deleted file mode 100644 index fcb8b02..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLAccelerometerBoschPackedDataReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerBosch; -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschPackedDataReadyEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.m deleted file mode 100644 index a6c610e..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschPackedDataReadyEvent.m +++ /dev/null @@ -1,82 +0,0 @@ -/** - * MBLAccelerometerBoschPackedDataReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschPackedDataReadyEvent.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLAccelerometerBoschFormat.h" -#import "MBLNumericFormatter.h" - -@implementation MBLAccelerometerBoschPackedDataReadyEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x1C format:[[MBLAccelerometerBoschFormat alloc] initWithAccelerometer:accelerometer packed:YES]]; - if (self) { - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent initializeAsync]; -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent deinitializeAsync]; -} - -- (BFTask *)performAsyncActivation -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent deactivateAsync]; -} - -- (BFTask *)startLoggingAsync -{ - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"You should only log dataReadyEvent and not packedDataReadyEvent."}]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschRMSFormat.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschRMSFormat.h deleted file mode 100644 index 5d2ede5..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschRMSFormat.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLAccelerometerBoschRMSFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" -#import "MBLAccelerometerBosch+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschRMSFormat : MBLFormat -@property (nonatomic, weak) MBLAccelerometerBosch *accelerometer; - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschRMSFormat.m b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschRMSFormat.m deleted file mode 100644 index 50ee923..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschRMSFormat.m +++ /dev/null @@ -1,98 +0,0 @@ -/** - * MBLAccelerometerBoschRMSFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschRMSFormat.h" -#import "MBLRMSAccelerometerData+Private.h" - -@implementation MBLAccelerometerBoschRMSFormat - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer -{ - self = [super initNumberWithLength:4 isSigned:NO]; - if (self) { - self.accelerometer = accelerometer; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLAccelerometerBoschRMSFormat *newFormat = [super copyWithZone:zone]; - newFormat.accelerometer = self.accelerometer; - return newFormat; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - const uint32_t raw = *(uint32_t *)data.bytes; - double scale; - switch (self.accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange16G: - scale = 16.0 / 32768.0; - break; - case MBLAccelerometerBoschRange8G: - scale = 8.0 / 32768.0; - break; - case MBLAccelerometerBoschRange4G: - scale = 4.0 / 32768.0; - break; - case MBLAccelerometerBoschRange2G: - scale = 2.0 / 32768.0; - break; - } - return [[MBLRMSAccelerometerData alloc] initWithRMS:(double)raw * scale timestamp:date data:data]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - double scale; - switch (self.accelerometer.fullScaleRange) { - case MBLAccelerometerBoschRange16G: - scale = 16.0 / 32768.0; - break; - case MBLAccelerometerBoschRange8G: - scale = 8.0 / 32768.0; - break; - case MBLAccelerometerBoschRange4G: - scale = 4.0 / 32768.0; - break; - case MBLAccelerometerBoschRange2G: - scale = 2.0 / 32768.0; - break; - } - return [NSNumber numberWithInt:value / scale]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent+Private.h b/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent+Private.h deleted file mode 100644 index a19a67a..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/AccelerometerBosch/MBLAccelerometerBoschTapEvent+Private.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLAccelerometerBoschTapEvent+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/13/17. - * Copyright 2017 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerBoschTapEvent.h" -@class MBLAccelerometerBosch; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerBoschTapEvent (Private) - -- (instancetype)initWithAccelerometer:(MBLAccelerometerBosch *)accelerometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometer+Private.h b/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometer+Private.h deleted file mode 100644 index e8d2c92..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometer+Private.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - * MBLAccelerometer+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometer.h" -#import "MBLRegister+Private.h" -#import "MBLModuleInfo.h" -#import "BFTask+MBLPrivate.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometer (Private) -@property (nonatomic) MBLEvent *dataReadyEvent; -@property (nonatomic) MBLEvent *packedDataReadyEvent; -@property (nonatomic) MBLEvent *xAxisReadyEvent; -@property (nonatomic) MBLEvent *yAxisReadyEvent; -@property (nonatomic) MBLEvent *zAxisReadyEvent; -@property (nonatomic) MBLEvent *rmsDataReadyEvent; - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo; - -- (BFTask *)pullConfigAsync; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometerData+Private.h b/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometerData+Private.h deleted file mode 100644 index 16db56c..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MBLAccelerometerData+Private.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * MBLAccelerometerData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 8/3/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerData (Private) - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -@interface MBLCorrectedAccelerometerData (Private) - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z accuracy:(MBLCalibrationAccuracy)accuracy timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MBLOrientationData+Private.h b/MetaWear/Internal/Modules/Accelerometer/MBLOrientationData+Private.h deleted file mode 100644 index d5911ca..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MBLOrientationData+Private.h +++ /dev/null @@ -1,51 +0,0 @@ -/** - * MBLOrientationData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLOrientationData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLOrientationData (Private) - -- (instancetype)initWithOrientation:(MBLAccelerometerOrientation)orientation timestamp:(NSDate *)timestamp data:(NSData *)data; - -- (instancetype)initWithOrientation:(MBLAccelerometerOrientation)orientation - facingDirection:(MBLAccelerometerFacingDirection)facingDirection - timestamp:(NSDate *)timestamp - data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MBLRMSAccelerometerData+Private.h b/MetaWear/Internal/Modules/Accelerometer/MBLRMSAccelerometerData+Private.h deleted file mode 100644 index d4280af..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MBLRMSAccelerometerData+Private.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLRMSAccelerometerData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/21/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLRMSAccelerometerData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLRMSAccelerometerData (Private) - -- (instancetype)initWithRMS:(double)rms timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerAxisReadyEvent.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerAxisReadyEvent.h deleted file mode 100644 index 5767131..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerAxisReadyEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerAxisReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 4/29/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerMMA8452Q; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerAxisReadyEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer axis:(uint8_t)axis; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerAxisReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerAxisReadyEvent.m deleted file mode 100644 index 69b9f7c..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerAxisReadyEvent.m +++ /dev/null @@ -1,96 +0,0 @@ -/** - * MBLAccelerometerAxisReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 4/29/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerAxisReadyEvent.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLAccelerometerMMA8452QFormat.h" -#import "MBLLogger.h" - -@implementation MBLAccelerometerAxisReadyEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer axis:(uint8_t)axis -{ - NSString *identifier = nil; - MBLAccelerometerAxis typedAxis = axis; - switch (typedAxis) { - case MBLAccelerometerAxisX: - identifier = @"acceleration[0]"; - break; - case MBLAccelerometerAxisY: - identifier = @"acceleration[1]"; - break; - case MBLAccelerometerAxisZ: - identifier = @"acceleration[2]"; - break; - } - self = [super initWithModule:accelerometer registerId:0x4 format:[[MBLAccelerometerMMA8452QFormat alloc] initWithAxis:axis] identifier:identifier]; - return self; -} - -- (BFTask *)performAsyncInitialization -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent initializeAsync]; -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent deinitializeAsync]; -} - -- (BFTask *)performAsyncActivation -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent deactivateAsync]; -} - -- (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler -{ - MBLAccelerometerMMA8452Q *accelerometer = (MBLAccelerometerMMA8452Q *)self.module; - if (accelerometer.sampleFrequency > 200) { - MBLLog(MBLLogLevelWarning, @"[Accelerometer] due to Bluetooth LE bandwidth limitations, notications faster than 200Hz will result in packet loss"); - } - return [super startNotificationsWithHandlerAsync:handler]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.h deleted file mode 100644 index 2415558..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerDataReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerMMA8452Q; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerDataReadyEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.m deleted file mode 100644 index 08eac2e..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerDataReadyEvent.m +++ /dev/null @@ -1,92 +0,0 @@ -/** - * MBLAccelerometerDataReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerDataReadyEvent.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometerMMA8452QFormat.h" -#import "MBLAccelerometerPackedDataReadyEvent.h" -#import "MBLNumericFormatter.h" -#import "mma8452q.h" -#import "BFTask+MBLPrivate.h" -#import "MBLLogger.h" - - -@interface MBLAccelerometerDataReadyEvent () -@property (nonatomic) MBLRegister *dataEnable; -@end - -@implementation MBLAccelerometerDataReadyEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x4 format:[[MBLAccelerometerMMA8452QFormat alloc] initWithPacked:NO] identifier:@"acceleration"]; - if (self) { - self.dataEnable = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x2 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - BOOL strobeGlobalEnable = self.module.activateCount; - MBLAccelerometerMMA8452Q *accelerometer = (MBLAccelerometerMMA8452Q *)self.module; - - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x0]]; - } - [tasks addObject:[self.dataEnable writeByteAsync:0x1]]; - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x1]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [self.dataEnable writeByteAsync:0x0]; -} - -- (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler -{ - MBLAccelerometerMMA8452Q *accelerometer = (MBLAccelerometerMMA8452Q *)self.module; - if (accelerometer.packedDataReadyEvent && accelerometer.sampleFrequency >= 100) { - MBLLog(MBLLogLevelWarning, @"For high frequency streaming, use packedDataReadyEvent"); - } - return [super startNotificationsWithHandlerAsync:handler]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerFreeFallEvent.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerFreeFallEvent.h deleted file mode 100644 index 59cf71d..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerFreeFallEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerFreeFallEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerMMA8452Q; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerFreeFallEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerFreeFallEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerFreeFallEvent.m deleted file mode 100644 index c2b16fd..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerFreeFallEvent.m +++ /dev/null @@ -1,91 +0,0 @@ -/** - * MBLAccelerometerFreeFallEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerFreeFallEvent.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLNumericFormatter.h" -#import "mma8452q.h" - -@interface MBLAccelerometerFreeFallEvent () -@property (nonatomic) MBLRegister *motionEnable; -@property (nonatomic) MBLRegister *motionSettings; -@end - -@implementation MBLAccelerometerFreeFallEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x7 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - if (self) { - self.motionEnable = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x05 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.motionSettings = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x06 format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - BOOL strobeGlobalEnable = self.module.activateCount; - MBLAccelerometerMMA8452Q *accelerometer = (MBLAccelerometerMMA8452Q *)self.module; - mma8452q_ff_mt_regs_t regs = { 0 }; - - regs.ff_mt_cfg.ele = YES; // Event flags are latched into FF_MT_SRC register - - regs.ff_mt_cfg.oae = NO; // Freefall Flag (Logical AND combination) - regs.ff_mt_cfg.zefe = YES; // Make sure all axis are in low G's - regs.ff_mt_cfg.yefe = YES; - regs.ff_mt_cfg.xefe = YES; - - regs.ff_mt_ths.ths = [accelerometer scalePulseThreshold:accelerometer.freeFallThreshold]; - regs.ff_mt_count.count = [accelerometer scaleFreeFallMotionDebounceCounter:accelerometer.freeFallWidth]; - - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x0]]; - } - [tasks addObject:[self.motionSettings writeDataAsync:[NSData dataWithBytes:®s length:sizeof(mma8452q_ff_mt_regs_t)]]]; - [tasks addObject:[self.motionEnable writeByteAsync:0x1]]; - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x1]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [self.motionEnable writeByteAsync:0x0]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q+Private.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q+Private.h deleted file mode 100644 index 2aa8251..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452Q+Private.h +++ /dev/null @@ -1,51 +0,0 @@ -/** - * MBLAccelerometerMMA8452Q+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerMMA8452Q.h" -#import "MBLRegister+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerMMA8452Q (Private) -- (uint8_t)scalePulseThreshold:(double)accelerationInGs; -- (uint8_t)scalePulseTimeLimit:(double)timeInMsec; -- (uint8_t)scalePulseLatency:(double)timeInMsec; -- (uint8_t)scaleSecondPulseTimeWindow:(double)timeInMsec; -- (uint8_t)scalePortraitLandscapeDebounceCounter:(double)timeInMsec; -- (uint8_t)scaleFreeFallMotionDebounceCounter:(double)timeInMsec; -- (uint8_t)scaleTransientDebounceCounter:(double)timeInMsec; -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QFormat.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QFormat.h deleted file mode 100644 index 589708f..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QFormat.h +++ /dev/null @@ -1,49 +0,0 @@ -/** - * MBLAccelerometerMMA8452QFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" -#import "MBLAccelerometerMMA8452Q+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerMMA8452QFormat : MBLFormat -@property (nonatomic) BOOL packed; - -- (instancetype)initWithPacked:(BOOL)packed; -- (instancetype)initWithAxis:(uint8_t)axis; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QFormat.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QFormat.m deleted file mode 100644 index 791640a..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QFormat.m +++ /dev/null @@ -1,105 +0,0 @@ -/** - * MBLAccelerometerMMA8452QFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 5/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerMMA8452QFormat.h" -#import "MBLModule+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLNumericData+Private.h" - -@implementation MBLAccelerometerMMA8452QFormat - -- (instancetype)initWithPacked:(BOOL)packed -{ - self = [super initArrayWithElements:packed ? 9 : 3 elementSize:2 isSigned:YES]; - if (self) { - self.packed = packed; - } - return self; -} - -- (instancetype)initWithAxis:(uint8_t)axis -{ - NSAssert(__builtin_popcount(axis) == 1, @"Only one axis at a time please"); - switch (axis) { - case MBLAccelerometerAxisX: - self = [super initNumberWithLength:2 isSigned:YES offset:0]; - break; - case MBLAccelerometerAxisY: - self = [super initNumberWithLength:2 isSigned:YES offset:2]; - break; - case MBLAccelerometerAxisZ: - self = [super initNumberWithLength:2 isSigned:YES offset:4]; - break; - } - return self; -} - -- (id)singleEntryFromData:(NSData *)data date:(NSDate *)date -{ - double x = DBL_MIN, y = DBL_MIN, z = DBL_MIN; - const uint8_t *bytes = data.bytes; - - x = (double)(*(int16_t *)&bytes[0]) / 1000.0; - if (self.type == MBLFormatTypeArray) { - y = (double)(*(int16_t *)&bytes[2]) / 1000.0; - z = (double)(*(int16_t *)&bytes[4]) / 1000.0; - } - - if (self.type == MBLFormatTypeArray) { - return [[MBLAccelerometerData alloc] initWithX:x y:y z:z timestamp:date data:data]; - } else { - return [[MBLNumericData alloc] initWithNumber:[NSNumber numberWithDouble:x] timestamp:date data:data]; - } -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - if (self.packed) { - return @[[self singleEntryFromData:[data subdataWithRange:NSMakeRange(0, 6)] date:date], - [self singleEntryFromData:[data subdataWithRange:NSMakeRange(6, 6)] date:date], - [self singleEntryFromData:[data subdataWithRange:NSMakeRange(12, 6)] date:date]]; - } else { - return [self singleEntryFromData:data date:date]; - } -} - -- (NSNumber *)numberFromDouble:(double)value -{ - return [NSNumber numberWithInt:value * 1000.0]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QOrientationFormat.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QOrientationFormat.h deleted file mode 100644 index a9db8cd..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QOrientationFormat.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLAccelerometerMMA8452QOrientationFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 6/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerMMA8452QOrientationFormat : MBLFormat - -- (instancetype)init; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QOrientationFormat.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QOrientationFormat.m deleted file mode 100644 index c44774b..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QOrientationFormat.m +++ /dev/null @@ -1,54 +0,0 @@ -/** - * MBLAccelerometerMMA8452QOrientationFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 6/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerMMA8452QOrientationFormat.h" -#import "mma8452q.h" -#import "MBLOrientationData+Private.h" - -@implementation MBLAccelerometerMMA8452QOrientationFormat - -- (instancetype)init -{ - self = [super initEncodedDataWithLength:1]; - return self; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - mma8452q_pl_status_t status = *(mma8452q_pl_status_t *)data.bytes; - return [[MBLOrientationData alloc] initWithOrientation:status.lapo timestamp:date data:data]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QRMSFormat.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QRMSFormat.h deleted file mode 100644 index b1e60a6..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerMMA8452QRMSFormat.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLAccelerometerMMA8452QRMSFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" -#import "MBLAccelerometerMMA8452Q+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerMMA8452QRMSFormat : MBLFormat -@property (nonatomic, weak, nullable) MBLAccelerometerMMA8452Q *accelerometer; - -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerOrientationEvent.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerOrientationEvent.h deleted file mode 100644 index 89f6a1b..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerOrientationEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerOrientationEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 10/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerMMA8452Q; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerOrientationEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerOrientationEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerOrientationEvent.m deleted file mode 100644 index 6a3ba25..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerOrientationEvent.m +++ /dev/null @@ -1,86 +0,0 @@ -/** - * MBLAccelerometerOrientationEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 10/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerOrientationEvent.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometerMMA8452QOrientationFormat.h" -#import "MBLDataSample+Private.h" -#import "MBLNumericFormatter.h" -#import "mma8452q.h" - -@interface MBLAccelerometerOrientationEvent () -@property (nonatomic) MBLRegister *orientationEnable; -@property (nonatomic) MBLRegister *orientationSettings; -@end - -@implementation MBLAccelerometerOrientationEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0xA format:[[MBLAccelerometerMMA8452QOrientationFormat alloc] init] identifier:@"orientation"]; - if (self) { - self.orientationEnable = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x08 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.orientationSettings = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x09 format:[[MBLFormat alloc] initEncodedDataWithLength:5]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - BOOL strobeGlobalEnable = self.module.activateCount; - MBLAccelerometerMMA8452Q *accelerometer = (MBLAccelerometerMMA8452Q *)self.module; - mma8452q_pl_regs_t regs = { 0 }; - regs.pl_cfg.dbcntm = YES; - regs.pl_cfg.pl_en = YES; - regs.pl_count.dbnce = [accelerometer scalePortraitLandscapeDebounceCounter:50.0]; - - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x0]]; - } - [tasks addObject:[self.orientationSettings writeDataAsync:[NSData dataWithBytes:®s length:sizeof(mma8452q_pl_regs_t)]]]; - [tasks addObject:[self.orientationEnable writeByteAsync:0x1]]; - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x1]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [self.orientationEnable writeByteAsync:0x0]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.h deleted file mode 100644 index 9cb23ba..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerPackedDataReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometerMMA8452Q; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerPackedDataReadyEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.m deleted file mode 100644 index 17b13b8..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerPackedDataReadyEvent.m +++ /dev/null @@ -1,89 +0,0 @@ -/** - * MBLAccelerometerPackedDataReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerPackedDataReadyEvent.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometerMMA8452QFormat.h" -#import "MBLNumericFormatter.h" -#import "mma8452q.h" -#import "BFTask+MBLPrivate.h" - -@interface MBLAccelerometerPackedDataReadyEvent () -@property (nonatomic) MBLRegister *dataEnable; -@end - -@implementation MBLAccelerometerPackedDataReadyEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x12 format:[[MBLAccelerometerMMA8452QFormat alloc] initWithPacked:YES]]; - if (self) { - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent initializeAsync]; -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent deinitializeAsync]; -} - -- (BFTask *)performAsyncActivation -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - MBLAccelerometer *accelerometer = (MBLAccelerometer *)self.module; - return [accelerometer.dataReadyEvent deactivateAsync]; -} - -- (BFTask *)startLoggingAsync -{ - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"You should only log dataReadyEvent and not packedDataReadyEvent."}]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerShakeEvent.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerShakeEvent.h deleted file mode 100644 index e10a475..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerShakeEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerShakeEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometer; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerShakeEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometer *)accelerometer; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerShakeEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerShakeEvent.m deleted file mode 100644 index 78e42a2..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerShakeEvent.m +++ /dev/null @@ -1,90 +0,0 @@ -/** - * MBLAccelerometerShakeEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerShakeEvent.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLNumericFormatter.h" -#import "mma8452q.h" - -@interface MBLAccelerometerShakeEvent () -@property (nonatomic) MBLRegister *transientEnable; -@property (nonatomic) MBLRegister *transientSettings; -@end - -@implementation MBLAccelerometerShakeEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0x10 format:[[MBLFormat alloc] initEncodedDataWithLength:1] identifier:@"mma8452q-shake"]; - if (self) { - self.transientEnable = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0E format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.transientSettings = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0F format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - BOOL strobeGlobalEnable = self.module.activateCount; - MBLAccelerometerMMA8452Q *accelerometer = (MBLAccelerometerMMA8452Q *)self.module; - mma8452q_transient_regs_t regs = { 0 }; - - regs.transient_cfg.ele = YES; - regs.transient_cfg.ztefe = YES; - regs.transient_cfg.ytefe = YES; - regs.transient_cfg.xtefe = YES; - - regs.transient_ths.ths = [accelerometer scalePulseThreshold:accelerometer.shakeThreshold]; - - regs.transient_count.dbnce = [accelerometer scaleTransientDebounceCounter:accelerometer.shakeWidth]; - - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x0]]; - } - [tasks addObject:[self.transientSettings writeDataAsync:[NSData dataWithBytes:®s length:sizeof(mma8452q_transient_regs_t)]]]; - [tasks addObject:[self.transientEnable writeByteAsync:0x1]]; - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x1]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [self.transientEnable writeByteAsync:0x0]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerTapEvent.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerTapEvent.h deleted file mode 100644 index dac03e0..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerTapEvent.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLAccelerometerTapEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLAccelerometer; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAccelerometerTapEvent : MBLEvent -- (instancetype)initWithAccelerometer:(MBLAccelerometer *)accelerometer; -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerTapEvent.m b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerTapEvent.m deleted file mode 100644 index cbbd54b..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/MBLAccelerometerTapEvent.m +++ /dev/null @@ -1,137 +0,0 @@ -/** - * MBLAccelerometerTapEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 10/23/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAccelerometerTapEvent.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLNumericFormatter.h" -#import "mma8452q.h" - -@interface MBLAccelerometerTapEvent () -@property (nonatomic) MBLRegister *pulseEnable; -@property (nonatomic) MBLRegister *pulseSettings; -@end - -@implementation MBLAccelerometerTapEvent - -- (instancetype)initWithAccelerometer:(MBLAccelerometerMMA8452Q *)accelerometer -{ - self = [super initWithModule:accelerometer registerId:0xD format:[[MBLFormat alloc] initEncodedDataWithLength:1] identifier:@"mma8452q-tap"]; - if (self) { - self.pulseEnable = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0B format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.pulseSettings = [[MBLRegister alloc] initWithModule:accelerometer registerId:0x0C format:[[MBLFormat alloc] initEncodedDataWithLength:8]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - NSMutableArray *tasks = [NSMutableArray array]; - BOOL strobeGlobalEnable = self.module.activateCount; - MBLAccelerometerMMA8452Q *accelerometer = (MBLAccelerometerMMA8452Q *)self.module; - mma8452q_pulse_regs_t regs = { 0 }; - // Latch enabled - regs.pulse_cfg.ele = YES; - if (accelerometer.tapDetectionAxis & MBLAccelerometerAxisX) { - if (accelerometer.tapType == MBLAccelerometerTapTypeSingle || - accelerometer.tapType == MBLAccelerometerTapTypeBoth) { - regs.pulse_cfg.xspefe = YES; - } - if (accelerometer.tapType == MBLAccelerometerTapTypeDouble || - accelerometer.tapType == MBLAccelerometerTapTypeBoth) { - regs.pulse_cfg.xdpefe = YES; - } - } - if (accelerometer.tapDetectionAxis & MBLAccelerometerAxisY) { - if (accelerometer.tapType == MBLAccelerometerTapTypeSingle || - accelerometer.tapType == MBLAccelerometerTapTypeBoth) { - regs.pulse_cfg.yspefe = YES; - } - if (accelerometer.tapType == MBLAccelerometerTapTypeDouble || - accelerometer.tapType == MBLAccelerometerTapTypeBoth) { - regs.pulse_cfg.ydpefe = YES; - } - } - if (accelerometer.tapDetectionAxis & MBLAccelerometerAxisZ) { - if (accelerometer.tapType == MBLAccelerometerTapTypeSingle || - accelerometer.tapType == MBLAccelerometerTapTypeBoth) { - regs.pulse_cfg.zspefe = YES; - } - if (accelerometer.tapType == MBLAccelerometerTapTypeDouble || - accelerometer.tapType == MBLAccelerometerTapTypeBoth) { - regs.pulse_cfg.zdpefe = YES; - } - } - - // pulse_thsx.ths defines the X-axis threshold which is used by the system to - // start the pulse detection procedure. - regs.pulse_thsx.ths = [accelerometer scalePulseThreshold:3.5]; - // pulse_thst.ths defines the Y-axis threshold which is used by the system to - // start the pulse detection procedure. - regs.pulse_thsy.ths = [accelerometer scalePulseThreshold:3.5]; - // pulse_thst.ths defines the Z-axis threshold which is used by the system to - // start the pulse detection procedure. - regs.pulse_thyz.ths = [accelerometer scalePulseThreshold:4.0]; - - // tmlt defines the maximum time interval that can elapse between the start - // of the acceleration on the selected axis exceeding the specified threshold - // and the end when the acceleration on the selected axis must go below the - // specified threshold to be considered a valid pulse. - regs.pulse_tmlt.tmlt = [accelerometer scalePulseTimeLimit:30.0]; - // ltcy defines the time interval that starts after the first pulse detection. - // During this time interval, all pulses are ignored. - regs.pulse_ltcy.ltcy = [accelerometer scalePulseLatency:80.0]; - // define the maximum interval of time that can elapse after the end of the - // latency interval in which the start of the second pulse event must be - // detected provided the device has been configured for double pulse detection - regs.pulse_wind.wind = [accelerometer scaleSecondPulseTimeWindow:300.0]; - - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x0]]; - } - [tasks addObject:[self.pulseSettings writeDataAsync:[NSData dataWithBytes:®s length:sizeof(mma8452q_pulse_regs_t)]]]; - [tasks addObject:[self.pulseEnable writeByteAsync:0x1]]; - if (strobeGlobalEnable) { - [tasks addObject:[accelerometer.globalEnable writeByteAsync:0x1]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [self.pulseEnable writeByteAsync:0x0]; -} - -@end diff --git a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/mma8452q.h b/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/mma8452q.h deleted file mode 100644 index 7da3351..0000000 --- a/MetaWear/Internal/Modules/Accelerometer/MMA8452Q/mma8452q.h +++ /dev/null @@ -1,424 +0,0 @@ -#ifndef __MMA8452Q_H__ -#define __MMA8452Q_H__ -/** - * mma8452q.h - * MetaWear - * - * Created by Stephen Schiffli on 8/1/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#include -#include - -// Sensor I2C address -#define MMA8452Q_I2C_ADDRESS 0x1C - -#define MMA8452Q_INT_PIN 6 - -// MMA8452Q register addresses -#define MMA8452Q_REG_ADDR_STATUS 0x00 // R -#define MMA8452Q_REG_ADDR_XOUT_H 0x01 // R -#define MMA8452Q_REG_ADDR_XOUT_L 0x02 // R -#define MMA8452Q_REG_ADDR_YOUT_H 0x03 // R -#define MMA8452Q_REG_ADDR_YOUT_L 0x04 // R -#define MMA8452Q_REG_ADDR_ZOUT_H 0x05 // R -#define MMA8452Q_REG_ADDR_ZOUT_L 0x06 // R - -#define MMA8452Q_REG_ADDR_SYSMOD 0x0B // R 00 Standby, 01 Wake, 10 sleep -#define MMA8452Q_REG_ADDR_INT_SRC 0x0C // R -#define MMA8452Q_REG_ADDR_WHO_AM_I 0x0D // R 0x2A - -#define MMA8452Q_REG_ADDR_XYZ_DATA_CFG 0x0E // R/W -#define MMA8452Q_REG_ADDR_HP_FILTER_CUTOFF 0x0F // R/W - -#define MMA8452Q_REG_ADDR_PL_STATUS 0x10 // R -#define MMA8452Q_REG_ADDR_PL_CFG 0x11 // R/W -#define MMA8452Q_REG_ADDR_PL_COUNT 0x12 // R/W -#define MMA8452Q_REG_ADDR_PL_BF_ZCOMP 0x13 // R -#define MMA8452Q_REG_ADDR_P_L_THS_REG 0x14 // R - -#define MMA8452Q_REG_ADDR_FF_MT_CFG 0x15 // R/W -#define MMA8452Q_REG_ADDR_FF_MT_SRC 0x16 // R -#define MMA8452Q_REG_ADDR_FF_MT_THS 0x17 // R/W -#define MMA8452Q_REG_ADDR_FF_MT_COUNT 0x18 // R/W - -#define MMA8452Q_REG_ADDR_TRANSIENT_CFG 0x1D // R/W -#define MMA8452Q_REG_ADDR_TRANSIENT_SRC 0x1E // R -#define MMA8452Q_REG_ADDR_TRANSIENT_THS 0x1F // R/W -#define MMA8452Q_REG_ADDR_TRANSIENT_COUNT 0x20 // R/W - -#define MMA8452Q_REG_ADDR_PULSE_CFG 0x21 // R/W -#define MMA8452Q_REG_ADDR_PULSE_SRC 0x22 // R -#define MMA8452Q_REG_ADDR_PULSE_THSX 0x23 // R/W -#define MMA8452Q_REG_ADDR_PULSE_THSY 0x24 // R/W -#define MMA8452Q_REG_ADDR_PULSE_THSZ 0x25 // R/W -#define MMA8452Q_REG_ADDR_PULSE_TMLT 0x26 // R/W -#define MMA8452Q_REG_ADDR_PULSE_LTCY 0x27 // R/W -#define MMA8452Q_REG_ADDR_PULSE_WIND 0x28 // R/W - -#define MMA8452Q_REG_ADDR_ASLP_COUNT 0x29 // R/W - -#define MMA8452Q_REG_ADDR_OFF_X 0x2F // R/W -#define MMA8452Q_REG_ADDR_OFF_Y 0x30 // R/W -#define MMA8452Q_REG_ADDR_OFF_Z 0x31 // R/W - -#define MMA8452Q_REG_ADDR_CTRL_REG1 0x2A // R/W -#define MMA8452Q_REG_ADDR_CTRL_REG2 0x2B // R/W -#define MMA8452Q_REG_ADDR_CTRL_REG3 0x2C // R/W -#define MMA8452Q_REG_ADDR_CTRL_REG4 0x2D // R/W -#define MMA8452Q_REG_ADDR_CTRL_REG5 0x2E // R/W - -// Select register valies -#define MMA8452Q_REG_VAL_WHO_AM_I 0x2A // R - -typedef enum { - MMA8452Q_ASLP_RATE_50HZ = 0, - MMA8452Q_ASLP_RATE_12_5HZ, - MMA8452Q_ASLP_RATE_6_25HZ, - MMA8452Q_ASLP_RATE_1_56HZ -} mma8452q_aslp_rate_t; - -typedef struct { - uint8_t active:1; - uint8_t f_read:1; - uint8_t lnoise:1; - uint8_t dr:3; - uint8_t aslp_rate:2; -} mma8452q_ctrl_reg1_t; - -typedef struct { - uint8_t mods:2; - uint8_t slpe:1; - uint8_t smods:2; - uint8_t :1; - uint8_t rst:1; - uint8_t st:1; -} mma8452q_ctrl_reg2_t; - -typedef struct { - uint8_t pp_od:1; - uint8_t ipol:1; - uint8_t :1; - uint8_t wake_ff_mt:1; - uint8_t wake_pulse:1; - uint8_t wake_lndprt:1; - uint8_t wake_trans:1; - uint8_t :1; -} mma8452q_ctrl_reg3_t; - -typedef struct { - uint8_t int_en_drdy:1; - uint8_t :1; - uint8_t int_en_ff_mt:1; - uint8_t int_en_pulse:1; - uint8_t int_en_lndprt:1; - uint8_t int_en_trans:1; - uint8_t :1; - uint8_t int_en_aslp:1; -} mma8452q_ctrl_reg4_t; - -typedef struct { - uint8_t int_cfg_drdy:1; - uint8_t :1; - uint8_t int_cfg_ff_mt:1; - uint8_t int_cfg_pulse:1; - uint8_t int_cfg_lndprt:1; - uint8_t int_cfg_trans:1; - uint8_t :1; - uint8_t int_cfg_aslp:1; -} mma8452q_ctrl_reg5_t; - -typedef struct { - mma8452q_ctrl_reg1_t ctrl_reg1; - mma8452q_ctrl_reg2_t ctrl_reg2; - mma8452q_ctrl_reg3_t ctrl_reg3; - mma8452q_ctrl_reg4_t ctrl_reg4; - mma8452q_ctrl_reg5_t ctrl_reg5; -} mma8452q_ctrl_regs_t; - -typedef struct { - uint8_t fs:2; - uint8_t :2; - uint8_t hpf_out:1; - uint8_t :3; -} mma8452q_xyz_data_cfg_t; - -typedef struct { - uint8_t sel:2; - uint8_t :2; - uint8_t pulselpfen:1; - uint8_t pulsehpfen:1; - uint8_t :2; -} mma8452q_hp_filter_cutoff_t; - -typedef struct { - uint8_t aslp_count; -} mma8452q_aslp_count_reg_t; - -typedef struct { - mma8452q_xyz_data_cfg_t xyz_data_cfg; - mma8452q_hp_filter_cutoff_t hp_filter_cutoff; - mma8452q_ctrl_reg1_t ctrl_reg1; - mma8452q_ctrl_reg2_t ctrl_reg2; - mma8452q_aslp_count_reg_t aslp_count; -} mma8452q_data_regs_t; - -typedef struct { - uint8_t :3; - uint8_t xefe:1; - uint8_t yefe:1; - uint8_t zefe:1; - uint8_t oae:1; - uint8_t ele:1; -} mma8452q_ff_mt_cfg_t; - -typedef struct { - uint8_t xhp:1; - uint8_t xhe:1; - uint8_t yhp:1; - uint8_t yhe:1; - uint8_t zhp:1; - uint8_t zhe:1; - uint8_t :1; - uint8_t ea:1; -} mma8452q_ff_mt_src_t; - -typedef struct { - uint8_t ths:7; - uint8_t dbcntm:1; -} mma8452q_ff_mt_ths_t; - -typedef struct { - uint8_t count; -} mma8452q_ff_mt_count_t; - -typedef struct { - mma8452q_ff_mt_cfg_t ff_mt_cfg; - mma8452q_ff_mt_src_t ff_mt_src; - mma8452q_ff_mt_ths_t ff_mt_ths; - mma8452q_ff_mt_count_t ff_mt_count; -} mma8452q_ff_mt_regs_t; - -typedef struct { - uint8_t bafro:1; - uint8_t lapo:2; - uint8_t :3; - uint8_t lo:1; - uint8_t newlp:1; -} mma8452q_pl_status_t; - -typedef struct { - uint8_t :6; - uint8_t pl_en:1; - uint8_t dbcntm:1; -} mma8452q_pl_cfg_t; - -typedef struct { - uint8_t dbnce; -} mma8452q_pl_count_t; - -typedef struct { - uint8_t zlock:3; - uint8_t :3; - uint8_t bkfr:2; -} mma8452q_pl_bf_zcomp_t; - -typedef struct { - uint8_t hys:3; - uint8_t pl_ths:5; -} mma8452q_pl_ths_t; - -typedef struct { - mma8452q_pl_status_t pl_status; - mma8452q_pl_cfg_t pl_cfg; - mma8452q_pl_count_t pl_count; - mma8452q_pl_bf_zcomp_t pl_bf_zcomp; - mma8452q_pl_ths_t pl_ths; -} mma8452q_pl_regs_t; - -typedef struct { - uint8_t xspefe:1; - uint8_t xdpefe:1; - uint8_t yspefe:1; - uint8_t ydpefe:1; - uint8_t zspefe:1; - uint8_t zdpefe:1; - uint8_t ele:1; - uint8_t dpa:1; -} mma8452q_pulse_cfg_t; - -typedef struct { - uint8_t polx:1; - uint8_t poly:1; - uint8_t polz:1; - uint8_t dpe:1; - uint8_t axx:1; - uint8_t axy:1; - uint8_t axz:1; - uint8_t ea:1; -} mma8452q_pulse_src_t; - -typedef struct { - uint8_t ths:7; - uint8_t :1; -} mma8452q_pulse_ths_t; - -typedef struct { - uint8_t tmlt:8; -} mma8452q_pulse_tmlt_t; - -typedef struct { - uint8_t ltcy:8; -} mma8452q_pulse_ltcy_t; - -typedef struct { - uint8_t wind:8; -} mma8452q_pulse_wind_t; - -typedef struct { - mma8452q_pulse_cfg_t pulse_cfg; - mma8452q_pulse_src_t pulse_src; - mma8452q_pulse_ths_t pulse_thsx; - mma8452q_pulse_ths_t pulse_thsy; - mma8452q_pulse_ths_t pulse_thyz; - mma8452q_pulse_tmlt_t pulse_tmlt; - mma8452q_pulse_ltcy_t pulse_ltcy; - mma8452q_pulse_wind_t pulse_wind; -} mma8452q_pulse_regs_t; - -typedef struct { - uint8_t hpf_byp:1; - uint8_t xtefe:1; - uint8_t ytefe:1; - uint8_t ztefe:1; - uint8_t ele:1; - uint8_t :3; -} mma8452q_transient_cfg_t; - -typedef struct { - uint8_t xtranspol:1; - uint8_t xtranse:1; - uint8_t ytranspol:1; - uint8_t ytranse:1; - uint8_t ztranspol:1; - uint8_t ztranse:1; - uint8_t ea:1; - uint8_t :1; -} mma8452q_transient_src_t; - -typedef struct { - uint8_t ths:7; - uint8_t dbcntm:1; -} mma8452q_transient_ths_t; - -typedef struct { - uint8_t dbnce:8; -} mma8452q_transient_count_t; - -typedef struct { - mma8452q_transient_cfg_t transient_cfg; - mma8452q_transient_src_t transient_src; - mma8452q_transient_ths_t transient_ths; - mma8452q_transient_count_t transient_count; -} mma8452q_transient_regs_t; - -typedef struct { - uint8_t off; -} mma8452q_off_t; - -typedef struct { - mma8452q_off_t off_x; - mma8452q_off_t off_y; - mma8452q_off_t off_z; -} mma8452q_off_regs_t; - -typedef struct { - uint8_t src_drdy:1; - uint8_t :1; - uint8_t src_ff_mt:1; - uint8_t src_pulse:1; - uint8_t src_lndprt:1; - uint8_t src_trans:1; - uint8_t :1; - uint8_t src_aslp:1; -} mma8452q_int_source_t; - -typedef void (*mma8542q_evt_handler_t)(uint8_t *data, uint8_t len); - -void mma8452q_init(void); -uint8_t mma8452q_whoami(void); - -void mma8452q_enable(void); -void mma8452q_disable(void); -void mma8452q_getdata(uint8_t *data); - -void mma8452q_data_enable(void); -void mma8452q_data_disable(void); -void mma8452q_data_setmoderegs(mma8452q_data_regs_t *regs); -void mma8452q_data_setmode(uint8_t *param, uint8_t len); -void mma8452q_data_getmoderegs(mma8452q_data_regs_t *regs); -void mma8452q_data_sethandler(mma8542q_evt_handler_t handler); - -void mma8452q_ff_mt_enable(void); -void mma8452q_ff_mt_disable(void); -//void mma8452q_ff_mt_setmode(bool elatch, bool motion, bool x, bool y, bool z, bool dbcntm, uint8_t threshhold, uint8_t dbcnt); -void mma8452q_ff_mt_setmoderegs(mma8452q_ff_mt_regs_t *regs); -void mma8452q_ff_mt_setmode(uint8_t *param, uint8_t len); -void mma8452q_ff_mt_getmoderegs(mma8452q_ff_mt_regs_t *regs); -void mma8452q_ff_mt_sethandler(mma8542q_evt_handler_t handler); - -void mma8452q_pl_enable(void); -void mma8452q_pl_disable(void); -void mma8452q_pl_setmoderegs(mma8452q_pl_regs_t *regs); -void mma8452q_pl_setmode(uint8_t *param, uint8_t len); -void mma8452q_pl_getmoderegs(mma8452q_pl_regs_t *regs); -void mma8452q_pl_sethandler(mma8542q_evt_handler_t handler); - -void mma8452q_pulse_enable(void); -void mma8452q_pulse_disable(void); -void mma8452q_pulse_setmoderegs(mma8452q_pulse_regs_t *regs); -void mma8452q_pulse_setmode(uint8_t *param, uint8_t len); -void mma8452q_pulse_getmoderegs(mma8452q_pulse_regs_t *regs); -void mma8452q_pulse_sethandler(mma8542q_evt_handler_t handler); - -void mma8452q_trans_enable(void); -void mma8452q_trans_disable(void); -void mma8452q_trans_setmoderegs(mma8452q_transient_regs_t *regs); -void mma8452q_trans_setmode(uint8_t *param, uint8_t len); -void mma8452q_trans_getmoderegs(mma8452q_transient_regs_t *regs); -void mma8452q_trans_sethandler(mma8542q_evt_handler_t handler); - -void mma8452q_off_setmoderegs(mma8452q_off_regs_t *regs); -void mma8452q_off_setmode(uint8_t *param, uint8_t len); -void mma8452q_off_getmoderegs(mma8452q_off_regs_t *regs); - -#endif - diff --git a/MetaWear/Internal/Modules/AmbientLight/MBLAmbientLight+Private.h b/MetaWear/Internal/Modules/AmbientLight/MBLAmbientLight+Private.h deleted file mode 100644 index 414bd0d..0000000 --- a/MetaWear/Internal/Modules/AmbientLight/MBLAmbientLight+Private.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLAmbientLight+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 7/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLAmbientLight.h" -#import "MBLRegister+Private.h" -#import "MBLModuleInfo.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLAmbientLight (Private) - -@property (nonatomic, nullable) MBLData *illuminance; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBosch+Private.h b/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBosch+Private.h deleted file mode 100644 index fa8f88f..0000000 --- a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBosch+Private.h +++ /dev/null @@ -1,45 +0,0 @@ -/** - * MBLBarometerBosch+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 2/25/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBarometerBosch.h" -#import "MBLMetaWear+Private.h" - -@interface MBLBarometerBosch (Private) - -@property (nonatomic) MBLRegister *mode; - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo; - -@end diff --git a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicAltitudeEvent.h b/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicAltitudeEvent.h deleted file mode 100644 index ad44bee..0000000 --- a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicAltitudeEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLBarometerBoschPeriodicAltitudeEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 7/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLBarometerBosch; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLBarometerBoschPeriodicAltitudeEvent : MBLEvent - -- (instancetype)initWithBarometer:(MBLBarometerBosch *)barometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicAltitudeEvent.m b/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicAltitudeEvent.m deleted file mode 100644 index dc43e93..0000000 --- a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicAltitudeEvent.m +++ /dev/null @@ -1,72 +0,0 @@ -/** - * MBLBarometerBoschPeriodicAltitudeEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 7/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBarometerBoschPeriodicAltitudeEvent.h" -#import "MBLBarometerBosch.h" -#import "MBLNumericFormatter.h" - -@interface MBLBarometerBoschPeriodicAltitudeEvent () -@property (nonatomic) MBLRegister *cyclicEnable; -@end - -@implementation MBLBarometerBoschPeriodicAltitudeEvent - -- (instancetype)initWithBarometer:(MBLBarometerBosch *)barometer -{ - self = [super initWithModule:barometer registerId:0x02 format:[[MBLNumericFormatter alloc] initDoubleWithLength:4 isSigned:YES scale:1.0 / 256.0] identifier:@"altitude"]; - if (self) { - self.cyclicEnable = [[MBLRegister alloc] initWithModule:barometer registerId:0x04 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - // Enable cyclic mode with altitude conversion - uint8_t data[] = { 1, 1 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.cyclicEnable writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bit for orientation interrupts - uint8_t data[] = { 0, 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.cyclicEnable writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicPressureEvent.h b/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicPressureEvent.h deleted file mode 100644 index fec9bef..0000000 --- a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicPressureEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLBarometerBoschPeriodicPressureEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 7/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLBarometerBosch; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLBarometerBoschPeriodicPressureEvent : MBLEvent - -- (instancetype)initWithBarometer:(MBLBarometerBosch *)barometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicPressureEvent.m b/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicPressureEvent.m deleted file mode 100644 index 57f2d7b..0000000 --- a/MetaWear/Internal/Modules/Barometer/BarometerBosch/MBLBarometerBoschPeriodicPressureEvent.m +++ /dev/null @@ -1,71 +0,0 @@ -/** - * MBLBarometerBoschPeriodicPressureEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 7/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBarometerBoschPeriodicPressureEvent.h" -#import "MBLBarometerBosch.h" -#import "MBLNumericFormatter.h" - -@interface MBLBarometerBoschPeriodicPressureEvent () -@property (nonatomic) MBLRegister *cyclicEnable; -@end - -@implementation MBLBarometerBoschPeriodicPressureEvent - -- (instancetype)initWithBarometer:(MBLBarometerBosch *)barometer -{ - self = [super initWithModule:barometer registerId:0x01 format:[[MBLNumericFormatter alloc] initDoubleWithLength:4 isSigned:NO scale:1.0 / 256.0] identifier:@"pressure"]; - if (self) { - self.cyclicEnable = [[MBLRegister alloc] initWithModule:barometer registerId:0x04 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - // Enable cyclic mode without altitude conversion - uint8_t data[] = { 1, 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.cyclicEnable writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bit for orientation interrupts - uint8_t data[] = { 0, 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.cyclicEnable writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Barometer/MBLBarometer+Private.h b/MetaWear/Internal/Modules/Barometer/MBLBarometer+Private.h deleted file mode 100644 index 1980951..0000000 --- a/MetaWear/Internal/Modules/Barometer/MBLBarometer+Private.h +++ /dev/null @@ -1,53 +0,0 @@ -/** - * MBLBarometer+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 7/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBarometer.h" -#import "MBLRegister+Private.h" -#import "MBLData+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLModuleInfo.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLBarometer (Private) - -@property (nonatomic) MBLData *pressure; -@property (nonatomic) MBLData *altitude; - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Command/MBLCommand.h b/MetaWear/Internal/Modules/Command/MBLCommand.h deleted file mode 100644 index 058533d..0000000 --- a/MetaWear/Internal/Modules/Command/MBLCommand.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * MBLEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 9/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLCommand : MBLModule - -/** - This method is used for programing the Metawear device to perform actions - automatically. Any time this even occurs you can have it trigger other - Metawear API calls even when the phone isn't connected. - When this method is called, the given block executed and checked for - validity. All Metawear API calls inside the block are sent to the device - for execution later. THE BLOCK IS ONLY EXECUTED ONCE DURNING THIS CALL AND - NEVER AGAIN, DON'T ATTEMPT TO USE CALLBACKS INSIDE THIS BLOCK - @param block Block consisting of API calls to make when this event occus - */ -- (BFTask *)programCommandsToRunOnEventAsync:(MBLEvent *)event commands:(MBLVoidHandler)block; -/** - Removes all commands setup when calling programCommandsToRunOnEventAsync: - */ -- (BFTask *)eraseCommandsToRunOnEventAsync:(MBLEvent *)event; - -@property (nonatomic, copy, nullable) MBLObjectHandler activatedRegHandler; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Command/MBLCommand.m b/MetaWear/Internal/Modules/Command/MBLCommand.m deleted file mode 100644 index c049f50..0000000 --- a/MetaWear/Internal/Modules/Command/MBLCommand.m +++ /dev/null @@ -1,197 +0,0 @@ -/** - * MBLEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 9/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLCommand.h" -#import "MBLRegister+Private.h" -#import "MBLEvent+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLNumericFormatter.h" -#import "MBLDataSample.h" -#import "MBLMetaWearManager+Private.h" -#import "BFTask+MBLPrivate.h" -#import "MBLLogger.h" - - -typedef struct __attribute__((packed)) { - uint8_t source_modid; - uint8_t source_regid; - uint8_t source_index; - uint8_t target_modid; - uint8_t target_regid; - uint8_t target_command_len; -} mw_event_trigger_t; - -@interface MBLCommand () -@property (nonatomic) MBLRegister *addCommandTrigger; -@property (nonatomic) MBLRegister *commandParameters; -@property (nonatomic) MBLRegister *removeCommandTrigger; - -@property (nonatomic) NSMutableArray *triggers; -@end - - -@implementation MBLCommand - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.addCommandTrigger = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:6]]; - self.commandParameters = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - self.removeCommandTrigger = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[MBLFormat writeOnly]]; - - uint8_t triggerCount = 8; // This was the old default - if (moduleInfo.moduleData.length) { - triggerCount = *(uint8_t *)moduleInfo.moduleData.bytes; - } - - self.triggers = [NSMutableArray arrayWithCapacity:triggerCount]; - for (int i = 0; i < triggerCount; i++) { - [self.triggers addObject:[NSNull null]]; - } - - self.addCommandTrigger.writeResponds = YES; - } - return self; -} - -- (nonnull BFTask *)programCommandsToRunOnEventAsync:(nonnull MBLEvent *)event commands:(nonnull MBLVoidHandler)block -{ - NSMutableArray *pairs = [NSMutableArray array]; - - return [[[[[[[self initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.device waitForSimulatorTurn]; - }] continueWithExecutor:[BFExecutor simulatorExecutor] withBlock:^id _Nullable(BFTask * _Nonnull task) { - if (event.commandIds.count) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't program event that has already been programmed."}]; - return [BFTask taskWithError:error]; - } - mw_event_trigger_t __block params = { 0 }; - params.source_modid = event.module.moduleInfo.moduleId; - params.source_regid = event.registerId; - params.source_index = event.index; - - [event.module.device startSimulationWithHandler:^(uint8_t module, uint8_t opcode, NSData *parameters) { - params.target_modid = module; - params.target_regid = opcode; - params.target_command_len = parameters.length; - [pairs addObject:@[[NSData dataWithBytes:¶ms length:sizeof(mw_event_trigger_t)], parameters]]; - }]; - self.activatedRegHandler = ^(id _Nullable obj, NSError * _Nullable error) { - [event.commandActivatedRegisters addObject:obj]; - }; - block(); - return nil; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [event.module.device waitForSimulatorCompletion]; - }] continueWithExecutor:[BFExecutor metaWearExecutor] withSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.activatedRegHandler = nil; - BFTask *head = [BFTask taskWithResult:nil]; - for (NSArray *pair in pairs) { - head = [[head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.addCommandTrigger writeDataAsync:pair[0]]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - MBLDataSample *obj = task.result; - uint8_t eventId = *(uint8_t *)obj.data.bytes; - [event.commandIds addObject:[NSNumber numberWithChar:eventId]]; - self.triggers[eventId] = pair[0]; - return [self.commandParameters writeDataAsync:pair[1]]; - }]; - } - return head; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self activateAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [event.module.device stopSimulation]; - return task; - }]; -} - -- (nonnull BFTask *)eraseCommandsToRunOnEventAsync:(nonnull MBLEvent *)event -{ - return [[[self deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - BFTask *head = [BFTask taskWithResult:nil]; - for (NSNumber *curId in event.commandIds) { - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.triggers[curId.charValue] = [NSNull null]; - return [self.removeCommandTrigger writeByteAsync:curId.charValue]; - }]; - } - [event.commandIds removeAllObjects]; - - for (MBLRegister *reg in event.commandActivatedRegisters) { - head = [[head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [reg deactivateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [reg deinitializeAsync]; - }]; - } - [event.commandActivatedRegisters removeAllObjects]; - return head; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self deinitializeAsync]; - }]; -} - -- (BFTask *)isStateValid -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - NSMutableArray *tasks = [NSMutableArray array]; - [tasks addObject:[BFTask taskWithResult:@YES]]; // Base case - for (int i = 0; i < self.triggers.count; i++) { - if (self.triggers[i] != [NSNull null]) { - [tasks addObject:[[self.addCommandTrigger readForcedIndexAsync:i] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - MBLDataSample *result = task.result; - NSData *actualData = result.data; - NSData *expectedData = self.triggers[i]; - if (actualData.length >= expectedData.length) { - if ([expectedData isEqualToData:[actualData subdataWithRange:NSMakeRange(0, expectedData.length)]]) { - return [BFTask taskWithResult:@YES]; - } - } - MBLLog(MBLLogLevelInfo, @"Command: Entity[%d] expected != actual (%@ != %@)", i, expectedData, actualData); - return [BFTask taskWithResult:@NO]; - }]]; - } - } - return [BFTask taskForCompletionOfAllTasksWithResults:tasks]; - }]; -} - -@end diff --git a/MetaWear/Internal/Modules/Conductance/MBLConductanceData.h b/MetaWear/Internal/Modules/Conductance/MBLConductanceData.h deleted file mode 100644 index 78a5a71..0000000 --- a/MetaWear/Internal/Modules/Conductance/MBLConductanceData.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLConductanceData.h - * MetaWear - * - * Created by Stephen Schiffli on 4/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLData+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLConductanceData : MBLData - -- (instancetype)initWithRegister:(MBLRegister *)reg channel:(uint8_t)channel; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Conductance/MBLConductanceData.m b/MetaWear/Internal/Modules/Conductance/MBLConductanceData.m deleted file mode 100644 index 646ef61..0000000 --- a/MetaWear/Internal/Modules/Conductance/MBLConductanceData.m +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLConductanceData.m - * MetaWear - * - * Created by Stephen Schiffli on 4/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLConductanceData.h" -#import "MBLNumericFormatter.h" - -@implementation MBLConductanceData - -- (instancetype)initWithRegister:(MBLRegister *)reg channel:(uint8_t)channel -{ - self = [super initWithModule:reg.module registerId:reg.registerId index:channel format:[[MBLNumericFormatter alloc] initIntWithLength:4 isSigned:NO]]; - return self; -} - -@end diff --git a/MetaWear/Internal/Modules/DataProcessor/MBLDataProcessor.h b/MetaWear/Internal/Modules/DataProcessor/MBLDataProcessor.h deleted file mode 100644 index 47f559a..0000000 --- a/MetaWear/Internal/Modules/DataProcessor/MBLDataProcessor.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLDataProcessor.h - * MetaWear - * - * Created by Stephen Schiffli on 9/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLConstants.h" -#import "MBLFilter.h" -#import "MBLEntityModule+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLDataProcessor : MBLEntityModule - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/DataProcessor/MBLDataProcessor.m b/MetaWear/Internal/Modules/DataProcessor/MBLDataProcessor.m deleted file mode 100644 index a2721d6..0000000 --- a/MetaWear/Internal/Modules/DataProcessor/MBLDataProcessor.m +++ /dev/null @@ -1,95 +0,0 @@ -/** - * MBLDataProcessor.m - * MetaWear - * - * Created by Stephen Schiffli on 9/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLDataProcessor.h" -#import "MBLRegister+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLEvent+Private.h" -#import "MBLFilter+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLDataSample.h" -#import "MBLMetaWearManager+Private.h" -#import "BFTask+MBLPrivate.h" - -@interface MBLDataProcessor () -@end - -@implementation MBLDataProcessor - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - MBLRegister *globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - MBLRegister *addFilter = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - MBLRegister *filterNotify = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - MBLRegister *removeFilter = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - MBLRegister *notificationEnable = [[MBLRegister alloc] initWithModule:self registerId:0x7 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - - int maxFilters = 8; // This was the old default - if (moduleInfo.moduleData.length) { - maxFilters = *(uint8_t *)moduleInfo.moduleData.bytes; - } - - addFilter.writeResponds = YES; - - self.globalEnable = globalEnable; - - self.addEntity = addFilter; - self.removeEntity = removeFilter; - - self.globalNotifications = filterNotify; - self.notificationEnable = notificationEnable; - - self.maxEntities = maxFilters; - } - return self; -} - -- (BFTask *)getRegister:(NSData *)data -{ - const uint8_t *bytes = data.bytes; - uint8_t registerId = bytes[1] & 0x3F; // Strip off the "[local] read bit" - // The data processer abstracts the true data source, so traverse down the linked list - if (registerId == 0x3) { - return [[self.addEntity readForcedIndexAsync:bytes[2]] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask *t) { - const uint8_t *bytes = t.result.data.bytes; - return [self.device.modules[bytes[0]] getRegister:t.result.data]; - }]; - } - return [super getRegister:data]; -} - -@end diff --git a/MetaWear/Internal/Modules/GPIO/MBLGPIO+Private.h b/MetaWear/Internal/Modules/GPIO/MBLGPIO+Private.h deleted file mode 100644 index 1e242b8..0000000 --- a/MetaWear/Internal/Modules/GPIO/MBLGPIO+Private.h +++ /dev/null @@ -1,62 +0,0 @@ -/** - * MBLGPIO+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/30/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGPIO.h" - -@class MBLGPIOPinChangeEvent; -@class MBLGPIOData; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGPIO (Private) -@property (nonatomic) MBLRegister *readAnalogAbsolute; -@property (nonatomic) MBLRegister *readAnalogRatio; -@property (nonatomic) MBLRegister *readDigital; -@property (nonatomic) MBLRegister *pinChangeSettings; -@property (nonatomic) MBLRegister *pinChangeNotification; -@property (nonatomic) MBLRegister *pinChangeNotificationEnable; - -- (BFTask *)startNotificationsOnChangeEvent:(MBLGPIOPinChangeEvent *)event; -- (BFTask *)stopNotificationsAsyncOnChangeEvent:(MBLGPIOPinChangeEvent *)event; - -- (BFTask *)configurePin:(uint8_t)pinNumber type:(MBLPinConfiguration)type; -- (BFTask *)setPin:(uint8_t)pinNumber toDigitalValue:(BOOL)on; - -- (BFTask *)performAsyncInitializationForRegister:(MBLGPIOData *)reg; -- (BFTask *)performAsyncDeinitializationForRegister:(MBLGPIOData *)reg; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/GPIO/MBLGPIOData.h b/MetaWear/Internal/Modules/GPIO/MBLGPIOData.h deleted file mode 100644 index ed46c7e..0000000 --- a/MetaWear/Internal/Modules/GPIO/MBLGPIOData.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * MBLGPIOData1.h - * MetaWear - * - * Created by Stephen Schiffli on 2/2/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLData+Private.h" -@class MBLGPIOPin; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGPIOData : MBLData - -- (instancetype)initWithRegister:(MBLRegister *)reg pin:(MBLGPIOPin *)pin format:(MBLFormat *)format identifier:(NSString *)identifier; - -- (instancetype)initWithRegister:(MBLRegister *)reg - pin:(MBLGPIOPin *)pin - format:(MBLFormat *)format - pullUp:(nullable NSNumber *)pullUp - pullDown:(nullable NSNumber *)pullDown - readDelay:(uint16_t)readDelay - identifier:(NSString *)identifier; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/GPIO/MBLGPIOData.m b/MetaWear/Internal/Modules/GPIO/MBLGPIOData.m deleted file mode 100644 index 801b57f..0000000 --- a/MetaWear/Internal/Modules/GPIO/MBLGPIOData.m +++ /dev/null @@ -1,134 +0,0 @@ -/** - * MBLGPIOData.m - * MetaWear - * - * Created by Stephen Schiffli on 2/2/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGPIOData.h" -#import "MBLRegister+Private.h" -#import "MBLNumericData+Private.h" -#import "MBLGPIOPin+Private.h" -#import "MBLGPIO+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLMetaWear+Private.h" -#import "BFTask+MBLPrivate.h" - -@interface MBLGPIOData () -@property (nonatomic, weak) MBLGPIOPin *pin; -@property (nonatomic) NSNumber *pullUp; -@property (nonatomic) NSNumber *pullDown; -@property (nonatomic) uint16_t readDelay; -@end - -@implementation MBLGPIOData - -- (instancetype)initWithRegister:(MBLRegister *)reg pin:(MBLGPIOPin *)pin format:(MBLFormat *)format identifier:(NSString *)identifier -{ - self = [super initWithModule:reg.module registerId:reg.registerId index:pin.pin format:format identifier:identifier]; - if (self) { - self.pin = pin; - } - return self; -} -- (instancetype)initWithRegister:(MBLRegister *)reg - pin:(MBLGPIOPin *)pin - format:(MBLFormat *)format - pullUp:(NSNumber *)pullUp - pullDown:(NSNumber *)pullDown - readDelay:(uint16_t)readDelay - identifier:(NSString *)identifier -{ - self = [super initWithModule:reg.module registerId:reg.registerId index:0xFF format:format identifier:identifier]; - if (self) { - self.pin = pin; - self.pullUp = pullUp; - self.pullDown = pullDown; - self.readDelay = readDelay; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - // Use the legacy code if not using pullUp or pullDown - if (!self.pullUp && !self.pullDown) { - return [super performAsyncInitialization]; - } - return [self.module.device.gpio performAsyncInitializationForRegister:self]; -} - -- (BFTask *)performAsyncDeinitialization -{ - // Use the legacy code if not using pullUp or pullDown - if (!self.pullUp && !self.pullDown) { - return [super performAsyncInitialization]; - } - return [self.module.device.gpio performAsyncDeinitializationForRegister:self]; -} - -- (NSData *)readParameters -{ - // Shortcut for older modules - if (self.module.moduleInfo.moduleRevision < 2) { - return [super readParameters]; - } - // Assert we have a valid index if using pullUp or pullDown - assert((!self.pullUp && !self.pullDown) || self.index != 0xFF); - - uint8_t readIndex = self.pin.pin; - uint8_t pullUp = self.pullUp ? self.pullUp.unsignedCharValue : 0xFF; - uint8_t pullDown = self.pullDown ? self.pullDown.unsignedCharValue : 0xFF; - uint8_t startupDelay = MIN(self.readDelay / 4, 0xFF); - uint8_t spoofedIndex = self.index; - - uint8_t data[] = { readIndex, pullUp, pullDown, startupDelay, spoofedIndex }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [NSData dataWithBytes:&data length:dataSize]; -} - -- (BFTask *)performAsyncActivation -{ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (self.pin.enablePin) { -#pragma clang diagnostic pop - [NSException raise:@"Use of deprecated function" format:@"enablePin is deprecated, please use analogRatioWithPullUp:pullDown:readDelay or analogAbsoluteWithPullUp:pullDown:readDelay instead"]; - } - return [super performAsyncActivation]; -} - -- (BFTask *)performAsyncDeactivation -{ - return [super performAsyncDeactivation]; -} - -@end diff --git a/MetaWear/Internal/Modules/GPIO/MBLGPIOPin+Private.h b/MetaWear/Internal/Modules/GPIO/MBLGPIOPin+Private.h deleted file mode 100644 index b8fa22b..0000000 --- a/MetaWear/Internal/Modules/GPIO/MBLGPIOPin+Private.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * MBLGPIOPin+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/30/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGPIOPin.h" -@class MBLGPIO; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGPIOPin (Private) - -@property (nonatomic, weak, nullable) MBLGPIO *gpio; -@property (nonatomic) uint8_t pin; - -- (instancetype)initWithModule:(MBLGPIO *)gpio pin:(uint8_t)pin featureByte:(uint8_t)featureByte; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Internal/Modules/GPIO/MBLGPIOPinChangeEvent.h b/MetaWear/Internal/Modules/GPIO/MBLGPIOPinChangeEvent.h deleted file mode 100644 index bbb4891..0000000 --- a/MetaWear/Internal/Modules/GPIO/MBLGPIOPinChangeEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLGPIOPinChangeEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 10/30/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -#import "MBLGPIO+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGPIOPinChangeEvent : MBLEvent -- (instancetype)initWithModule:(MBLGPIO *)gpio pin:(uint8_t)pin; - -@property (nonatomic) MBLPinChangeType changeType; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/GPIO/MBLGPIOPinChangeEvent.m b/MetaWear/Internal/Modules/GPIO/MBLGPIOPinChangeEvent.m deleted file mode 100644 index b960aff..0000000 --- a/MetaWear/Internal/Modules/GPIO/MBLGPIOPinChangeEvent.m +++ /dev/null @@ -1,85 +0,0 @@ -/** - * MBLGPIOPinChangeEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 10/30/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGPIOPinChangeEvent.h" -#import "MBLNumericFormatter.h" -#import "MBLMetaWear+Private.h" - -@interface MBLGPIOPinChangeEvent () -@property (nonatomic, weak) MBLGPIO *gpio; -@end - -@implementation MBLGPIOPinChangeEvent - -- (instancetype)initWithModule:(MBLGPIO *)gpio pin:(uint8_t)pin -{ - self = [super initWithModule:gpio - registerId:gpio.pinChangeNotification.registerId - index:pin - format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO] - identifier:[NSString stringWithFormat:@"pin-monitor[%d]", pin]]; - if (self) { - self.gpio = gpio; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - uint8_t data[] = { self.index, self.changeType }; - return [self.gpio.pinChangeSettings writeDataAsync:[NSData dataWithBytes:data length:2]]; -} - -- (BFTask *)performAsyncDeactivation -{ - uint8_t data[] = { self.index, 0 }; - return [self.gpio.pinChangeSettings writeDataAsync:[NSData dataWithBytes:data length:2]]; -} - -- (BFTask *)performAsyncStartNotifications -{ - return [[self.module.device.gpio startNotificationsOnChangeEvent:self] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [super performAsyncStartNotifications]; - }]; -} - -- (BFTask *)performAsyncStopNotificationsAsync -{ - return [[super performAsyncStopNotificationsAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.module.device.gpio stopNotificationsAsyncOnChangeEvent:self]; - }]; -} - -@end diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160+Private.h b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160+Private.h deleted file mode 100644 index c059854..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160+Private.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLGyroBMI160+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGyroBMI160.h" - -@interface MBLGyroBMI160 (Private) - -@end diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160AxisReadyEvent.h b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160AxisReadyEvent.h deleted file mode 100644 index 483b72e..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160AxisReadyEvent.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLGyroBMI160AxisReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLGyroBMI160; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGyroBMI160AxisReadyEvent : MBLEvent -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro axis:(uint8_t)axis; -@end - -NS_ASSUME_NONNULL_END - diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160AxisReadyEvent.m b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160AxisReadyEvent.m deleted file mode 100644 index 39bd2c7..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160AxisReadyEvent.m +++ /dev/null @@ -1,95 +0,0 @@ -/** - * MBLGyroBMI160AxisReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGyroBMI160AxisReadyEvent.h" -#import "MBLGyroBMI160Format.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLLogger.h" - -@implementation MBLGyroBMI160AxisReadyEvent - -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro axis:(uint8_t)axis -{ - NSString *identifier = nil; - MBLGyroAxis typedAxis = axis; - switch (typedAxis) { - case MBLGyroAxisX: - identifier = @"angular-velocity[0]"; - break; - case MBLGyroAxisY: - identifier = @"angular-velocity[1]"; - break; - case MBLGyroAxisZ: - identifier = @"angular-velocity[2]"; - break; - } - self = [super initWithModule:gyro registerId:0x5 format:[[MBLGyroBMI160Format alloc] initWithGyro:gyro axis:axis] identifier:identifier]; - return self; -} - -- (BFTask *)performAsyncInitialization -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - return [gyro.dataReadyEvent initializeAsync]; -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - return [gyro.dataReadyEvent deinitializeAsync]; -} - -- (BFTask *)performAsyncActivation -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - return [gyro.dataReadyEvent activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - return [gyro.dataReadyEvent deactivateAsync]; -} - -- (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - if (gyro.sampleFrequency > 200) { - MBLLog(MBLLogLevelWarning, @"[Gyro] due to Bluetooth LE bandwidth limitations, notications faster than 200Hz will result in packet loss"); - } - return [super startNotificationsWithHandlerAsync:handler]; -} - -@end diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.h b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.h deleted file mode 100644 index 9e3245c..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.h +++ /dev/null @@ -1,50 +0,0 @@ -/** - * MBLGyroBMI160DataReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -#import "MBLRegister+Private.h" -@class MBLGyroBMI160; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGyroBMI160DataReadyEvent : MBLEvent - -@property (nonatomic) MBLRegister *dataInterruptEn; - -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro; - -@end - -NS_ASSUME_NONNULL_END \ No newline at end of file diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.m b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.m deleted file mode 100644 index 19e31a9..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160DataReadyEvent.m +++ /dev/null @@ -1,82 +0,0 @@ -/** - * MBLGyroBMI160DataReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLGyroBMI160DataReadyEvent.h" -#import "MBLGyro+Private.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLGyroBMI160Format.h" -#import "MBLGyroBMI160PackedDataReadyEvent.h" -#import "MBLLogger.h" - - -@implementation MBLGyroBMI160DataReadyEvent - -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro -{ - self = [super initWithModule:gyro registerId:0x5 format:[[MBLGyroBMI160Format alloc] initWithGyro:gyro packed:NO] identifier:@"angular-velocity"]; - if (self) { - self.dataInterruptEn = [[MBLRegister alloc] initWithModule:gyro registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - // Now enable interrupts - uint8_t data[] = { 0x1, 0x0 }; - return [self.dataInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:2]]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Disable interrupts - uint8_t data[] = { 0x0, 0x1 }; - return [self.dataInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:2]]; -} - -- (BFTask *)startNotificationsWithHandlerAsync:(MBLObjectHandler)handler -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - if (gyro.packedDataReadyEvent && gyro.sampleFrequency >= 100 ) { - MBLLog(MBLLogLevelWarning, @"For high frequency streaming, use packedDataReadyEvent"); - } - return [super startNotificationsWithHandlerAsync:handler]; -} - -@end diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160Format.h b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160Format.h deleted file mode 100644 index 2ec939c..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160Format.h +++ /dev/null @@ -1,51 +0,0 @@ -/** - * MBLGyroBMI160Format.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" -@class MBLGyroBMI160; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGyroBMI160Format : MBLFormat - -@property (nonatomic, weak) MBLGyroBMI160 *gyro; -@property (nonatomic) BOOL packed; - -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro packed:(BOOL)packed; -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro axis:(uint8_t)axis; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160Format.m b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160Format.m deleted file mode 100644 index 03200a8..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160Format.m +++ /dev/null @@ -1,150 +0,0 @@ -/** - * MBLGyroBMI160Format.m - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGyroBMI160Format.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLGyroData+Private.h" -#import "MBLNumericData+Private.h" - -@implementation MBLGyroBMI160Format - -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro packed:(BOOL)packed -{ - self = [super initArrayWithElements:packed ? 9 : 3 elementSize:2 isSigned:YES]; - if (self) { - self.gyro = gyro; - self.packed = packed; - } - return self; -} - -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro axis:(uint8_t)axis; -{ - MBLGyroAxis typedAxis = axis; - switch (typedAxis) { - case MBLGyroAxisX: - self = [super initNumberWithLength:2 isSigned:YES offset:0]; - break; - case MBLGyroAxisY: - self = [super initNumberWithLength:2 isSigned:YES offset:2]; - break; - case MBLGyroAxisZ: - self = [super initNumberWithLength:2 isSigned:YES offset:4]; - break; - } - if (self) { - self.gyro = gyro; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLGyroBMI160Format *newFormat = [super copyWithZone:zone]; - newFormat.gyro = self.gyro; - newFormat.packed = self.packed; - return newFormat; -} - -- (id)singleEntryFromData:(NSData *)data date:(NSDate *)date -{ - double x = DBL_MIN, y = DBL_MIN, z = DBL_MIN; - const uint8_t *bytes = data.bytes; - double scale; - switch (self.gyro.fullScaleRange) { - case MBLGyroBMI160Range2000: - scale = 2000.0 / 32768.0; - break; - case MBLGyroBMI160Range1000: - scale = 1000.0 / 32768.0; - break; - case MBLGyroBMI160Range500: - scale = 500.0 / 32768.0; - break; - case MBLGyroBMI160Range250: - scale = 250.0 / 32768.0; - break; - case MBLGyroBMI160Range125: - scale = 125.0 / 32768.0; - break; - } - x = (double)(*(int16_t *)&bytes[0]) * scale; - if (self.type == MBLFormatTypeArray) { - y = (double)(*(int16_t *)&bytes[2]) * scale; - z = (double)(*(int16_t *)&bytes[4]) * scale; - } - - if (self.type == MBLFormatTypeArray) { - return [[MBLGyroData alloc] initWithX:x y:y z:z timestamp:date data:data]; - } else { - return [[MBLNumericData alloc] initWithNumber:[NSNumber numberWithDouble:x] timestamp:date data:data]; - } -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - if (self.packed) { - return @[[self singleEntryFromData:[data subdataWithRange:NSMakeRange(0, 6)] date:date], - [self singleEntryFromData:[data subdataWithRange:NSMakeRange(6, 6)] date:date], - [self singleEntryFromData:[data subdataWithRange:NSMakeRange(12, 6)] date:date]]; - } else { - return [self singleEntryFromData:data date:date]; - } -} - -- (NSNumber *)numberFromDouble:(double)value -{ - double scale; - switch (self.gyro.fullScaleRange) { - case MBLGyroBMI160Range2000: - scale = 2000.0 / 32768.0; - break; - case MBLGyroBMI160Range1000: - scale = 1000.0 / 32768.0; - break; - case MBLGyroBMI160Range500: - scale = 500.0 / 32768.0; - break; - case MBLGyroBMI160Range250: - scale = 250.0 / 32768.0; - break; - case MBLGyroBMI160Range125: - scale = 125.0 / 32768.0; - break; - } - return [NSNumber numberWithInt:value / scale]; -} - -@end diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.h b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.h deleted file mode 100644 index dc0a49a..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLGyroBMI160PackedDataReadyEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLGyroBMI160; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGyroBMI160PackedDataReadyEvent : MBLEvent - -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.m b/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.m deleted file mode 100644 index d8e48e2..0000000 --- a/MetaWear/Internal/Modules/Gyro/GyroBMI160/MBLGyroBMI160PackedDataReadyEvent.m +++ /dev/null @@ -1,86 +0,0 @@ -/** - * MBLGyroBMI160DataReadyEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLGyroBMI160PackedDataReadyEvent.h" -#import "MBLGyro+Private.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLGyroBMI160Format.h" - -@implementation MBLGyroBMI160PackedDataReadyEvent - -- (instancetype)initWithGyro:(MBLGyroBMI160 *)gyro; -{ - self = [super initWithModule:gyro registerId:0x7 format:[[MBLGyroBMI160Format alloc] initWithGyro:gyro packed:YES]]; - if (self) { - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - return [gyro.dataReadyEvent initializeAsync]; -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - return [gyro.dataReadyEvent deinitializeAsync]; -} - -- (BFTask *)performAsyncActivation -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - return [gyro.dataReadyEvent activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - MBLGyroBMI160 *gyro = (MBLGyroBMI160 *)self.module; - return [gyro.dataReadyEvent deactivateAsync]; -} - -- (BFTask *)startLoggingAsync -{ - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"You should only log dataReadyEvent and not packedDataReadyEvent."}]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Gyro/MBLGyro+Private.h b/MetaWear/Internal/Modules/Gyro/MBLGyro+Private.h deleted file mode 100644 index af43a7f..0000000 --- a/MetaWear/Internal/Modules/Gyro/MBLGyro+Private.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * MBLGyro+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGyro.h" -#import "MBLRegister+Private.h" -#import "MBLModuleInfo.h" -#import "BFTask+MBLPrivate.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGyro (Private) -@property (nonatomic) MBLEvent *dataReadyEvent; -@property (nonatomic) MBLEvent *packedDataReadyEvent; -@property (nonatomic) MBLEvent *xAxisReadyEvent; -@property (nonatomic) MBLEvent *yAxisReadyEvent; -@property (nonatomic) MBLEvent *zAxisReadyEvent; - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo; - -- (BFTask *)pullConfigAsync; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Gyro/MBLGyroData+Private.h b/MetaWear/Internal/Modules/Gyro/MBLGyroData+Private.h deleted file mode 100644 index 42c7ede..0000000 --- a/MetaWear/Internal/Modules/Gyro/MBLGyroData+Private.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLGyroData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGyroData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGyroData (Private) - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280PeriodicHumidityEvent.h b/MetaWear/Internal/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280PeriodicHumidityEvent.h deleted file mode 100644 index eab0769..0000000 --- a/MetaWear/Internal/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280PeriodicHumidityEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLHygrometerBME280PeriodicHumidityEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLHygrometer; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLHygrometerBME280PeriodicHumidityEvent : MBLEvent - -- (instancetype)initWithHygrometer:(MBLHygrometer *)hygrometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280PeriodicHumidityEvent.m b/MetaWear/Internal/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280PeriodicHumidityEvent.m deleted file mode 100644 index ca7c123..0000000 --- a/MetaWear/Internal/Modules/Hygrometer/HygrometerBME280/MBLHygrometerBME280PeriodicHumidityEvent.m +++ /dev/null @@ -1,71 +0,0 @@ -/** - * MBLHygrometerBME280PeriodicHumidityEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLHygrometerBME280PeriodicHumidityEvent.h" -#import "MBLHygrometer.h" -#import "MBLNumericFormatter.h" - -@interface MBLHygrometerBME280PeriodicHumidityEvent () -@property (nonatomic) MBLRegister *cyclicEnable; -@end - -@implementation MBLHygrometerBME280PeriodicHumidityEvent - -- (instancetype)initWithHygrometer:(MBLHygrometer *)hygrometer -{ - self = [super initWithModule:hygrometer registerId:0x01 format:[[MBLNumericFormatter alloc] initDoubleWithLength:4 isSigned:NO scale:1.0 / 1024.0] identifier:@"relative-humidity"]; - if (self) { - self.cyclicEnable = [[MBLRegister alloc] initWithModule:hygrometer registerId:0x03 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - // Enable cyclic mode - uint8_t data[] = { 1 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.cyclicEnable writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Disable cyclic mode - uint8_t data[] = { 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.cyclicEnable writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Hygrometer/MBLHygrometer+Private.h b/MetaWear/Internal/Modules/Hygrometer/MBLHygrometer+Private.h deleted file mode 100644 index c64477c..0000000 --- a/MetaWear/Internal/Modules/Hygrometer/MBLHygrometer+Private.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLHygrometer+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLHygrometer.h" -#import "MBLRegister+Private.h" -#import "MBLModuleInfo.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLHygrometer (Private) - -@property (nonatomic, nullable) MBLData *humidity; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/LED/MBLLED+Private.h b/MetaWear/Internal/Modules/LED/MBLLED+Private.h deleted file mode 100644 index b13bae9..0000000 --- a/MetaWear/Internal/Modules/LED/MBLLED+Private.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - * MBLGPIO+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/30/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLED.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef struct __attribute__((packed)) { - uint8_t channel; - uint8_t mode; - uint8_t on_intensity; - uint8_t off_intensity; - uint16_t time_rise; - uint16_t time_on; - uint16_t time_fall; - uint16_t time_period; - uint16_t time_offset; - uint8_t repeat_count; -} mw_led_flash_params_t; - -@interface MBLLED (Private) - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Logging/MBLLogging.h b/MetaWear/Internal/Modules/Logging/MBLLogging.h deleted file mode 100644 index 5434aba..0000000 --- a/MetaWear/Internal/Modules/Logging/MBLLogging.h +++ /dev/null @@ -1,150 +0,0 @@ -/** - * MBLLogging.h - * MetaWear - * - * Created by Stephen Schiffli on 9/17/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLModule+Private.h" -#import "MBLConstants.h" -#import -@class MBLAnonymousEvent; - -NS_ASSUME_NONNULL_BEGIN - -typedef struct __attribute__((packed)) { - uint8_t logTriggers; - uint32_t logCap; -} mw_log_module_info; - -typedef struct __attribute__((packed)) { - uint8_t triggerId:5; - uint8_t resetId:3; - uint32_t timestamp; - uint8_t data[4]; -} mw_log_entry_t; - -typedef struct __attribute__((packed)) { - uint8_t source_modid; - uint8_t source_regid; - uint8_t source_index; - uint8_t source_offset:5; - uint8_t source_datalen:2; - uint8_t valid:1; -} mw_log_trigger_t; - -static const double LOGGING_SEC_PER_TIMESTAMP = 0.00146484375; -static NSString * const kMBLStartingDatesKey = @"com.mbientlab.metawear.logStartingDates"; -// The logger timestamp rolls over at 32bits -static const uint64_t LOGGING_ROLLOVER_COUNT = 0x100000000; - -@class MBLEvent; -@interface MBLLogging : MBLModule { -@public - // Special hook points for testing - BOOL noAckMode; - BOOL printOnlyMode; - - // Real ivars - NSObject *handlerMutex; - BOOL isDownloading; - NSMutableArray *remainingHandlers; - NSMutableArray *downloadHandlers; - dispatch_queue_t logProcessingQueue; - dispatch_group_t logProcessingGroup; - BOOL newPageStarted; - NSMutableArray *rawLogEntiresToReject; - NSManagedObjectContext *managedObjectContext; - NSPersistentStoreCoordinator *persistentStoreCoordinator; -} -@property (nonatomic) NSMutableArray *triggers; -@property (nonatomic, nullable) NSNumber *currentResetId; -@property (nonatomic) uint32_t lastTimestamp; -@property (nonatomic) uint8_t lastResetId; -@property (nonatomic) uint8_t remainingTriggers; - -@property (nonatomic) MBLRegister *addLogTrigger; -@property (nonatomic) MBLRegister *removeLogTrigger; -@property (nonatomic) MBLRegister *currentTime; -@property (nonatomic) MBLRegister *logLength; -@property (nonatomic) MBLRegister *logReadout; -@property (nonatomic) MBLRegister *logReadoutNotify; -@property (nonatomic) MBLRegister *logReadoutProgress; -@property (nonatomic) MBLRegister *dropEntries; -@property (nonatomic) MBLRegister *removeAllTriggers; -@property (nonatomic) MBLRegister *circularBufferMode; -@property (nonatomic) MBLRegister *recycledPageCount; -@property (nonatomic, nullable) MBLRegister *readoutPageComplete; -@property (nonatomic, nullable) MBLRegister *readoutPageConfirm; - -- (BFTask *)startLoggingAsyncEvent:(MBLEvent *)event; -- (BFTask *)stopLoggingEvent:(MBLEvent *)event; -/** - Fetch entire contents of log from MetaWear. Executes the remainingHandler - periodically with the number of entires remaining. - @param remainingHandler Periodically called while log download is in progress - */ -- (BFTask *)downloadLogEvents:(MBLEvent *)event - remainingHandler:(MBLLogRemainingHandler)remainingHandler; - - -- (BFTask *)stopAndClearLog; -- (BFTask *)dropAllEntries; - -- (BFTask *)startReadout:(uint32_t)totalEntries; - -- (BFTask *)checkForResetAsync; - -- (BFTask *> *)queryActiveLoggersAsync; - -- (NSDate *)guessUidStartingDate:(uint8_t)resetId; -- (void)deleteAllRejectObjects; - -- (void)processRawEntry:(const mw_log_entry_t *)rawEntry; - -- (void)performRawReadOutWithHandler:(MBLErrorHandler)handler - remainingHandler:(MBLLogRemainingHandler)remainingHandler; - -@end - -@interface MBLRawLogEntry : NSManagedObject -@property (nonatomic) NSDate *timestamp; -@property (nonatomic) int16_t resetId; -@property (nonatomic) int16_t triggerId; -@property (nonatomic) NSData *data; -@end - -@interface MBLRejectEntry : NSManagedObject -@property (nonatomic) NSDate *timestamp; -@property (nonatomic) NSData *data; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Logging/MBLLogging.m b/MetaWear/Internal/Modules/Logging/MBLLogging.m deleted file mode 100644 index df8d00d..0000000 --- a/MetaWear/Internal/Modules/Logging/MBLLogging.m +++ /dev/null @@ -1,890 +0,0 @@ -/** - * MBLLogging.m - * MetaWear - * - * Created by Stephen Schiffli on 9/17/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLogging.h" -#import "MBLLoggingV0.h" -#import "MBLLoggingV1.h" -#import "MBLLoggingV2.h" -#import "MBLEvent.h" -#import "MBLDataSample+Private.h" -#import "MBLRegister+Private.h" -#import "MBLEvent+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLNumericData.h" -#import "MBLConstants+Private.h" -#import "MBLMetaWearManager+Private.h" -#import -#import -#import "BFTask+MBLPrivate.h" -#import "MBLLogger.h" -#import "MBLAnonymousEvent+Private.h" - -typedef struct __attribute__((packed)) { - uint8_t logTriggers; - uint16_t logCap; -} mw_log_module_info_old; - -typedef struct __attribute__((packed)) { - uint32_t persentTime; - uint8_t resetId; -} mw_log_current_time; - - -@implementation MBLRawLogEntry -@dynamic timestamp; -@dynamic resetId; -@dynamic triggerId; -@dynamic data; -@end - -@implementation MBLRejectEntry -@dynamic timestamp; -@dynamic data; -@end - - -@implementation MBLLogging - -+ (instancetype)objectWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - if (moduleInfo.moduleRevision == 2) { - return [[MBLLoggingV2 alloc] initWithDevice:device moduleInfo:moduleInfo]; - } else if (moduleInfo.moduleRevision == 1) { - return [[MBLLoggingV1 alloc] initWithDevice:device moduleInfo:moduleInfo]; - } else { - return [[MBLLoggingV0 alloc] initWithDevice:device moduleInfo:moduleInfo]; - } -} - -- (void)sharedInit -{ - handlerMutex = [[NSObject alloc] init]; - remainingHandlers = [NSMutableArray array]; - downloadHandlers = [NSMutableArray array]; - logProcessingQueue = dispatch_queue_create("com.mbientlab.metawear.logProcessingQueue", DISPATCH_QUEUE_CONCURRENT); - logProcessingGroup = dispatch_group_create(); - - NSString *filename = [[MBLMetaWearManager sharedManager] logFilename:[self.device.identifier.UUIDString stringByAppendingString:@"RawEntries.sqlite3"]]; - NSURL *storeURL = [NSURL fileURLWithPath:filename isDirectory:NO]; - NSError *error; - persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; - - // Allow inferred migration from the original version of the application. - NSDictionary *options = @{ NSMigratePersistentStoresAutomaticallyOption : @YES, - NSInferMappingModelAutomaticallyOption : @YES -#if TARGET_OS_IOS || TARGET_OS_TV - , NSPersistentStoreFileProtectionKey : NSFileProtectionCompleteUntilFirstUserAuthentication }; -#else - }; -#endif - - if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { - /* - Replace this implementation with code to handle the error appropriately. - - abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. - - Typical reasons for an error here include: - * The persistent store is not accessible; - * The schema for the persistent store is incompatible with current managed object model. - Check the error message to determine what the actual problem was. - - - If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory. - - If you encounter schema incompatibility errors during development, you can reduce their frequency by: - * Simply deleting the existing store: - [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil] - - * Performing automatic lightweight migration by passing the following dictionary as the options parameter: - @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} - - Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details. - - */ - NSLog(@"Unresolved error %@, %@", error, [error userInfo]); - abort(); - } - - managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; - [managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator]; -} - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - [self sharedInit]; - - uint8_t triggerCount = 8; // This was the old default - if (moduleInfo.moduleData.length) { - triggerCount = *(uint8_t *)moduleInfo.moduleData.bytes; - if (moduleInfo.moduleRevision >= 1) { - mw_log_module_info *info = (mw_log_module_info *)moduleInfo.moduleData.bytes; - MBLLog(MBLLogLevelDebug, @"Log Capacity: %d", info->logCap); - } else { - mw_log_module_info_old *info = (mw_log_module_info_old *)moduleInfo.moduleData.bytes; - MBLLog(MBLLogLevelDebug, @"Log Capacity: %d", info->logCap); - } - } - - self.triggers = [NSMutableArray arrayWithCapacity:triggerCount]; - for (int i = 0; i < triggerCount; i++) { - [self.triggers addObject:[NSNull null]]; - } - self.lastTimestamp = 0; - self.lastResetId = 0xFF; - self.remainingTriggers = triggerCount; - - self.globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.addLogTrigger = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - self.removeLogTrigger = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[MBLFormat writeOnly]]; - self.currentTime = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLFormat alloc] initEncodedDataWithLength:5]]; - self.logReadoutNotify = [[MBLRegister alloc] initWithModule:self registerId:0x7 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - self.dropEntries = [[MBLRegister alloc] initWithModule:self registerId:0x9 format:[MBLFormat writeOnly]]; - self.removeAllTriggers = [[MBLRegister alloc] initWithModule:self registerId:0xA format:[MBLFormat writeOnly]]; - self.circularBufferMode = [[MBLRegister alloc] initWithModule:self registerId:0xB format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.recycledPageCount = [[MBLRegister alloc] initWithModule:self registerId:0xC format:[[MBLNumericFormatter alloc] initIntWithLength:2 isSigned:NO]]; - - self.removeAllTriggers.needsResponse = YES; // Give some time for entries to be dropped before continuing - self.addLogTrigger.writeResponds = YES; - } - return self; -} - -- (BFTask *)queryActiveLoggersAsync -{ - NSMutableDictionary *eventByHeader = [NSMutableDictionary dictionary]; - BFTask *head = [BFTask taskWithResult:nil]; - for (int i = 0; i < self.triggers.count; i++) { - NSData __block *header = nil; - head = [[[head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.addLogTrigger readForcedIndexAsync:i]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - MBLDataSample *result = t.result; - if (result.data.length >= 4) { - const mw_log_trigger_t *params = result.data.bytes; - header = [result.data subdataWithRange:NSMakeRange(0, 3)]; - id sourceMod = self.device.modules[params->source_modid]; - if ([sourceMod isKindOfClass:[MBLModule class]]) { - return [sourceMod getRegister:result.data]; - } - } - return nil; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - MBLRegister *reg = t.result; - if (reg) { - MBLAnonymousEvent *event = eventByHeader[header]; - if (!event) { - event = [[MBLAnonymousEvent alloc] initWithRegister:reg]; - eventByHeader[header] = event; - } - [event.loggingIds addObject:[NSNumber numberWithChar:i]]; - } - return nil; - }]; - } - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [BFTask taskWithResult:[eventByHeader allValues]]; - }]; - return head; -} - -- (id)awakeAfterFastCoding -{ - [self sharedInit]; - return self; -} - -- (BFTask *)startLoggingAsyncEvent:(MBLEvent *)event -{ - return [[[self initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - if (event.loggingIds.count) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"Can't log event that is already logging."}]; - return [BFTask taskWithError:error]; - } - if (self.remainingTriggers < ceil((double)event.format.length / 4.0)) { - NSError *error = [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorInsufficientMemory - userInfo:@{NSLocalizedDescriptionKey : [NSString stringWithFormat:@"MetaWear out of memory, can't perform action. Reset the MetaWear and use no more than %lu log entries", (unsigned long)self.triggers.count]}]; - return [BFTask taskWithError:error]; - } - BFTask *head = [BFTask taskWithResult:nil]; - for (int length = event.format.length, offset = event.format.offset; length > 0; length -= 4, offset += 4) { - mw_log_trigger_t params = {0}; - params.source_modid = event.module.moduleInfo.moduleId; - params.source_regid = event.registerId; - params.source_index = event.index; - params.source_offset = offset; - if (length > 4) { - params.source_datalen = 3; - } else { - params.source_datalen = length - 1; - } - - NSData *paramData = [NSData dataWithBytes:¶ms length:sizeof(mw_log_trigger_t)]; - self.remainingTriggers--; - head = [[head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.addLogTrigger writeDataAsync:paramData]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - MBLDataSample *obj = task.result; - uint8_t logId = *(uint8_t *)obj.data.bytes; - [event.loggingIds addObject:[NSNumber numberWithChar:logId]]; - self.triggers[logId] = paramData; - return nil; - }]; - } - return head; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self activateAsync]; - }]; -} - -- (BFTask *)stopLoggingEvent:(MBLEvent *)event -{ - return [[[self deactivateAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - BFTask *head = [BFTask taskWithResult:nil]; - for (NSNumber *curId in event.loggingIds) { - head = [head continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.remainingTriggers++; - self.triggers[curId.charValue] = [NSNull null]; - return [self.removeLogTrigger writeByteAsync:curId.charValue]; - }]; - } - return head; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self deinitializeAsync]; - }]; -} - -- (BFTask *)downloadLogEvents:(MBLEvent *)event - remainingHandler:(MBLLogRemainingHandler)remainingHandler -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - [self performRawReadOutWithHandler:^(NSError *error) { - if (error) { - [source trySetError:error]; - dispatch_group_leave(logProcessingGroup); - return; - } - - dispatch_async([MBLConstants metaWearQueue], ^{ - // TODO: Figure out how to track this better - if (!event.loggingIds.count) { - [source trySetResult:@[]]; - dispatch_group_leave(logProcessingGroup); - return; - } - - NSArray *loggingIds = [event.loggingIds copy]; - // Grab the raw entries based on the logging id of this event - [self entriesForTriggerId:[loggingIds[0] intValue] handler:^(NSArray * _Nullable rawEntries, NSError * _Nullable error) { - if (error) { - [source trySetError:error]; - dispatch_group_leave(logProcessingGroup); - return; - } - // Initialize the final log, this will contain all the properly formated data objects - NSMutableArray *log = [NSMutableArray arrayWithCapacity:rawEntries.count]; - if (loggingIds.count == 1) { - // Fast path if we only need the one entry - for (MBLRawLogEntry *rawEntry in rawEntries) { - NSData *data = [rawEntry.data subdataWithRange:NSMakeRange(0, event.format.length)]; - [log addObject:[event.format entryFromData:data date:rawEntry.timestamp]]; - } - [self deleteObjects:@[rawEntries]]; - - [source trySetResult:log]; - dispatch_group_leave(logProcessingGroup); - } else if (loggingIds.count > 1) { - // Longer path to merge different logging id's into a single object - - // The overal idea here is that we get array of all the raw entries - // then work backwards merging the data together. We do backwards - // because the timestamps tend to line up better than we, althought - // we could do an even more advanced timestamp matching... - - // Get an array or array to hold all the reverse enumerators - NSMutableArray *allRawEntries = [NSMutableArray array]; - NSMutableArray *rawEntriesToDelete = [NSMutableArray array]; - [allRawEntries addObject:rawEntries.reverseObjectEnumerator]; - - NSArray *additionalLoggingIds = [loggingIds subarrayWithRange:NSMakeRange(1, loggingIds.count - 1)]; - for (NSNumber *uid in additionalLoggingIds) { - // Fetch the arrays for all the other id's - [self entriesForTriggerId:uid.intValue handler:^(NSArray * _Nullable rawEntries, NSError * _Nullable error) { - if (error) { - [source trySetError:error]; - dispatch_group_leave(logProcessingGroup); - return; - } - [rawEntriesToDelete addObject:rawEntries]; - [allRawEntries addObject:rawEntries.reverseObjectEnumerator]; - if (uid == [additionalLoggingIds lastObject]) { - // Now we have all arrays so perform the merge - BOOL moreEntries = YES; - while (moreEntries) { - // Loop through and pull out entries until the first array empties - NSMutableData *completeData = [NSMutableData data]; - NSDate *timestamp = nil; - for (NSEnumerator *enumerator in allRawEntries) { - MBLRawLogEntry *cur = [enumerator nextObject]; - if (cur) { - if (!timestamp) { - timestamp = cur.timestamp; - } - NSData *additionalData = [cur.data subdataWithRange:NSMakeRange(0, MIN(event.format.length - completeData.length, 4))]; - [completeData appendData:additionalData]; - } else { - moreEntries = NO; - break; - } - } - if (moreEntries) { - assert(timestamp); - [log insertObject:[event.format entryFromData:completeData date:timestamp] atIndex:0]; - } - } - - [self deleteObjects:rawEntriesToDelete]; - [source trySetResult:log]; - dispatch_group_leave(logProcessingGroup); - } - }]; - } - } - }]; - }); - } remainingHandler:remainingHandler]; - return source.task; -} - -- (BFTask *)stopAndClearLog -{ - return [[[self.removeAllTriggers writeDataAsync:nil] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self dropAllEntries]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - [self deleteAllObjects]; - [self deleteAllRejectObjects]; - // Since all old log entires are gone and we are about to reset we should - // purge out all the old log starting dates - for (int i = 0; i < self.device.nonVolatileState.logStartingDates.count; i++) { - self.device.nonVolatileState.logStartingDates[i] = [NSNull null]; - } - // Remove all stale junk - for (int i = 0; i < self.triggers.count; i++) { - self.triggers[i] = [NSNull null]; - } - self.remainingTriggers = self.triggers.count; - return nil; - }]; -} - -- (BFTask *)dropAllEntries -{ - [NSException raise:@"Error" format:@"Please instantiate derived class, this is implemented there"]; - return nil; -} - -- (BFTask *)startReadout:(uint32_t)totalEntries -{ - [NSException raise:@"Error" format:@"Please instantiate derived class, this is implemented there"]; - return nil; -} - -- (void)performRawReadOutWithHandler:(MBLErrorHandler)handler - remainingHandler:(MBLLogRemainingHandler)remainingHandler -{ - @synchronized(handlerMutex) { - if (handler) { - [downloadHandlers addObject:handler]; - } - if (remainingHandler) { - MBLLogRemainingHandler handlerOnDispatch = ^(uint32_t totalEntries, uint32_t remainingEntries) { - [[MBLMetaWearManager dispatchQueue] addOperationWithBlock:^{ - remainingHandler(totalEntries, remainingEntries); - }]; - }; - [remainingHandlers addObject:handlerOnDispatch]; - } - if (!isDownloading) { - isDownloading = YES; - [self rawReadOut]; - } - } -} - -- (void)rawReadOut -{ - [[self.logLength readAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - MBLNumericData *data = task.result; - NSError *error = task.error; - - if (error) { - [self rawReadOutFinishedWithError:error]; - return nil; - } - - uint32_t totalEntries = data.value.unsignedIntValue; - // If nothing to read then we are done here! - if (totalEntries == 0) { - [self rawReadOutFinishedWithError:nil]; - return nil; - } - // Initial callback for the progress handlers - @synchronized(handlerMutex) { - for (MBLLogRemainingHandler remainingHandler in remainingHandlers) { - remainingHandler(totalEntries, totalEntries); - } - } - [[[[[self.logReadoutProgress startNotificationsWithExecutorAsync:[BFExecutor metaWearExecutor] withHandler:^(MBLNumericData *data, NSError *error) { - if (error) { - [self rawReadOutFinishedWithError:error]; - return; - } - - uint32_t remainingEntries = data.value.unsignedIntValue; - @synchronized(handlerMutex) { - for (MBLLogRemainingHandler remainingHandler in remainingHandlers) { - remainingHandler(totalEntries, remainingEntries); - } - } - if (remainingEntries == 0) { - [[[[self.logReadoutProgress stopNotificationsAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.logReadoutNotify stopNotificationsAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.readoutPageComplete stopNotificationsAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [self deleteAllRejectObjects]; // TODO: BFTask this - [self rawReadOutFinishedWithError:task.error]; - return task; - }]; - } - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.logReadoutNotify startNotificationsWithExecutorAsync:[BFExecutor metaWearExecutor] withHandler:^(MBLDataSample *obj, NSError *error) { - if (error) { - return; - } - if (obj.data.length >= 9) { - const uint8_t *bytes = (const uint8_t *)obj.data.bytes; - [self processRawEntry:(const mw_log_entry_t *)bytes]; - if (obj.data.length == 18) { - [self processRawEntry:(const mw_log_entry_t *)(bytes + 9)]; - } - } - }]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.readoutPageComplete startNotificationsWithExecutorAsync:[BFExecutor metaWearExecutor] withHandler:^(id _Nullable obj, NSError * _Nullable error) { - if (error) { - return; - } - newPageStarted = YES; - [self saveLogAsync:YES]; - if (noAckMode) { // GNARLY TEST CODE!!! - [self.logReadoutProgress stopNotificationsAsync]; - [self.logReadoutNotify stopNotificationsAsync]; - [self.readoutPageComplete stopNotificationsAsync]; - [self rawReadOutFinishedWithError:nil]; - return; - } - [self.readoutPageConfirm writeDataAsync:nil]; - }]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - if (self.moduleInfo.moduleRevision >= 2) { - rawLogEntiresToReject = [self getAllRejectEntries]; - newPageStarted = YES; - } else { - self.lastTimestamp = 0; - } - - return [self startReadout:totalEntries]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Since log downloads take a while, let's save state here - return [self.device synchronizeAsync]; - }]; - return nil; - }]; -} - -- (void)rawReadOutFinishedWithError:(NSError *)error -{ - @synchronized(handlerMutex) { - if (error) { - [self dropEntriesSinceSave]; - self.lastTimestamp = 0; - } - [remainingHandlers removeAllObjects]; - for (MBLErrorHandler handler in downloadHandlers) { - dispatch_group_enter(logProcessingGroup); - dispatch_async(logProcessingQueue, ^{ - handler(error); - }); - } - [downloadHandlers removeAllObjects]; - - dispatch_group_notify(logProcessingGroup, logProcessingQueue, ^{ - @synchronized(handlerMutex) { - [self saveLogAsync:NO]; - // Now that processing is finished, if someone else is waiting for - // entries, kick off another download, otherwise put her to sleep. - if (downloadHandlers.count || remainingHandlers.count) { - [self rawReadOut]; - } else { - isDownloading = NO; - } - } - }); - } -} - -- (BFTask *)isStateValid -{ - return [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - NSMutableArray *tasks = [NSMutableArray array]; - [tasks addObject:[BFTask taskWithResult:@YES]]; // Base case - for (int i = 0; i < self.triggers.count; i++) { - if (self.triggers[i] != [NSNull null]) { - [tasks addObject:[[self.addLogTrigger readForcedIndexAsync:i] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - MBLDataSample *result = task.result; - NSData *actualData = result.data; - NSData *expectedData = self.triggers[i]; - if (actualData.length >= expectedData.length) { - if ([expectedData isEqualToData:[actualData subdataWithRange:NSMakeRange(0, expectedData.length)]]) { - return [BFTask taskWithResult:@YES]; - } - } - MBLLog(MBLLogLevelInfo, @"Logging: Entity[%d] expected != actual (%@ != %@)", i, expectedData, actualData); - return [BFTask taskWithResult:@NO]; - }]]; - } - } - return [BFTask taskForCompletionOfAllTasksWithResults:tasks]; - }]; -} - -- (BFTask *)checkForResetAsync; -{ - return [[self.currentTime readAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - MBLDataSample *timeData = task.result; - const mw_log_current_time *info = (const mw_log_current_time *)timeData.data.bytes; - BOOL didReset = NO; - BOOL firstLaunch = NO; - if (self.currentResetId) { - if (self.currentResetId.unsignedCharValue != info->resetId) { - didReset = YES; - } - } else { - firstLaunch = YES; - } - // If we did reset, then guess any missed id starting times - if (didReset) { - uint8_t prevUid = self.currentResetId.unsignedCharValue; - // Extra fun check to make sure any missed ID's are guessed to our best effort - for (uint8_t guessId = (prevUid + 1) & LOGGING_RESET_UIDS_MASK; guessId != info->resetId; guessId = (guessId + 1) & LOGGING_RESET_UIDS_MASK) { - [self guessUidStartingDate:guessId]; - } - } - // Update the startingDates array if needed - if (firstLaunch || didReset) { - self.currentResetId = [NSNumber numberWithUnsignedChar:info->resetId]; - uint32_t currentTs = info->persentTime; - uint8_t resetId = info->resetId; - NSTimeInterval intervalSinceZero = currentTs * LOGGING_SEC_PER_TIMESTAMP * -1; - // Safe because we are on the MetaWear Queue - self.device.nonVolatileState.logStartingDates[resetId] = [[NSDate date] dateByAddingTimeInterval:intervalSinceZero]; - } - MBLLog(MBLLogLevelInfo, @"%@Reset-Uid: %d", didReset ? @"[RESET OCCURED] " : @"", info->resetId); - return [NSNumber numberWithBool:didReset]; - }]; -} - -#pragma mark - Log Recovery - -- (void)processRawEntry:(const mw_log_entry_t *)rawEntry -{ - assert([MBLConstants isMetaWearQueue]); - if (printOnlyMode) { - MBLLog(MBLLogLevelInfo, @"[%d] %d:%d - %@", rawEntry->triggerId, rawEntry->resetId, rawEntry->timestamp, [NSData dataWithBytes:rawEntry->data length:4]); - return; - } - - // No need to reject so process that entry! - uint32_t entryTs = rawEntry->timestamp; - uint8_t resetId = rawEntry->resetId; - uint8_t triggerId = rawEntry->triggerId; - NSData *data = [NSData dataWithBytes:rawEntry->data length:4]; - NSDate __block *date = nil; - date = self.device.nonVolatileState.logStartingDates[resetId]; - if ([[NSNull null] isEqual:date]) { - MBLLog(MBLLogLevelError, @"Timestamp error, please call setConfiguration:nil on the MBLMetaWear object to reset log"); - date = [NSDate dateWithTimeIntervalSince1970:0]; - self.device.nonVolatileState.logStartingDates[resetId] = date; - } - - // If we roll over, then advance the starting date - if (entryTs < self.lastTimestamp) { - MBLLog(MBLLogLevelInfo, @"***Timestamp Rolling Over***"); - date = [date dateByAddingTimeInterval:LOGGING_SEC_PER_TIMESTAMP * LOGGING_ROLLOVER_COUNT]; - self.device.nonVolatileState.logStartingDates[resetId] = date; - } - // Update our tracking variables - self.lastTimestamp = entryTs; - self.lastResetId = resetId; - - // Convert to real time - NSDate *timestamp = [date dateByAddingTimeInterval:entryTs * LOGGING_SEC_PER_TIMESTAMP]; - - // Now that it's processed, commit it to the database - [managedObjectContext performBlock:^{ - MBLRawLogEntry *entry = (MBLRawLogEntry *)[NSEntityDescription insertNewObjectForEntityForName:@"MBLRawLogEntry" inManagedObjectContext:managedObjectContext]; - entry.timestamp = timestamp; - entry.resetId = resetId; - entry.triggerId = triggerId; - entry.data = data; - }]; -} - -- (void)entriesForTriggerId:(uint8_t)triggerId handler:(MBLArrayErrorHandler)handler -{ - [managedObjectContext performBlock:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRawLogEntry"]; - fetchRequest.predicate = [NSPredicate predicateWithFormat:@"triggerId == %d", triggerId]; - fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES]]; - - NSError *error; - NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; - if (error) { - MBLLog(MBLLogLevelError, @"Unable to execute fetch request.\n%@", error); - } - if (handler) { - handler(results, error); - } - }]; -} - -- (void)dropEntriesSinceSave -{ - [managedObjectContext performBlock:^{ - [managedObjectContext rollback]; - MBLLog(MBLLogLevelInfo, @"Rollback"); - }]; -} - -- (void)deleteAllRejectObjects -{ - [managedObjectContext performBlock:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRejectEntry"]; - - NSError *error; - NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; - if (error) { - MBLLog(MBLLogLevelError, @"Unable to execute fetch request.\n%@", error); - } else { - for (MBLRawLogEntry *entry in results) { - [managedObjectContext deleteObject:entry]; - } - MBLLog(MBLLogLevelInfo, @"Delete reject entires"); - } - }]; - // Make sure the save happens right after all these deletes - [self saveLogAsync:YES]; -} - -- (void)deleteAllObjects -{ - [managedObjectContext performBlock:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRawLogEntry"]; - - NSError *error; - NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; - if (error) { - MBLLog(MBLLogLevelError, @"Unable to execute fetch request.\n%@", error); - } else { - for (MBLRawLogEntry *entry in results) { - [managedObjectContext deleteObject:entry]; - } - MBLLog(MBLLogLevelInfo, @"Delete all objects"); - } - }]; - // Make sure the save happens right after all these deletes - [self saveLogAsync:YES]; -} - -- (void)deleteObjects:(NSArray *)rawEntriesToDelete -{ - [managedObjectContext performBlock:^{ - for (NSArray *array in rawEntriesToDelete) { - for (MBLRawLogEntry *entry in array) { - [managedObjectContext deleteObject:entry]; - } - } - }]; - // Make sure the save happens right after all these deletes - [self saveLogAsync:YES]; -} - -- (void)saveLogAsync:(BOOL)async -{ - if (async) { - [managedObjectContext performBlock:^{ - NSError *error; - [managedObjectContext save:&error]; - if (error) { - MBLLog(MBLLogLevelError, @"Unable to save.\n%@", error); - } - MBLLog(MBLLogLevelInfo, @"Save Log Async"); - }]; - } else { - [managedObjectContext performBlockAndWait:^{ - NSError *error; - [managedObjectContext save:&error]; - if (error) { - MBLLog(MBLLogLevelError, @"Unable to save.\n%@", error); - } - MBLLog(MBLLogLevelInfo, @"Save Log Sync"); - }]; - } -} - -- (NSDate *)guessUidStartingDate:(uint8_t)resetId -{ - MBLLog(MBLLogLevelWarning, @"Multiple unexpected resets, log timestamps are estimated"); - NSDate __block *date = nil; - [managedObjectContext performBlockAndWait:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRawLogEntry"]; - fetchRequest.predicate = [NSPredicate predicateWithFormat:@"resetId == %d", (resetId - 1) & LOGGING_RESET_UIDS_MASK]; - fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:NO]]; - fetchRequest.fetchLimit = 1; - fetchRequest.includesPropertyValues = NO; - - NSError *error; - NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; - if (error) { - MBLLog(MBLLogLevelError, @"Unable to execute fetch request.\n%@", error); - } else { - MBLRawLogEntry *obj = [results firstObject]; - date = [obj.timestamp dateByAddingTimeInterval:LOGGING_SEC_PER_TIMESTAMP]; - } - }]; - return date; -} - -- (NSMutableArray *)getAllRejectEntries -{ - NSMutableArray __block *entries = nil; - [managedObjectContext performBlockAndWait:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRejectEntry"]; - fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES]]; - - NSError *error; - NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; - if (error) { - MBLLog(MBLLogLevelError, @"Unable to execute fetch request.\n%@", error); - } else { - entries = [results mutableCopy]; - } - }]; - return entries.count ? entries : nil; -} - -#pragma mark - Core Data stack - -- (NSManagedObjectModel *)managedObjectModel -{ - static NSManagedObjectModel *_managedObjectModel = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - _managedObjectModel = [[NSManagedObjectModel alloc] init]; - - // create the entity - NSEntityDescription *rawLogEntity = [[NSEntityDescription alloc] init]; - rawLogEntity.name = @"MBLRawLogEntry"; - [rawLogEntity setManagedObjectClassName:@"MBLRawLogEntry"]; - - // create the attributes - NSAttributeDescription *timestampAttribute = [[NSAttributeDescription alloc] init]; - timestampAttribute.name = @"timestamp"; - timestampAttribute.attributeType = NSDateAttributeType; - timestampAttribute.indexed = YES; - - NSAttributeDescription *resetIdAttribute = [[NSAttributeDescription alloc] init]; - resetIdAttribute.name = @"resetId"; - resetIdAttribute.attributeType = NSInteger16AttributeType; - resetIdAttribute.indexed = YES; - - NSAttributeDescription *logIdAttribute = [[NSAttributeDescription alloc] init]; - logIdAttribute.name = @"triggerId"; - logIdAttribute.attributeType = NSInteger16AttributeType; - logIdAttribute.indexed = YES; - - NSAttributeDescription *dataAttribute = [[NSAttributeDescription alloc] init]; - dataAttribute.name = @"data"; - dataAttribute.attributeType = NSBinaryDataAttributeType; - dataAttribute.indexed = NO; - - // add attributes to entity - rawLogEntity.properties = @[timestampAttribute, resetIdAttribute, logIdAttribute, dataAttribute]; - - - // create the entity - NSEntityDescription *rejectBufferEntity = [[NSEntityDescription alloc] init]; - rejectBufferEntity.name = @"MBLRejectEntry"; - [rejectBufferEntity setManagedObjectClassName:@"MBLRejectEntry"]; - - // create the attributes - NSAttributeDescription *rejectTimestampAttribute = [[NSAttributeDescription alloc] init]; - rejectTimestampAttribute.name = @"timestamp"; - rejectTimestampAttribute.attributeType = NSDateAttributeType; - rejectTimestampAttribute.indexed = YES; - - NSAttributeDescription *rejectDataAttribute = [[NSAttributeDescription alloc] init]; - rejectDataAttribute.name = @"data"; - rejectDataAttribute.attributeType = NSBinaryDataAttributeType; - rejectDataAttribute.indexed = NO; - - // add attributes to entity - rejectBufferEntity.properties = @[rejectTimestampAttribute, rejectDataAttribute]; - - - // add entity to model - _managedObjectModel.entities = @[rawLogEntity, rejectBufferEntity]; - }); - return _managedObjectModel; -} - -@end diff --git a/MetaWear/Internal/Modules/Logging/MBLLoggingV0.h b/MetaWear/Internal/Modules/Logging/MBLLoggingV0.h deleted file mode 100644 index 960d64e..0000000 --- a/MetaWear/Internal/Modules/Logging/MBLLoggingV0.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLLoggingV0.h - * MetaWear - * - * Created by Stephen Schiffli on 8/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLogging.h" - -@interface MBLLoggingV0 : MBLLogging - -@end diff --git a/MetaWear/Internal/Modules/Logging/MBLLoggingV0.m b/MetaWear/Internal/Modules/Logging/MBLLoggingV0.m deleted file mode 100644 index 5bebd2b..0000000 --- a/MetaWear/Internal/Modules/Logging/MBLLoggingV0.m +++ /dev/null @@ -1,76 +0,0 @@ -/** - * MBLLoggingV0.m - * MetaWear - * - * Created by Stephen Schiffli on 8/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLoggingV0.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" - -@implementation MBLLoggingV0 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.logLength = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLNumericFormatter alloc] initIntWithLength:2 isSigned:NO]]; - self.logReadout = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:4]]; - self.logReadoutProgress = [[MBLRegister alloc] initWithModule:self registerId:0x8 format:[[MBLNumericFormatter alloc] initIntWithLength:2 isSigned:NO]]; - } - return self; -} - -- (BFTask *)dropAllEntries -{ - uint16_t count = 0xFFFF; - return [self.dropEntries writeDataAsync:[NSData dataWithBytes:&count length:2]]; -} - -- (BFTask *)startReadout:(uint32_t)totalEntries -{ - NSMutableData *params = [NSMutableData dataWithBytes:&totalEntries length:2]; - uint16_t delta; - if (totalEntries > 2000) { - delta = totalEntries / 100; - } else if (totalEntries > 1000) { - delta = totalEntries / 10; - } else if (totalEntries > 100) { - delta = totalEntries / 4; - } else { - delta = UINT16_MAX; - } - [params appendBytes:&delta length:2]; - return [self.logReadout writeDataAsync:params]; -} - -@end diff --git a/MetaWear/Internal/Modules/Logging/MBLLoggingV1.h b/MetaWear/Internal/Modules/Logging/MBLLoggingV1.h deleted file mode 100644 index 95322d6..0000000 --- a/MetaWear/Internal/Modules/Logging/MBLLoggingV1.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLLoggingV1.h - * MetaWear - * - * Created by Stephen Schiffli on 8/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLogging.h" - -@interface MBLLoggingV1 : MBLLogging - -@end diff --git a/MetaWear/Internal/Modules/Logging/MBLLoggingV1.m b/MetaWear/Internal/Modules/Logging/MBLLoggingV1.m deleted file mode 100644 index 8c11fdf..0000000 --- a/MetaWear/Internal/Modules/Logging/MBLLoggingV1.m +++ /dev/null @@ -1,76 +0,0 @@ -/** - * MBLLoggingV1.m - * MetaWear - * - * Created by Stephen Schiffli on 8/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLoggingV1.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" - -@implementation MBLLoggingV1 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.logLength = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLNumericFormatter alloc] initIntWithLength:4 isSigned:NO]]; - self.logReadout = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:8]]; - self.logReadoutProgress = [[MBLRegister alloc] initWithModule:self registerId:0x8 format:[[MBLNumericFormatter alloc] initIntWithLength:4 isSigned:NO]]; - } - return self; -} - -- (BFTask *)dropAllEntries -{ - uint32_t count = 0xFFFFFFFF; - return [self.dropEntries writeDataAsync:[NSData dataWithBytes:&count length:4]]; -} - -- (BFTask *)startReadout:(uint32_t)totalEntries -{ - NSMutableData *params = [NSMutableData dataWithBytes:&totalEntries length:4]; - uint32_t delta; - if (totalEntries > 2000) { - delta = totalEntries / 100; - } else if (totalEntries > 1000) { - delta = totalEntries / 10; - } else if (totalEntries > 100) { - delta = totalEntries / 4; - } else { - delta = UINT32_MAX; - } - [params appendBytes:&delta length:4]; - return [self.logReadout writeDataAsync:params]; -} - -@end diff --git a/MetaWear/Internal/Modules/Logging/MBLLoggingV2.h b/MetaWear/Internal/Modules/Logging/MBLLoggingV2.h deleted file mode 100644 index d1bbb5f..0000000 --- a/MetaWear/Internal/Modules/Logging/MBLLoggingV2.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLLoggingV2.h - * MetaWear - * - * Created by Stephen Schiffli on 11/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLogging.h" - -@interface MBLLoggingV2 : MBLLogging - -@end diff --git a/MetaWear/Internal/Modules/Logging/MBLLoggingV2.m b/MetaWear/Internal/Modules/Logging/MBLLoggingV2.m deleted file mode 100644 index adb7ec2..0000000 --- a/MetaWear/Internal/Modules/Logging/MBLLoggingV2.m +++ /dev/null @@ -1,197 +0,0 @@ -/** - * MBLLoggingV2.m - * MetaWear - * - * Created by Stephen Schiffli on 11/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLLoggingV2.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLNumericData+Private.h" -#import "MBLConstants+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLLogger.h" - -@implementation MBLLoggingV2 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.logLength = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLNumericFormatter alloc] initIntWithLength:4 isSigned:NO]]; - self.logReadout = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:8]]; - self.logReadoutProgress = [[MBLRegister alloc] initWithModule:self registerId:0x8 format:[[MBLNumericFormatter alloc] initIntWithLength:4 isSigned:NO]]; - - self.readoutPageComplete = [[MBLRegister alloc] initWithModule:self registerId:0xD format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.readoutPageConfirm = [[MBLRegister alloc] initWithModule:self registerId:0xE format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - } - return self; -} - -- (BFTask *)dropAllEntries -{ - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - [[self.logLength readAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.error) { - [source trySetError:task.error]; - return nil; - } - MBLNumericData *data = task.result; - uint32_t totalEntries = data.value.unsignedIntValue; - // If nothing to read then we are done here! - if (totalEntries == 0) { - [source trySetResult:@YES]; - return nil; - } - // When droping entires, we get a readoutPageComplete notification - // when it completes, no need to ack the message - [[self.readoutPageComplete startNotificationsWithExecutorAsync:[BFExecutor metaWearExecutor] withHandler:^(id _Nullable obj, NSError * _Nullable error) { - if (error) { - [source trySetError:error]; - return; - } - [[self.readoutPageComplete stopNotificationsAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.error) { - [source trySetError:task.error]; - } else { - [source trySetResult:@YES]; - } - return nil; - }]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.error) { - [source trySetError:task.error]; - } - return nil; - }]; - uint32_t count = 0xFFFFFFFF; - [[self.dropEntries writeDataAsync:[NSData dataWithBytes:&count length:4]] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (task.error) { - [source trySetError:task.error]; - } - return nil; - }]; - return nil; - }]; - return source.task; -} - -- (BFTask *)startReadout:(uint32_t)totalEntries -{ - NSMutableData *params = [NSMutableData dataWithBytes:&totalEntries length:4]; - uint32_t delta; - if (totalEntries > 2000) { - delta = totalEntries / 100; - } else if (totalEntries > 1000) { - delta = totalEntries / 10; - } else if (totalEntries > 100) { - delta = totalEntries / 4; - } else { - delta = UINT32_MAX; - } - [params appendBytes:&delta length:4]; - return [self.logReadout writeDataAsync:params]; -} - -- (void)processRawEntry:(const mw_log_entry_t *)rawEntry -{ - assert([MBLConstants isMetaWearQueue]); - if (printOnlyMode) { - MBLLog(MBLLogLevelInfo, @"[%d] %d:%d - %@", rawEntry->triggerId, rawEntry->resetId, rawEntry->timestamp, [NSData dataWithBytes:rawEntry->data length:4]); - } - - // Check if this entry has been seen before, and ignore it if needed - NSData *curEntry = [NSData dataWithBytes:rawEntry length:sizeof(mw_log_entry_t)]; - if (rawLogEntiresToReject) { - MBLRejectEntry *entry = [rawLogEntiresToReject firstObject]; - if ([entry.data isEqualToData:curEntry]) { - [rawLogEntiresToReject removeObjectAtIndex:0]; - return; - } else { - rawLogEntiresToReject = nil; - } - } - - // If we started a new page, than means we successfully cleaned up all pervious entries - // so there is 0 chance we can ever encounter them again, so remove all the reject objects. - if (newPageStarted) { - newPageStarted = NO; - [self deleteAllRejectObjects]; - } - - // No need to reject so process that entry! - uint32_t entryTs = rawEntry->timestamp; - uint8_t resetId = rawEntry->resetId; - uint8_t triggerId = rawEntry->triggerId; - NSData *data = [NSData dataWithBytes:rawEntry->data length:4]; - NSDate __block *date = nil; - date = self.device.nonVolatileState.logStartingDates[resetId]; - if ([[NSNull null] isEqual:date]) { - MBLLog(MBLLogLevelError, @"Timestamp error, please call setConfiguration:nil on the MBLMetaWear object to reset log"); - date = [NSDate dateWithTimeIntervalSince1970:0]; - self.device.nonVolatileState.logStartingDates[resetId] = date; - } - - // If reset uid changes then reset lastTimestamp - if (resetId != self.lastResetId) { - self.lastTimestamp = 0; - } - // If we roll over, then advance the starting date - if (entryTs < self.lastTimestamp) { - MBLLog(MBLLogLevelInfo, @"***Timestamp Rolling Over***"); - date = [date dateByAddingTimeInterval:LOGGING_SEC_PER_TIMESTAMP * LOGGING_ROLLOVER_COUNT]; - self.device.nonVolatileState.logStartingDates[resetId] = date; - } - // Update our tracking variables - self.lastTimestamp = entryTs; - self.lastResetId = resetId; - - // Convert to real time - NSDate *timestamp = [date dateByAddingTimeInterval:entryTs * LOGGING_SEC_PER_TIMESTAMP]; - - // Now that it's processed, commit it to the database - [managedObjectContext performBlock:^{ - // We may need to reject this entry as a duplicate later, so save it as an MBLRejectEntry - MBLRejectEntry *rejectEntry = (MBLRejectEntry *)[NSEntityDescription insertNewObjectForEntityForName:@"MBLRejectEntry" inManagedObjectContext:managedObjectContext]; - rejectEntry.timestamp = timestamp; - rejectEntry.data = curEntry; - - MBLRawLogEntry *entry = (MBLRawLogEntry *)[NSEntityDescription insertNewObjectForEntityForName:@"MBLRawLogEntry" inManagedObjectContext:managedObjectContext]; - entry.timestamp = timestamp; - entry.resetId = resetId; - entry.triggerId = triggerId; - entry.data = data; - }]; -} - - -@end diff --git a/MetaWear/Internal/Modules/Macro/MBLMacro.h b/MetaWear/Internal/Modules/Macro/MBLMacro.h deleted file mode 100644 index e159a6e..0000000 --- a/MetaWear/Internal/Modules/Macro/MBLMacro.h +++ /dev/null @@ -1,51 +0,0 @@ -/** - * MBLMacro.h - * MetaWear - * - * Created by Stephen Schiffli on 1/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLModule+Private.h" -#import "MBLConstants.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLMacro : MBLModule - -- (void)programConfigurationWithHandler:(MBLVoidHandler)handler; -- (void)clearAllMacros; - -- (BFTask *)programMacroWithCommands:(MBLVoidHandler)block; -- (BFTask *)executeMacro:(uint8_t)macroId; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Macro/MBLMacro.m b/MetaWear/Internal/Modules/Macro/MBLMacro.m deleted file mode 100644 index eff6b7f..0000000 --- a/MetaWear/Internal/Modules/Macro/MBLMacro.m +++ /dev/null @@ -1,188 +0,0 @@ -/** - * MBLMacro.m - * MetaWear - * - * Created by Stephen Schiffli on 1/27/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMacro.h" -#import "MBLRegister+Private.h" -#import "MBLModule+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLLED.h" -#import "MBLNumericFormatter.h" -#import "MBLDataSample.h" -#import "MBLMetaWearManager+Private.h" -#import "BFTask+MBLPrivate.h" - - -@interface MBLMacro () -@property (nonatomic) MBLRegister *addMacro; -@property (nonatomic) MBLRegister *addCommand; -@property (nonatomic) MBLRegister *endMacro; -@property (nonatomic) MBLRegister *executeMacro; -@property (nonatomic) MBLRegister *macroFinishNotificationEnable; -@property (nonatomic) MBLRegister *macroFinishNotification; -@property (nonatomic) MBLRegister *eraseAll; -@property (nonatomic) MBLRegister *addCommandPartial; -@end - -@implementation MBLMacro - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.globalEnable = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLNumericFormatter alloc] initIntWithLength:1 isSigned:NO]]; - self.addMacro = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - self.addCommand = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - self.endMacro = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[MBLFormat writeOnly]]; - self.executeMacro = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[MBLFormat writeOnly]]; - self.macroFinishNotificationEnable = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[MBLFormat writeOnly]]; - - self.macroFinishNotification = [[MBLRegister alloc] initWithModule:self registerId:0x7 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - self.eraseAll = [[MBLRegister alloc] initWithModule:self registerId:0x8 format:[MBLFormat writeOnly]]; - self.addCommandPartial = [[MBLRegister alloc] initWithModule:self registerId:0x9 format:[MBLFormat writeOnly]]; - - if (moduleInfo.moduleRevision == 0) { - self.addMacro.needsResponse = YES; - self.addCommand.needsResponse = YES; - self.endMacro.needsResponse = YES; - } - - self.addMacro.writeResponds = YES; - //self.addCommand.needsResponse = YES; - } - return self; -} - -- (void)programConfigurationWithHandler:(MBLVoidHandler)handler -{ - // Sniff the configuration fun - NSMutableArray *commands = [NSMutableArray array]; - [self.device startSnifferWithHandler:^(NSData *data, NSError *error) { - [commands addObject:data]; - }]; - - // Do the actual setup - [self.device.configuration runOnDeviceBoot:self.device]; - - // Wait for all setup code to finish - [[self.device waitForCommandCompletion] successOnMetaWear:^(id result) { - // Stop sniffing - [self.device stopSniffer]; - - if (commands.count) { - // Make sure the key register will persist a reset - [commands insertObject:[self.device.testDebug writeKeyRegisterCommand] atIndex:0]; - - [[[self.addMacro writeByteAsync:0x1] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - //uint8_t uid = *(uint8_t *)obj.data.bytes; - for (NSData *command in commands) { - if (command.length > 18) { - [self.addCommandPartial writeDataAsync:[command subdataWithRange:NSMakeRange(0, 2)]]; - [self.addCommand writeDataAsync:[command subdataWithRange:NSMakeRange(2, command.length - 2)]]; - } else { - [self.addCommand writeDataAsync:command]; - } - } - [self.endMacro writeDataAsync:nil]; - // Wait for the macro to be added in all nice by doing a dummy read - return [self.addMacro readForcedIndexAsync:0]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - if (handler) { - handler(); - } - return nil; - }]; - } else { - if (handler) { - handler(); - } - } - }]; -} - -- (BFTask *)programMacroWithCommands:(MBLVoidHandler)block -{ - NSMutableArray *commands = [NSMutableArray array]; - uint8_t __block macroId = 0xFF; - - return [[[[[[[[[self initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.device waitForSimulatorTurn]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.addMacro writeByteAsync:0x0]; - }] continueWithExecutor:[BFExecutor simulatorExecutor] withBlock:^id _Nullable(BFTask * _Nonnull task) { - MBLDataSample *result = task.result; - macroId = *(uint8_t *)result.data.bytes; - [self.device startSimulationWithHandler:^(uint8_t module, uint8_t opcode, NSData *parameters) { - uint8_t data[] = { module, opcode }; - NSMutableData *command = [NSMutableData dataWithBytes:&data length:2]; - [command appendData:parameters]; - [commands addObject:command]; - }]; - block(); - return nil; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.device waitForSimulatorCompletion]; - }] continueWithExecutor:[BFExecutor metaWearExecutor] withBlock:^id _Nullable(BFTask * _Nonnull task) { - for (NSData *command in commands) { - if (command.length > 18) { - [self.addCommandPartial writeDataAsync:[command subdataWithRange:NSMakeRange(0, 2)]]; - [self.addCommand writeDataAsync:[command subdataWithRange:NSMakeRange(2, command.length - 2)]]; - } else { - [self.addCommand writeDataAsync:command]; - } - } - [self.endMacro writeDataAsync:nil]; - // Wait for the macro to be added in all nice by doing a dummy read - return [self.addMacro readForcedIndexAsync:0]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self activateAsync]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [BFTask taskWithResult:[NSNumber numberWithUnsignedChar:macroId]]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [self.device stopSimulation]; - return task; - }]; -} - -- (BFTask *)executeMacro:(uint8_t)macroId -{ - return [self.executeMacro writeByteAsync:macroId]; -} - -- (void)clearAllMacros -{ - [self.eraseAll writeDataAsync:nil]; -} - -@end diff --git a/MetaWear/Internal/Modules/Magnetometer/MBLMagnetometer+Private.h b/MetaWear/Internal/Modules/Magnetometer/MBLMagnetometer+Private.h deleted file mode 100644 index 77e83e9..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MBLMagnetometer+Private.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLMagnetometer+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/5/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMagnetometer.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLMagnetometer (Private) - -@property (nonatomic, nullable) MBLData *magneticField; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Magnetometer/MBLMagnetometerData+Private.h b/MetaWear/Internal/Modules/Magnetometer/MBLMagnetometerData+Private.h deleted file mode 100644 index 29e29dc..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MBLMagnetometerData+Private.h +++ /dev/null @@ -1,42 +0,0 @@ -/** - * MBLMagnetometerData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/5/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMagnetometerData.h" - -@interface MBLMagnetometerData (Private) - -- (instancetype)initWithX:(double)x y:(double)y z:(double)z timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end diff --git a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150+Private.h b/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150+Private.h deleted file mode 100644 index 4cc6bf0..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150+Private.h +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLMagnetometerBMM150+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/6/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMagnetometerBMM150.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Magnetometer sample frequencies - */ -typedef NS_ENUM(uint8_t, MBLMagnetometerBMM150SampleFrequency) { - MBLMagnetometerBMM150SampleFrequency2Hz = 1, - MBLMagnetometerBMM150SampleFrequency6Hz = 2, - MBLMagnetometerBMM150SampleFrequency8Hz = 3, - MBLMagnetometerBMM150SampleFrequency10Hz = 0, - MBLMagnetometerBMM150SampleFrequency15Hz = 4, - MBLMagnetometerBMM150SampleFrequency20Hz = 5, - MBLMagnetometerBMM150SampleFrequency25Hz = 6, - MBLMagnetometerBMM150SampleFrequency30Hz = 7 -}; - -@interface MBLMagnetometerBMM150 (Private) - -/** - @warning This is changed any time the powerPreset property changes, so set - powerPreset first and then override the sampleFrequency if needed - */ -@property (nonatomic) MBLMagnetometerBMM150SampleFrequency sampleFrequency; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150Format.h b/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150Format.h deleted file mode 100644 index 5cfee1e..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150Format.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLMagnetometerBMM150Format.h - * MetaWear - * - * Created by Stephen Schiffli on 1/6/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLMagnetometerBMM150Format : MBLFormat -@property (nonatomic) BOOL packed; - -- (instancetype)initWithPacked:(BOOL)packed; -- (instancetype)initWithAxis:(uint8_t)axis; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150Format.m b/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150Format.m deleted file mode 100644 index 73c570d..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150Format.m +++ /dev/null @@ -1,120 +0,0 @@ -/** - * MBLMagnetometerBMM150Format.m - * MetaWear - * - * Created by Stephen Schiffli on 1/6/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMagnetometerBMM150Format.h" -#import "MBLMagnetometerData+Private.h" -#import "MBLNumericData+Private.h" - -/** - Magnetometer axis - */ -typedef NS_ENUM(uint8_t, MBLMagnetometerAxis) { - MBLMagnetometerAxisX = 0, - MBLMagnetometerAxisY = 1, - MBLMagnetometerAxisZ = 2 -}; - -@implementation MBLMagnetometerBMM150Format - -- (instancetype)initWithPacked:(BOOL)packed -{ - self = [super initArrayWithElements:packed ? 9 : 3 elementSize:2 isSigned:YES]; - if (self) { - self.packed = packed; - } - return self; -} - -- (instancetype)initWithAxis:(uint8_t)axis -{ - MBLMagnetometerAxis typedAxis = axis; - switch (typedAxis) { - case MBLMagnetometerAxisX: - self = [super initNumberWithLength:2 isSigned:YES offset:0]; - break; - case MBLMagnetometerAxisY: - self = [super initNumberWithLength:2 isSigned:YES offset:2]; - break; - case MBLMagnetometerAxisZ: - self = [super initNumberWithLength:2 isSigned:YES offset:4]; - break; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLMagnetometerBMM150Format *newFormat = [super copyWithZone:zone]; - newFormat.packed = self.packed; - return newFormat; -} - -- (id)singleEntryFromData:(NSData *)data date:(NSDate *)date -{ - double x = DBL_MIN, y = DBL_MIN, z = DBL_MIN; - const uint8_t *bytes = data.bytes; - double scale = 0.0000000625; // Firmware units are 1/16 uT, we want T - - x = (double)(*(int16_t *)&bytes[0]) * scale; - if (self.type == MBLFormatTypeArray) { - y = (double)(*(int16_t *)&bytes[2]) * scale; - z = (double)(*(int16_t *)&bytes[4]) * scale; - } - - if (self.type == MBLFormatTypeArray) { - return [[MBLMagnetometerData alloc] initWithX:x y:y z:z timestamp:date data:data]; - } else { - return [[MBLNumericData alloc] initWithNumber:[NSNumber numberWithDouble:x] timestamp:date data:data]; - } -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - if (self.packed) { - return @[[self singleEntryFromData:[data subdataWithRange:NSMakeRange(0, 6)] date:date], - [self singleEntryFromData:[data subdataWithRange:NSMakeRange(6, 6)] date:date], - [self singleEntryFromData:[data subdataWithRange:NSMakeRange(12, 6)] date:date]]; - } else { - return [self singleEntryFromData:data date:date]; - } -} - -- (NSNumber *)numberFromDouble:(double)value -{ - double scale = 0.0000000625; // Firmware units are 1/16 uT, we are given T - return [NSNumber numberWithInt:value / scale]; -} - -@end diff --git a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h b/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h deleted file mode 100644 index 299fdf6..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 8/18/17. - * Copyright 2017 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLMagnetometerBMM150; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent : MBLEvent - -- (instancetype)initWithMagnetometer:(MBLMagnetometerBMM150 *)mag; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m b/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m deleted file mode 100644 index 9ce7d3f..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m +++ /dev/null @@ -1,85 +0,0 @@ -/** - * MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 8/18/17. - * Copyright 2017 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - - -#import "MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h" -#import "MBLMagnetometerBMM150+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLRegister+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLMagnetometerBMM150Format.h" - -@implementation MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent - -- (instancetype)initWithMagnetometer:(MBLMagnetometerBMM150 *)mag -{ - self = [super initWithModule:mag registerId:0x9 format:[[MBLMagnetometerBMM150Format alloc] initWithPacked:YES]]; - if (self) { - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - MBLMagnetometerBMM150 *mag = (MBLMagnetometerBMM150 *)self.module; - return [mag.periodicMagneticField initializeAsync]; -} - -- (BFTask *)performAsyncDeinitialization -{ - MBLMagnetometerBMM150 *mag = (MBLMagnetometerBMM150 *)self.module; - return [mag.periodicMagneticField deinitializeAsync]; -} - -- (BFTask *)performAsyncActivation -{ - MBLMagnetometerBMM150 *mag = (MBLMagnetometerBMM150 *)self.module; - return [mag.periodicMagneticField activateAsync]; -} - -- (BFTask *)performAsyncDeactivation -{ - MBLMagnetometerBMM150 *mag = (MBLMagnetometerBMM150 *)self.module; - return [mag.periodicMagneticField deactivateAsync]; -} - -- (BFTask *)startLoggingAsync -{ - return [BFTask taskWithError:[NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorOperationInvalid - userInfo:@{NSLocalizedDescriptionKey : @"You should only log periodicMagneticField and not packedPeriodicMagneticField."}]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h b/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h deleted file mode 100644 index b70297b..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 1/6/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" -@class MBLMagnetometer; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLMagnetometerBMM150PeriodicMagneticFieldEvent : MBLEvent - -- (instancetype)initWithMagnetometer:(MBLMagnetometer *)magnetometer; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m b/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m deleted file mode 100644 index e672543..0000000 --- a/MetaWear/Internal/Modules/Magnetometer/MagnetometerBMM150/MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m +++ /dev/null @@ -1,72 +0,0 @@ -/** - * MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 1/6/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h" -#import "MBLMagnetometer.h" -#import "MBLMagnetometerBMM150Format.h" - -@interface MBLMagnetometerBMM150PeriodicMagneticFieldEvent () -@property (nonatomic) MBLRegister *dataEnable; -@end - -@implementation MBLMagnetometerBMM150PeriodicMagneticFieldEvent - -- (instancetype)initWithMagnetometer:(MBLMagnetometer *)magnetometer -{ - self = [super initWithModule:magnetometer registerId:0x05 format:[[MBLMagnetometerBMM150Format alloc] initWithPacked:NO] identifier:@"magnetic-field"]; - if (self) { - self.dataEnable = [[MBLRegister alloc] initWithModule:magnetometer registerId:0x02 format:[[MBLFormat alloc] initEncodedDataWithLength:2]]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - // Write the enable bit for mag data ready interrupts - uint8_t data[] = { (1 << 0) , 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.dataEnable writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - - -- (BFTask *)performAsyncDeactivation -{ - // Write the disable bit for mag data ready interrupts - uint8_t data[] = { 0, (1 << 0) }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.dataEnable writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Neopixel/MBLNeopixel+Private.h b/MetaWear/Internal/Modules/Neopixel/MBLNeopixel+Private.h deleted file mode 100644 index 8b8d723..0000000 --- a/MetaWear/Internal/Modules/Neopixel/MBLNeopixel+Private.h +++ /dev/null @@ -1,57 +0,0 @@ -/** - * MBLNeopixel+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 3/2/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLNeopixel.h" -#import - -@class MBLNeopixelStrand; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLNeopixel (Private) - -- (BFTask *)initializeStrand:(MBLNeopixelStrand *)strand; -- (BFTask *)deinitializeStrand:(MBLNeopixelStrand *)strand; -- (BFTask *)deallocDeinitializeStrand:(MBLNeopixelStrand *)strand; - - -- (BFTask *)setPixelAtIndex:(uint8_t)index pixel:(uint8_t)pixel color:(MBLColor *)color; -- (BFTask *)clearStrandAtIndex:(uint8_t)index startPixel:(uint8_t)start endPixel:(uint8_t)end; -- (BFTask *)holdStrandAtIndex:(uint8_t)index withEnable:(BOOL)enable; -- (BFTask *)rotateStrandAtIndex:(uint8_t)index direction:(MBLRotationDirection)direction repetitions:(uint8_t)repetitions period:(uint16_t)period; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Neopixel/MBLNeopixelStrand+Private.h b/MetaWear/Internal/Modules/Neopixel/MBLNeopixelStrand+Private.h deleted file mode 100644 index 5d5234d..0000000 --- a/MetaWear/Internal/Modules/Neopixel/MBLNeopixelStrand+Private.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * MBLNeopixelStrand+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 3/2/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLNeopixelStrand.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLNeopixelStrand (Private) - -@property (nonatomic) MBLColorOrdering color; -@property (nonatomic) MBLStrandSpeed speed; -@property (nonatomic) uint8_t pin; -@property (nonatomic) uint8_t length; -@property (nonatomic) uint8_t index; - -- (instancetype)initWithNeopixel:(MBLNeopixel *)neopixel color:(MBLColorOrdering)color speed:(MBLStrandSpeed)speed pin:(uint8_t)pin length:(uint8_t)length; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Photometer/MBLPhotometer+Private.h b/MetaWear/Internal/Modules/Photometer/MBLPhotometer+Private.h deleted file mode 100644 index a1b6942..0000000 --- a/MetaWear/Internal/Modules/Photometer/MBLPhotometer+Private.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLPhotometer+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLPhotometer.h" - -@interface MBLPhotometer (Private) -@property (nonatomic, nullable) MBLData *color; -@property (nonatomic, nullable) MBLData *redColor; -@property (nonatomic, nullable) MBLData *greenColor; -@property (nonatomic, nullable) MBLData *blueColor; -@property (nonatomic, nullable) MBLData *clearColor; -@end diff --git a/MetaWear/Internal/Modules/Photometer/MBLRGBData+Private.h b/MetaWear/Internal/Modules/Photometer/MBLRGBData+Private.h deleted file mode 100644 index 484c956..0000000 --- a/MetaWear/Internal/Modules/Photometer/MBLRGBData+Private.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLRGBData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLRGBData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLRGBData (Private) - -- (instancetype)initWithRed:(uint16_t)red green:(uint16_t)green blue:(uint16_t)blue clear:(uint16_t)clear timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472Format.h b/MetaWear/Internal/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472Format.h deleted file mode 100644 index 91658fe..0000000 --- a/MetaWear/Internal/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472Format.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLPhotometerTCS3472Format.h - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" -#import "MBLAccelerometerMMA8452Q+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLPhotometerTCS3472Format : MBLFormat - -- (instancetype)init; -- (instancetype)initWithOffset:(uint8_t)offset; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472Format.m b/MetaWear/Internal/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472Format.m deleted file mode 100644 index 4c8300e..0000000 --- a/MetaWear/Internal/Modules/Photometer/PhotometerTCS3472/MBLPhotometerTCS3472Format.m +++ /dev/null @@ -1,78 +0,0 @@ -/** - * MBLPhotometerTCS3472Format.m - * MetaWear - * - * Created by Stephen Schiffli on 2/17/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLPhotometerTCS3472Format.h" -#import "MBLRGBData+Private.h" -#import "MBLNumericData+Private.h" - -@implementation MBLPhotometerTCS3472Format - -- (instancetype)init -{ - self = [super initArrayWithElements:4 elementSize:2 isSigned:NO]; - return self; -} - -- (instancetype)initWithOffset:(uint8_t)offset -{ - self = [super initNumberWithLength:2 isSigned:NO offset:offset]; - return self; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - double red = DBL_MIN, green = DBL_MIN, blue = DBL_MIN, clear = DBL_MIN; - const uint8_t *bytes = data.bytes; - - clear = (double)(*(uint16_t *)&bytes[0]); - if (self.type == MBLFormatTypeArray) { - red = (double)(*(uint16_t *)&bytes[2]); - green = (double)(*(uint16_t *)&bytes[4]); - blue = (double)(*(uint16_t *)&bytes[6]); - } - - if (self.type == MBLFormatTypeArray) { - return [[MBLRGBData alloc] initWithRed:red green:green blue:blue clear:clear timestamp:date data:data]; - } else { - return [[MBLNumericData alloc] initWithNumber:[NSNumber numberWithDouble:clear] timestamp:date data:data]; - } -} - -- (NSNumber *)numberFromDouble:(double)value -{ - return [NSNumber numberWithInt:value]; -} - -@end diff --git a/MetaWear/Internal/Modules/Proximity/MBLProximity+Private.h b/MetaWear/Internal/Modules/Proximity/MBLProximity+Private.h deleted file mode 100644 index f72619e..0000000 --- a/MetaWear/Internal/Modules/Proximity/MBLProximity+Private.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLProximity+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 2/22/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLProximity.h" - -@interface MBLProximity (Private) -@property (nonatomic, nullable) MBLData *proximity; -@end diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLBitmaskEvent.h b/MetaWear/Internal/Modules/SensorFusion/MBLBitmaskEvent.h deleted file mode 100644 index 63e99e5..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLBitmaskEvent.h +++ /dev/null @@ -1,53 +0,0 @@ -/** - * MBLBitmaskEvent.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEvent+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLBitmaskEvent : MBLEvent -@property (nonatomic) uint8_t enableBitmask; -@property (nonatomic) MBLRegister *enableRegister; - -- (instancetype)initWithModule:(MBLModule *)module - registerId:(uint8_t)registerId - enableBitmask:(uint8_t)enableBitmask - enableRegister:(MBLRegister *)enableRegister - format:(MBLFormat *)format - identifier:(NSString *)identifier; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLBitmaskEvent.m b/MetaWear/Internal/Modules/SensorFusion/MBLBitmaskEvent.m deleted file mode 100644 index b631196..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLBitmaskEvent.m +++ /dev/null @@ -1,91 +0,0 @@ -/** - * MBLBitmaskEvent.m - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLBitmaskEvent.h" -#import "BFTask+MBLPrivate.h" -#import "MBLSensorFusion+Private.h" -#import "MBLLogger.h" - -@implementation MBLBitmaskEvent - -- (instancetype)initWithModule:(MBLModule *)module - registerId:(uint8_t)registerId - enableBitmask:(uint8_t)enableBitmask - enableRegister:(MBLRegister *)enableRegister - format:(MBLFormat *)format - identifier:(NSString *)identifier -{ - self = [super initWithModule:module registerId:registerId format:format identifier:identifier]; - if (self) { - self.enableBitmask = enableBitmask; - self.enableRegister = enableRegister; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - // Not all outputs are supported in all modes - MBLSensorFusion *sensorFusion = (MBLSensorFusion *)self.module; - if (self.registerId == 0x5 && (sensorFusion.mode == MBLSensorFusionModeM4G || sensorFusion.mode == MBLSensorFusionModeCompass)) { - MBLLog(MBLLogLevelError, @"Corrected rotation can't run in M4G or Compass mode."); - // TODO: Eventually return an error here once they can be recovered from more elegantly - return [BFTask taskWithResult:nil]; - } - if ((self.registerId == 0x6) && (sensorFusion.mode == MBLSensorFusionModeIMUPlus)) { - MBLLog(MBLLogLevelError, @"Corrected magneticField can't run in IMUPlus mode."); - // TODO: Eventually return an error here once they can be recovered from more elegantly - return [BFTask taskWithResult:nil]; - } - - return [[super performAsyncActivation] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - // Write the enable bits for interrupts - uint8_t data[] = { self.enableBitmask, 0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [self.enableRegister writeDataAsync:[NSData dataWithBytes:&data length:dataSize]]; - }]; -} - -- (BFTask *)performAsyncDeactivation -{ - // Write the enable bits for interrupts - uint8_t data[] = { 0, self.enableBitmask }; - int dataSize = sizeof(data) / sizeof(data[0]); - return [[self.enableRegister writeDataAsync:[NSData dataWithBytes:&data length:dataSize]] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [super performAsyncDeactivation]; - }]; -} - -@end diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLCorrectedFormat.h b/MetaWear/Internal/Modules/SensorFusion/MBLCorrectedFormat.h deleted file mode 100644 index ce6e34a..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLCorrectedFormat.h +++ /dev/null @@ -1,56 +0,0 @@ -/** - * MBLCorrectedFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -/** - Choose the output type of the corrected format - */ -typedef NS_ENUM(uint8_t, MBLCorrectedFormatType) { - MBLCorrectedFormatTypeAccelerometer = 0, - MBLCorrectedFormatTypeGyro = 1, - MBLCorrectedFormatTypeMagnetometer = 2 -}; - -@interface MBLCorrectedFormat : MBLFormat -@property (nonatomic) MBLCorrectedFormatType formatType; - -- (instancetype)initWithType:(MBLCorrectedFormatType)formatType; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLCorrectedFormat.m b/MetaWear/Internal/Modules/SensorFusion/MBLCorrectedFormat.m deleted file mode 100644 index 4e5f5b0..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLCorrectedFormat.m +++ /dev/null @@ -1,84 +0,0 @@ -/** - * MBLCorrectedFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLCorrectedFormat.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLGyroData+Private.h" -#import "MBLMagnetometerData+Private.h" -#import "MBLConstants.h" - -@implementation MBLCorrectedFormat - -- (instancetype)initWithType:(MBLCorrectedFormatType)formatType -{ - self = [super initEncodedDataWithLength:13]; - if (self) { - self.formatType = formatType; - } - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLCorrectedFormat *newFormat = [super copyWithZone:zone]; - newFormat.formatType = self.formatType; - return newFormat; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - const uint8_t *bytes = data.bytes; - const double x = (double)(*(float *)&bytes[0]); - const double y = (double)(*(float *)&bytes[4]); - const double z = (double)(*(float *)&bytes[8]); - const MBLCalibrationAccuracy accuracy = (MBLCalibrationAccuracy)(*(uint8_t *)&bytes[12]); - switch (self.formatType) { - case MBLCorrectedFormatTypeAccelerometer: - return [[MBLCorrectedAccelerometerData alloc] initWithX:x / 1000.0 y:y / 1000.0 z:z / 1000.0 accuracy:accuracy timestamp:date data:data]; - case MBLCorrectedFormatTypeGyro: - return [[MBLCorrectedGyroData alloc] initWithX:x y:y z:z timestamp:date data:data]; - case MBLCorrectedFormatTypeMagnetometer: - return [[MBLCorrectedMagnetometeData alloc] initWithX:x / 1000000.0 y:y / 1000000.0 z:z / 1000000.0 timestamp:date data:data]; - } - return nil; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - [NSException raise:@"Cannot use Sensor Fusion data with filters" format:@""]; - return nil; -} - -@end diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLEulerAngleData+Private.h b/MetaWear/Internal/Modules/SensorFusion/MBLEulerAngleData+Private.h deleted file mode 100644 index 14804f2..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLEulerAngleData+Private.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLEulerAngleData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEulerAngleData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLEulerAngleData (Private) - -- (instancetype)initWithH:(double)h p:(double)p r:(double)r y:(double)y timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLEulerFormat.h b/MetaWear/Internal/Modules/SensorFusion/MBLEulerFormat.h deleted file mode 100644 index f09fdfd..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLEulerFormat.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLEulerFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLEulerFormat : MBLFormat - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLEulerFormat.m b/MetaWear/Internal/Modules/SensorFusion/MBLEulerFormat.m deleted file mode 100644 index 79338d2..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLEulerFormat.m +++ /dev/null @@ -1,69 +0,0 @@ -/** - * MBLEulerFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLEulerFormat.h" -#import "MBLEulerAngleData+Private.h" - -@implementation MBLEulerFormat - -- (instancetype)init -{ - self = [super initArrayWithElements:4 elementSize:4 isSigned:YES]; - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLEulerFormat *newFormat = [super copyWithZone:zone]; - return newFormat; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - const uint8_t *bytes = data.bytes; - const double h = (double)(*(float *)&bytes[0]); - const double p = (double)(*(float *)&bytes[4]); - const double r = (double)(*(float *)&bytes[8]); - const double y = (double)(*(float *)&bytes[12]); - return [[MBLEulerAngleData alloc] initWithH:h p:p r:r y:y timestamp:date data:data]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - [NSException raise:@"Cannot use Euler data with filters" format:@""]; - return nil; -} - -@end diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLGravityFormat.h b/MetaWear/Internal/Modules/SensorFusion/MBLGravityFormat.h deleted file mode 100644 index 8f6fa9b..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLGravityFormat.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLGravityFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLGravityFormat : MBLFormat - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLGravityFormat.m b/MetaWear/Internal/Modules/SensorFusion/MBLGravityFormat.m deleted file mode 100644 index bbd09e1..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLGravityFormat.m +++ /dev/null @@ -1,68 +0,0 @@ -/** - * MBLGravityFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLGravityFormat.h" -#import "MBLAccelerometerData+Private.h" - -@implementation MBLGravityFormat - -- (instancetype)init -{ - self = [super initArrayWithElements:3 elementSize:4 isSigned:YES]; - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLGravityFormat *newFormat = [super copyWithZone:zone]; - return newFormat; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - const uint8_t *bytes = data.bytes; - const double scale = 9.80665; - const double x = (double)(*(float *)&bytes[0]) / scale; - const double y = (double)(*(float *)&bytes[4]) / scale; - const double z = (double)(*(float *)&bytes[8]) / scale; - return [[MBLAccelerometerData alloc] initWithX:x y:y z:z timestamp:date data:data]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - return [NSNumber numberWithInt:value * 9.80665]; -} - -@end diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionData+Private.h b/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionData+Private.h deleted file mode 100644 index f4862a1..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionData+Private.h +++ /dev/null @@ -1,46 +0,0 @@ -/** - * MBLQuaternionData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLQuaternionData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLQuaternionData (Private) - -- (instancetype)initWithW:(double)w x:(double)x y:(double)y z:(double)z timestamp:(NSDate *)timestamp data:(NSData *)data; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionFormat.h b/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionFormat.h deleted file mode 100644 index 9945d66..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionFormat.h +++ /dev/null @@ -1,44 +0,0 @@ -/** - * MBLQuaternionFormat.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLFormat.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLQuaternionFormat : MBLFormat - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionFormat.m b/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionFormat.m deleted file mode 100644 index b68cb70..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLQuaternionFormat.m +++ /dev/null @@ -1,69 +0,0 @@ -/** - * MBLQuaternionFormat.m - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLQuaternionFormat.h" -#import "MBLQuaternionData+Private.h" - -@implementation MBLQuaternionFormat - -- (instancetype)init -{ - self = [super initArrayWithElements:4 elementSize:4 isSigned:YES]; - return self; -} - -- (id)copyWithZone:(NSZone *)zone -{ - MBLQuaternionData *newFormat = [super copyWithZone:zone]; - return newFormat; -} - -- (id)entryFromData:(NSData *)data date:(NSDate *)date -{ - const uint8_t *bytes = data.bytes; - const double w = (double)(*(float *)&bytes[0]); - const double x = (double)(*(float *)&bytes[4]); - const double y = (double)(*(float *)&bytes[8]); - const double z = (double)(*(float *)&bytes[12]); - return [[MBLQuaternionData alloc] initWithW:w x:x y:y z:z timestamp:date data:data]; -} - -- (NSNumber *)numberFromDouble:(double)value -{ - [NSException raise:@"Cannot use Quaternion data with filters" format:@""]; - return nil; -} - -@end diff --git a/MetaWear/Internal/Modules/SensorFusion/MBLSensorFusion+Private.h b/MetaWear/Internal/Modules/SensorFusion/MBLSensorFusion+Private.h deleted file mode 100644 index 0bd1ec0..0000000 --- a/MetaWear/Internal/Modules/SensorFusion/MBLSensorFusion+Private.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLSensorFusion+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 11/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSensorFusion.h" -#import "BFTask+MBLPrivate.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLSensorFusion (Private) - -- (BFTask *)pullConfigAsync; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Serial/MBLI2CData+Private.h b/MetaWear/Internal/Modules/Serial/MBLI2CData+Private.h deleted file mode 100644 index c39e12c..0000000 --- a/MetaWear/Internal/Modules/Serial/MBLI2CData+Private.h +++ /dev/null @@ -1,55 +0,0 @@ -/** - * MBLI2CData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLI2CData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLI2CData (Private) - -- (instancetype)initWithRegister:(MBLRegister *)reg - deviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length; - -- (instancetype)initNumberWithRegister:(MBLRegister *)reg - deviceAddress:(uint8_t)deviceAddress - registerAddress:(uint8_t)registerAddress - length:(uint8_t)length - isSigned:(BOOL)isSigned; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Serial/MBLSPIData+Private.h b/MetaWear/Internal/Modules/Serial/MBLSPIData+Private.h deleted file mode 100644 index b527f55..0000000 --- a/MetaWear/Internal/Modules/Serial/MBLSPIData+Private.h +++ /dev/null @@ -1,67 +0,0 @@ -/** - * MBLSPIData+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSPIData.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLSPIData (Private) - -- (instancetype)initWithRegister:(MBLRegister *)reg - slaveSelectPin:(uint8_t)slaveSelectPin - clockPin:(uint8_t)clockPin - mosiPin:(uint8_t)mosiPin - misoPin:(uint8_t)misoPin - lsbFirst:(BOOL)lsbFirst - spiMode:(uint8_t)spiMode - spiFrequency:(uint8_t)spiFrequency - nativePinIndexing:(BOOL)nativePinIndexing - length:(uint8_t)length; - -- (instancetype)initNumberWithRegister:(MBLRegister *)reg - slaveSelectPin:(uint8_t)slaveSelectPin - clockPin:(uint8_t)clockPin - mosiPin:(uint8_t)mosiPin - misoPin:(uint8_t)misoPin - lsbFirst:(BOOL)lsbFirst - spiMode:(uint8_t)spiMode - spiFrequency:(uint8_t)spiFrequency - nativePinIndexing:(BOOL)nativePinIndexing - length:(uint8_t)length - isSigned:(BOOL)isSigned; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Serial/MBLSerial+Private.h b/MetaWear/Internal/Modules/Serial/MBLSerial+Private.h deleted file mode 100644 index 2bee7a8..0000000 --- a/MetaWear/Internal/Modules/Serial/MBLSerial+Private.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MBLSerial+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSerial.h" -#import - -@class MBLSerialData; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLSerial (Private) -- (BFTask *)performAsyncInitializationForRegister:(MBLRegister *)reg; -- (BFTask *)performAsyncDeinitializationForRegister:(MBLRegister *)reg; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Settings/MBLSettings+Private.h b/MetaWear/Internal/Modules/Settings/MBLSettings+Private.h deleted file mode 100644 index 81a57b4..0000000 --- a/MetaWear/Internal/Modules/Settings/MBLSettings+Private.h +++ /dev/null @@ -1,49 +0,0 @@ -/** - * MBLSettings+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/29/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLSettings.h" -#import "MBLRegister+Private.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLSettings (Private) -@property (nonatomic, readonly) MBLRegister *deviceName; - -- (BFTask *)startWatchdog:(double)seconds runWhileSleeping:(BOOL)runWhileSleeping; -- (BFTask *)refreshOnScheduler:(BOOL)scheduler enteringSleep:(BOOL)enteringSleep; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor0.h b/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor0.h deleted file mode 100644 index 743f452..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor0.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLExternalThermistor0.h - * MetaWear - * - * Created by Stephen Schiffli on 7/14/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLExternalThermistor.h" -@class MBLTemperature; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLExternalThermistor0 : MBLExternalThermistor - -- (instancetype)initWithTemperature:(MBLTemperature *)temperature; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor0.m b/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor0.m deleted file mode 100644 index 6228328..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor0.m +++ /dev/null @@ -1,64 +0,0 @@ -/** - * MBLExternalThermistor0.m - * MetaWear - * - * Created by Stephen Schiffli on 7/14/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLExternalThermistor0.h" -#import "MBLTemperature+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLData+Private.h" - -static const double DEGREES_CELSIUS_PER_UNIT = 0.125; - -@implementation MBLExternalThermistor0 - -- (instancetype)initWithTemperature:(MBLTemperature *)temperature -{ - self = [super initWithModule:temperature registerId:0x1 format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:YES scale:DEGREES_CELSIUS_PER_UNIT]]; - if (self) { - self.readPin = 0xFF; - self.enablePin = 0xFF; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - MBLTemperature *temperature = (MBLTemperature *)self.module; - temperature.source = MBLTemperatureSourceThermistor; - temperature.thermistorEnablePin = self.enablePin; - temperature.thermistorReadPin = self.readPin; - return [super performAsyncInitialization]; -} - -@end diff --git a/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor1.h b/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor1.h deleted file mode 100644 index 7650a43..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor1.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLExternalThermistor1.h - * MetaWear - * - * Created by Stephen Schiffli on 7/14/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLExternalThermistor.h" -@class MBLTemperature; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLExternalThermistor1 : MBLExternalThermistor - -- (instancetype)initWithTemperature:(MBLTemperature *)temperature index:(uint8_t)index; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor1.m b/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor1.m deleted file mode 100644 index 9780132..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLExternalThermistor1.m +++ /dev/null @@ -1,85 +0,0 @@ -/** - * MBLExternalThermistor1.m - * MetaWear - * - * Created by Stephen Schiffli on 7/14/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLExternalThermistor1.h" -#import "MBLTemperature+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLData+Private.h" -#import "MBLFormat.h" - -typedef struct __attribute__((packed)) { - uint8_t index; - uint8_t gpio_analog_pin; - uint8_t gpio_enable_pin; - uint8_t gpio_enable_active_high; -} mw_temp_therm1_mode_t; - -static const double DEGREES_CELSIUS_PER_UNIT = 0.125; - -@interface MBLExternalThermistor1 () -@property (nonatomic) MBLRegister *mode; -@end - -@implementation MBLExternalThermistor1 - -- (instancetype)initWithTemperature:(MBLTemperature *)temperature index:(uint8_t)index -{ - self = [super initWithModule:temperature registerId:0x1 index:index format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:YES scale:DEGREES_CELSIUS_PER_UNIT] identifier:[NSString stringWithFormat:@"temperature[%d]", index]]; - if (self) { - self.mode = [[MBLRegister alloc] initWithModule:temperature registerId:0x2 index:index format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - self.readPin = 0xFF; - self.enablePin = 0xFF; - self.enablePinActiveLow = YES; - } - return self; -} - -- (BFTask *)performAsyncInitialization -{ - if (self.readPin == 0xFF || self.enablePin == 0xFF || - (self.readPin == self.enablePin)) { - [NSException raise:@"Invalid thermistor values" - format:@"Set readPin and enablePin to valid values"]; - } - - mw_temp_therm1_mode_t regs; - regs.index = self.index; - regs.gpio_analog_pin = self.readPin; - regs.gpio_enable_pin = self.enablePin; - regs.gpio_enable_active_high = self.enablePinActiveLow ? 0 : 1; - return [self.mode writeDataAsync:[NSData dataWithBytes:®s length:sizeof(mw_temp_therm1_mode_t)]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Temperature/MBLOnDieTemperature0.h b/MetaWear/Internal/Modules/Temperature/MBLOnDieTemperature0.h deleted file mode 100644 index 4863480..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLOnDieTemperature0.h +++ /dev/null @@ -1,47 +0,0 @@ -/** - * MBLOnDieTemperature0.h - * MetaWear - * - * Created by Stephen Schiffli on 7/9/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLData+Private.h" -@class MBLTemperature; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLOnDieTemperature0 : MBLData - -- (instancetype)initWithTemperature:(MBLTemperature *)temperature; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Temperature/MBLTemperature+Private.h b/MetaWear/Internal/Modules/Temperature/MBLTemperature+Private.h deleted file mode 100644 index cab7479..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLTemperature+Private.h +++ /dev/null @@ -1,59 +0,0 @@ -/** - * MBLTemperature+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 10/28/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTemperature.h" - -NS_ASSUME_NONNULL_BEGIN - -typedef NS_ENUM(uint8_t, MBLTemperatureSource) { - MBLTemperatureSourceInternal, - MBLTemperatureSourceThermistor -}; - -@interface MBLTemperature (Private) -@property (nonatomic) NSArray *channels; -@property (nonatomic) MBLData *onDieThermistor; -@property (nonatomic, nullable) MBLExternalThermistor *externalThermistor; -@property (nonatomic, nullable) MBLData *onboardThermistor; - - -@property (nonatomic, nullable) MBLRegister *thermistorSettings; - -@property (nonatomic) MBLTemperatureSource source; -@property (nonatomic) uint8_t thermistorReadPin; -@property (nonatomic) uint8_t thermistorEnablePin; -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/Temperature/MBLTemperatureV0.h b/MetaWear/Internal/Modules/Temperature/MBLTemperatureV0.h deleted file mode 100644 index 237c473..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLTemperatureV0.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLTemperatureV0.h - * MetaWear - * - * Created by Stephen Schiffli on 8/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTemperature+Private.h" - -@interface MBLTemperatureV0 : MBLTemperature - -@end diff --git a/MetaWear/Internal/Modules/Temperature/MBLTemperatureV0.m b/MetaWear/Internal/Modules/Temperature/MBLTemperatureV0.m deleted file mode 100644 index 79da378..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLTemperatureV0.m +++ /dev/null @@ -1,97 +0,0 @@ -/** - * MBLTemperatureV0.m - * MetaWear - * - * Created by Stephen Schiffli on 8/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTemperatureV0.h" -#import "MBLRegister+Private.h" -#import "MBLEvent+Private.h" -#import "MBLNumericData+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLNumericFormatter.h" -#import "MBLData+Private.h" -#import "MBLOnDieTemperature0.h" -#import "MBLExternalThermistor0.h" - - -typedef struct __attribute__((packed)) { - uint8_t enable; - uint8_t gpio_analog_pin; - uint8_t gpio_pulldown_pin; -} mw_temp_therm_mode_t; - - -@implementation MBLTemperatureV0 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.source = MBLTemperatureSourceInternal; - self.thermistorReadPin = 0xFF; - self.thermistorEnablePin = 0xFF; - - self.thermistorSettings = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLFormat alloc] initEncodedDataWithLength:3]]; - - self.onDieThermistor = [[MBLOnDieTemperature0 alloc] initWithTemperature:self]; - self.externalThermistor = [[MBLExternalThermistor0 alloc] initWithTemperature:self]; - self.onboardThermistor = nil; - self.channels = @[self.onDieThermistor, self.externalThermistor]; - } - return self; -} - -- (BFTask *)performAsyncActivation -{ - if (self.source == MBLTemperatureSourceThermistor) { - if (self.thermistorReadPin == 0xFF || self.thermistorEnablePin == 0xFF || - (self.thermistorReadPin == self.thermistorEnablePin)) { - [NSException raise:@"Invalid thermistor values" - format:@"Set thermistorReadPin and thermistorEnablePin to valid values"]; - } - } - - mw_temp_therm_mode_t thermRegs; - thermRegs.enable = self.source == MBLTemperatureSourceThermistor; - thermRegs.gpio_analog_pin = self.thermistorReadPin; - thermRegs.gpio_pulldown_pin = self.thermistorEnablePin; - return [self.thermistorSettings writeDataAsync:[NSData dataWithBytes:&thermRegs length:sizeof(mw_temp_therm_mode_t)]]; -} - -- (BFTask *)performAsyncDeactivation -{ - mw_temp_therm_mode_t thermRegs = { 0 }; - return [self.thermistorSettings writeDataAsync:[NSData dataWithBytes:&thermRegs length:sizeof(mw_temp_therm_mode_t)]]; -} - -@end diff --git a/MetaWear/Internal/Modules/Temperature/MBLTemperatureV1.h b/MetaWear/Internal/Modules/Temperature/MBLTemperatureV1.h deleted file mode 100644 index 9f38cdc..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLTemperatureV1.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * MBLTemperatureV1.h - * MetaWear - * - * Created by Stephen Schiffli on 8/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTemperature+Private.h" - -@interface MBLTemperatureV1 : MBLTemperature - -@end diff --git a/MetaWear/Internal/Modules/Temperature/MBLTemperatureV1.m b/MetaWear/Internal/Modules/Temperature/MBLTemperatureV1.m deleted file mode 100644 index f062837..0000000 --- a/MetaWear/Internal/Modules/Temperature/MBLTemperatureV1.m +++ /dev/null @@ -1,94 +0,0 @@ -/** - * MBLTemperatureV1.m - * MetaWear - * - * Created by Stephen Schiffli on 8/24/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTemperatureV1.h" -#import "MBLRegister+Private.h" -#import "MBLEvent+Private.h" -#import "MBLNumericData+Private.h" -#import "MBLDeviceInfo.h" -#import "MBLNumericFormatter.h" -#import "MBLData+Private.h" -#import "MBLExternalThermistor1.h" - -static const double DEGREES_CELSIUS_PER_UNIT = 0.125; - -@implementation MBLTemperatureV1 - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.source = MBLTemperatureSourceInternal; - self.thermistorReadPin = 0xFF; - self.thermistorEnablePin = 0xFF; - - uint8_t *bytes = (uint8_t *)moduleInfo.moduleData.bytes; - NSMutableArray *channels = [NSMutableArray array]; - for (int i = 0; i < moduleInfo.moduleData.length; i++) { - uint8_t driverId = bytes[i]; - NSObject *current = nil; - switch (driverId) { - case 0: - self.onDieThermistor = [[MBLData alloc] initWithModule:self registerId:0x1 index:i format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:YES scale:DEGREES_CELSIUS_PER_UNIT] identifier:[NSString stringWithFormat:@"temperature[%d]", i]]; - current = self.onDieThermistor; - self.onDieThermistor.needsResponse = YES; // TODO: Remove once fixed - break; - case 1: - self.externalThermistor = [[MBLExternalThermistor1 alloc] initWithTemperature:self index:i]; - current = self.externalThermistor; - self.externalThermistor.needsResponse = YES; // TODO: Remove once fixed - break; - case 2: - // TODO: Enable the BMP280 Temperature - break; - case 3: - self.onboardThermistor = [[MBLData alloc] initWithModule:self registerId:0x1 index:i format:[[MBLNumericFormatter alloc] initDoubleWithLength:2 isSigned:YES scale:DEGREES_CELSIUS_PER_UNIT] identifier:[NSString stringWithFormat:@"temperature[%d]", i]]; - current = self.onboardThermistor; - self.onboardThermistor.needsResponse = YES; // TODO: Remove once fixed - break; - default: - NSAssert(NO, @"Unexpected temperature driver"); - break; - } - if (current) { - [channels addObject:current]; - } - } - self.channels = channels; - } - return self; -} - -@end diff --git a/MetaWear/Internal/Modules/TestDebug/MBLTestDebug.h b/MetaWear/Internal/Modules/TestDebug/MBLTestDebug.h deleted file mode 100644 index 5d79c58..0000000 --- a/MetaWear/Internal/Modules/TestDebug/MBLTestDebug.h +++ /dev/null @@ -1,112 +0,0 @@ -/** - * MBLTestDebug.h - * MetaWear - * - * Created by Stephen Schiffli on 8/12/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import -@class MBLEvent; -@class MBLFormat; -@class MBLRegister; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLTestDebug : MBLModule -@property (nonatomic) uint32_t magicKey; -@property (nonatomic, readonly) MBLRegister *keyRegister; - -/** - Indicates if triggerDisconnect was called or not - */ -@property (nonatomic) BOOL triggerDisconnectInProgress; - -/** - Reset board immediately - */ -- (BFTask *)resetDevice; - -/** - This makes sure that non-volatile memory is clean'd up first before a rest happens - */ -- (BFTask *)resetDeviceAfterGarbageCollect; - -/** - Enter Bootloader mode - */ -- (BFTask *)jumpToBootloader; - -/** - Triggers a GAP disconnect - */ -- (BFTask *)triggerDisconnect; - -/** - This checks to see if we are the application that currently claims to own this MetaWear - */ -- (BFTask *)isProgramedByOtherAppAsync; - -/** - Command values to write magic value to the key register - */ -- (NSData *)writeKeyRegisterCommand; - -/** - Get a spoofable event for use with - */ -- (MBLEvent *)spoofEvent:(MBLFormat *)format; -/** - Spoof an array of notifications on the MetaWear. Format is: - @["01-02-03-01-10", - "AB-CD-EF-01-88-22-33-44"]; - */ -- (BFTask *)spoofData:(NSArray *)data notification:(BOOL)notification; - -/** - Spoof any event you want - */ -- (BFTask *)spoofRawData:(NSArray *)data; - -/** - Enters powerdown mode on next reset after resetting all sensors at boot. - */ -- (BFTask *)enterPowersaveOnReset; - -/** - Invalidate firmware image and force bootloader. - */ -- (BFTask *)invalidateAppImage; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Internal/Modules/TestDebug/MBLTestDebug.m b/MetaWear/Internal/Modules/TestDebug/MBLTestDebug.m deleted file mode 100644 index 90c0128..0000000 --- a/MetaWear/Internal/Modules/TestDebug/MBLTestDebug.m +++ /dev/null @@ -1,201 +0,0 @@ -/** - * MBLTestDebug.m - * MetaWear - * - * Created by Stephen Schiffli on 8/12/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTestDebug.h" -#import "MBLMetaWear.h" -#import "MBLRegister+Private.h" -#import "MBLMetaWear+Private.h" -#import "MBLTimer+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLNumericData+Private.h" -#import "BFTask+MBLExtensions.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLLogger.h" - -@interface MBLTestDebug () -@property (nonatomic) MBLRegister *reset; -@property (nonatomic) MBLRegister *bootloader; -@property (nonatomic) MBLRegister *notificationSpoofer; -@property (nonatomic) MBLRegister *keyRegister; -@property (nonatomic) MBLRegister *delayedReset; -@property (nonatomic) MBLRegister *gapDisconnect; -@property (nonatomic) MBLRegister *powersaveOnReset; -@property (nonatomic) MBLRegister *appInvalidate; -@end - -@implementation MBLTestDebug - -- (instancetype)initWithDevice:(MBLMetaWear *)device moduleInfo:(MBLModuleInfo *)moduleInfo -{ - self = [super initWithDevice:device moduleInfo:moduleInfo]; - if (self) { - self.reset = [[MBLRegister alloc] initWithModule:self registerId:0x1 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.bootloader = [[MBLRegister alloc] initWithModule:self registerId:0x2 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.notificationSpoofer = [[MBLRegister alloc] initWithModule:self registerId:0x3 format:[[MBLFormat alloc] initEncodedDataWithLength:18]]; - self.keyRegister = [[MBLRegister alloc] initWithModule:self registerId:0x4 format:[[MBLNumericFormatter alloc] initIntWithLength:4 isSigned:NO]]; - self.delayedReset = [[MBLRegister alloc] initWithModule:self registerId:0x5 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - self.gapDisconnect = [[MBLRegister alloc] initWithModule:self registerId:0x6 format:[[MBLFormat alloc] initEncodedDataWithLength:0]]; - if (moduleInfo.moduleRevision >= 1) { - self.powersaveOnReset = [[MBLRegister alloc] initWithModule:self registerId:0x7 format:[MBLFormat writeOnly]]; - self.appInvalidate = [[MBLRegister alloc] initWithModule:self registerId:0x8 format:[MBLFormat writeOnly]]; - } - } - return self; -} - -- (void)setMagicKey:(uint32_t)magicKey -{ - while (magicKey == 0) { - magicKey = arc4random(); - } - _magicKey = magicKey; -} - -- (BFTask *)resetDevice -{ - self.triggerDisconnectInProgress = YES; - return [self.reset writeDataAsync:nil]; -} - -- (BFTask *)resetDeviceAfterGarbageCollect -{ - self.triggerDisconnectInProgress = YES; - return [[self.delayedReset writeDataAsync:nil] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) {; - return [self.gapDisconnect writeDataAsync:nil]; - }]; -} - -- (BFTask *)jumpToBootloader -{ - self.triggerDisconnectInProgress = YES; - return [self.bootloader writeDataAsync:nil]; -} - -- (BFTask *)triggerDisconnect -{ - self.triggerDisconnectInProgress = YES; - return [self.gapDisconnect writeDataAsync:nil]; -} - -- (BFTask *)isProgramedByOtherAppAsync -{ - return [[self.keyRegister readAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - // If another app tries to connect to this MetaWear it will issue this same - // command, so lets track any unexpected reads of the key register and use that - // as an indicator someone is trying to use 2 apps simultaneously which is very - // dangerous and unsupported. Our only option is to disconnect this app - MBLMetaWear *device = self.device; - [self.keyRegister addNotificationWithExecutor:[BFExecutor metaWearExecutor] handler:^(id _Nullable obj, NSError * _Nullable error) { - if (obj) { - MBLLog(MBLLogLevelWarning, @"Simultaneous Connection - Disconnecting %@ because another App has initiated a connection", device); - [[MBLMetaWearManager sharedManager] disconnectMetaWear:device fromPeripheralSide:NO]; - } - }]; - - MBLNumericData *obj = t.result; - if (obj.value.unsignedIntValue) { - // Write magic value exisits, see if it matches! - if (obj.value.unsignedIntValue != self.magicKey) { - MBLLog(MBLLogLevelWarning, @"Programmed by Other Application - Use caution to avoid causing data loss for other applications"); - return @YES; - } - } else { - // Write magic value since none was present - uint32_t key = self.magicKey; - [self.keyRegister writeDataAsync:[NSData dataWithBytes:&key length:sizeof(key)]]; - } - return @NO; - }]; -} - -- (NSData *)writeKeyRegisterCommand -{ - uint8_t header[] = { self.moduleInfo.moduleId, self.keyRegister.registerId }; - int headerSize = sizeof(header) / sizeof(header[0]); - NSMutableData *data = [NSMutableData dataWithBytes:header length:headerSize]; - uint32_t key = self.magicKey; - [data appendData:[NSData dataWithBytes:&key length:sizeof(key)]]; - return data; -} - -- (MBLEvent *)spoofEvent:(MBLFormat *)format -{ - return [[MBLEvent alloc] initWithModule:self.device.timer registerId:0xFF format:format]; -} - -- (BFTask *)spoofData:(NSArray *)data notification:(BOOL)notification -{ - NSMutableArray *tasks = [NSMutableArray array]; - uint8_t header[] = { 0x0C, 0xFF, notification }; - for (NSString *byteArray in data) { - NSArray *bytes = [byteArray componentsSeparatedByString:@"-"]; - NSMutableData *mutableData = [NSMutableData dataWithBytes:header length:3]; - for (NSString *byte in bytes) { - unsigned tmp; - [[NSScanner scannerWithString:byte] scanHexInt:&tmp]; - [mutableData appendBytes:&tmp length:1]; - } - [tasks addObject:[self.notificationSpoofer writeDataAsync:mutableData]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)spoofRawData:(NSArray *)data -{ - NSMutableArray *tasks = [NSMutableArray array]; - for (NSString *byteArray in data) { - NSArray *bytes = [byteArray componentsSeparatedByString:@"-"]; - NSMutableData *mutableData = [NSMutableData data]; - for (NSString *byte in bytes) { - unsigned tmp; - [[NSScanner scannerWithString:byte] scanHexInt:&tmp]; - [mutableData appendBytes:&tmp length:1]; - } - [tasks addObject:[self.notificationSpoofer writeDataAsync:mutableData]]; - } - return [BFTask taskForCompletionOfAllTasks:tasks]; -} - -- (BFTask *)enterPowersaveOnReset -{ - return [self.powersaveOnReset writeDataAsync:nil]; -} - -- (BFTask *)invalidateAppImage -{ - return [self.appInvalidate writeDataAsync:nil]; -} - -@end diff --git a/MetaWear/Internal/Modules/Timer/MBLTimer+Private.h b/MetaWear/Internal/Modules/Timer/MBLTimer+Private.h deleted file mode 100644 index 0d2c610..0000000 --- a/MetaWear/Internal/Modules/Timer/MBLTimer+Private.h +++ /dev/null @@ -1,49 +0,0 @@ -/** - * MMBLTimer+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 1/12/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTimer.h" - -typedef struct __attribute__((packed)) { - uint32_t period; - uint16_t repeat_count; - uint8_t notify_on_start; -} mw_timer_param_t; - -@interface MBLTimer (Private) - -- (BFTask *)startTimer:(MBLTimerEvent *)timer; -- (BFTask *)stopTimer:(MBLTimerEvent *)timer; - -@end diff --git a/MetaWear/Internal/Modules/Timer/MBLTimerEvent+Private.h b/MetaWear/Internal/Modules/Timer/MBLTimerEvent+Private.h deleted file mode 100644 index ae88ebd..0000000 --- a/MetaWear/Internal/Modules/Timer/MBLTimerEvent+Private.h +++ /dev/null @@ -1,52 +0,0 @@ -/** - * MBLTimerEvent+Private.h - * MetaWear - * - * Created by Stephen Schiffli on 3/11/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLTimerEvent.h" -@class MBLEntityModule; -@class MBLFormat; - -NS_ASSUME_NONNULL_BEGIN - -@interface MBLTimerEvent (Private) - -- (instancetype)initWithModule:(MBLEntityModule *)module - registerId:(uint8_t)registerId - addEntityParameters:(NSData *)addEntityParameters - format:(MBLFormat *)format - autoStart:(BOOL)autoStart; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/MetaWear-SDK-Cpp b/MetaWear/MetaWear-SDK-Cpp new file mode 160000 index 0000000..15116ec --- /dev/null +++ b/MetaWear/MetaWear-SDK-Cpp @@ -0,0 +1 @@ +Subproject commit 15116ecb64f9a592e8d94d8b35b52050a80c7fdf diff --git a/MetaWear/MetaWear.xcodeproj/project.pbxproj b/MetaWear/MetaWear.xcodeproj/project.pbxproj index 7031cf4..c5525d3 100644 --- a/MetaWear/MetaWear.xcodeproj/project.pbxproj +++ b/MetaWear/MetaWear.xcodeproj/project.pbxproj @@ -9,66 +9,33 @@ /* Begin PBXBuildFile section */ 088E33E5AFA1E3A88FED67D3 /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E1E34DFCA4063CE2A07A83BF /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework */; }; 2CA001D51AB8B0B68DC03986 /* Pods_MetaWearIntegrationTests_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8191DF79A938D05A40C4647 /* Pods_MetaWearIntegrationTests_iOS.framework */; }; - 400655A71D98BE920066AB54 /* MBLMockMetaWearUnitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E141D94AE5000F38FF0 /* MBLMockMetaWearUnitTest.m */; }; - 400655A81D98BE920066AB54 /* MBLMockMetaWearUnitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E141D94AE5000F38FF0 /* MBLMockMetaWearUnitTest.m */; }; - 400655AB1D99FD4A0066AB54 /* MMA8452QTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC31D94C3C100F38FF0 /* MMA8452QTests.m */; }; - 400655AC1D99FD4C0066AB54 /* MMA8452QTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC31D94C3C100F38FF0 /* MMA8452QTests.m */; }; - 400655AD1D99FEED0066AB54 /* BMI160Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB81D94C3C100F38FF0 /* BMI160Tests.m */; }; - 400655AE1D99FEEE0066AB54 /* BMI160Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB81D94C3C100F38FF0 /* BMI160Tests.m */; }; - 400655B31D9A00C10066AB54 /* ANCSTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655B11D9A00BA0066AB54 /* ANCSTests.m */; }; - 400655B41D9A00C20066AB54 /* ANCSTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655B11D9A00BA0066AB54 /* ANCSTests.m */; }; - 400655B71D9A01820066AB54 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655B61D9A017D0066AB54 /* ViewController.m */; }; - 400655B81D9A0C510066AB54 /* SendBytesTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC41D94C3C100F38FF0 /* SendBytesTest.m */; }; - 400655B91D9A0C530066AB54 /* SendBytesTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC41D94C3C100F38FF0 /* SendBytesTest.m */; }; - 400655BB1D9A0DD70066AB54 /* AccelerometerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB41D94C3C100F38FF0 /* AccelerometerTests.m */; }; - 400655BC1D9A0DD80066AB54 /* AccelerometerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB41D94C3C100F38FF0 /* AccelerometerTests.m */; }; - 400655BD1D9A0DE40066AB54 /* BMA255Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB71D94C3C100F38FF0 /* BMA255Tests.m */; }; - 400655BE1D9A0DE50066AB54 /* BMA255Tests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB71D94C3C100F38FF0 /* BMA255Tests.m */; }; - 400655C11D9A0E300066AB54 /* EnablingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655C01D9A0E090066AB54 /* EnablingTests.m */; }; - 400655C21D9A0E310066AB54 /* EnablingTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655C01D9A0E090066AB54 /* EnablingTests.m */; }; - 400655C31D9A19720066AB54 /* MBLAutomaticTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E0F1D94AE5000F38FF0 /* MBLAutomaticTests.m */; }; - 400655C41D9A19720066AB54 /* MBLAutomaticTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E0F1D94AE5000F38FF0 /* MBLAutomaticTests.m */; }; - 400655CD1D9A47990066AB54 /* MBLConnectionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655CC1D9A46FF0066AB54 /* MBLConnectionTests.m */; }; - 400655CE1D9A479A0066AB54 /* MBLConnectionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655CC1D9A46FF0066AB54 /* MBLConnectionTests.m */; }; - 400655D11D9A67FD0066AB54 /* MBLMetaWearTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655D01D9A67B60066AB54 /* MBLMetaWearTests.m */; }; - 400655D21D9A67FD0066AB54 /* MBLMetaWearTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655D01D9A67B60066AB54 /* MBLMetaWearTests.m */; }; - 4009E36C1FE1B8C7009509CB /* MBLRegisterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4009E36B1FE1B8C7009509CB /* MBLRegisterTests.m */; }; - 4009E36D1FE1B8C7009509CB /* MBLRegisterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4009E36B1FE1B8C7009509CB /* MBLRegisterTests.m */; }; - 4009E36E1FE1B8C7009509CB /* MBLRegisterTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 4009E36B1FE1B8C7009509CB /* MBLRegisterTests.m */; }; - 403BF7731D9E348000B22B82 /* DFUTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 403BF7721D9E342800B22B82 /* DFUTests.m */; }; - 40703E281D94B09600F38FF0 /* MBLConverstionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E101D94AE5000F38FF0 /* MBLConverstionTests.m */; }; - 40703E3A1D94B8CA00F38FF0 /* MBLConverstionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E101D94AE5000F38FF0 /* MBLConverstionTests.m */; }; + 404057AD209A796400591D6B /* FirmwareTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057AC209A796300591D6B /* FirmwareTests.swift */; }; + 404057AE209A796400591D6B /* FirmwareTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057AC209A796300591D6B /* FirmwareTests.swift */; }; + 404057AF209A796400591D6B /* FirmwareTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057AC209A796300591D6B /* FirmwareTests.swift */; }; + 404057B2209A7CB700591D6B /* ManualTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057B0209A7CB700591D6B /* ManualTests.swift */; }; + 404057B3209A7CB700591D6B /* ManualTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057B0209A7CB700591D6B /* ManualTests.swift */; }; + 404057B4209A7CB700591D6B /* ManualTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057B0209A7CB700591D6B /* ManualTests.swift */; }; + 404057B5209A7CB700591D6B /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057B1209A7CB700591D6B /* Tests.swift */; }; + 404057B6209A7CB700591D6B /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057B1209A7CB700591D6B /* Tests.swift */; }; + 404057B7209A7CB700591D6B /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 404057B1209A7CB700591D6B /* Tests.swift */; }; + 40405836209A83CA00591D6B /* Interface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 40405834209A83CA00591D6B /* Interface.storyboard */; }; + 40405838209A83CB00591D6B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 40405837209A83CB00591D6B /* Assets.xcassets */; }; + 4040583F209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4040583E209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 40405844209A83CB00591D6B /* InterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40405843209A83CB00591D6B /* InterfaceController.swift */; }; + 40405846209A83CB00591D6B /* ExtensionDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40405845209A83CB00591D6B /* ExtensionDelegate.swift */; }; + 40405848209A83CC00591D6B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 40405847209A83CC00591D6B /* Assets.xcassets */; }; + 4040584C209A83CC00591D6B /* MetaWearIntegrationTestHost-watchOS.app in Embed Watch Content */ = {isa = PBXBuildFile; fileRef = 40405832209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS.app */; }; 40703E831D94C0DB00F38FF0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E741D94C0AB00F38FF0 /* AppDelegate.m */; }; 40703E841D94C0E800F38FF0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 40703E761D94C0AB00F38FF0 /* LaunchScreen.storyboard */; }; 40703E851D94C0E800F38FF0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 40703E781D94C0AB00F38FF0 /* Main.storyboard */; }; 40703E861D94C0F000F38FF0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E7B1D94C0AB00F38FF0 /* main.m */; }; - 40703EE01D94C3EB00F38FF0 /* AccelConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB31D94C3C100F38FF0 /* AccelConfig.m */; }; - 40703EE31D94C3EB00F38FF0 /* AutomaticTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB61D94C3C100F38FF0 /* AutomaticTests.m */; }; - 40703EE61D94C3EB00F38FF0 /* ButtonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EBA1D94C3C100F38FF0 /* ButtonConfig.m */; }; - 40703EE81D94C3EB00F38FF0 /* IncrementingEventConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EBE1D94C3C100F38FF0 /* IncrementingEventConfig.m */; }; - 40703EEB1D94C3EB00F38FF0 /* MetaWearTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC21D94C3C100F38FF0 /* MetaWearTest.m */; }; - 40703EF01D94C3EB00F38FF0 /* TempLoggerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC81D94C3C100F38FF0 /* TempLoggerConfiguration.m */; }; - 407820131D9DD5EB00FF5134 /* MBLMockMetaWearUnitTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E141D94AE5000F38FF0 /* MBLMockMetaWearUnitTest.m */; }; 4078203A1D9DD64A00FF5134 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 40781F8E1D9DD1C400FF5134 /* AppDelegate.m */; }; 4078203B1D9DD64E00FF5134 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 40781F911D9DD1C400FF5134 /* Main.storyboard */; }; 4078203C1D9DD65400FF5134 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 40781F941D9DD1C400FF5134 /* main.m */; }; 4078203E1D9DD6B200FF5134 /* MetaWearIntegrationTests-tvOS-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 4078203D1D9DD6B200FF5134 /* MetaWearIntegrationTests-tvOS-Info.plist */; }; - 407820401D9DD7C000FF5134 /* MetaWearTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC21D94C3C100F38FF0 /* MetaWearTest.m */; }; - 407820411D9DD7C800FF5134 /* AutomaticTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB61D94C3C100F38FF0 /* AutomaticTests.m */; }; - 407820421D9DD7DB00FF5134 /* TempLoggerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC81D94C3C100F38FF0 /* TempLoggerConfiguration.m */; }; - 407820431D9DD7DB00FF5134 /* IncrementingEventConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EBE1D94C3C100F38FF0 /* IncrementingEventConfig.m */; }; - 407820441D9DD7DB00FF5134 /* ButtonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EBA1D94C3C100F38FF0 /* ButtonConfig.m */; }; - 407820451D9DD7DB00FF5134 /* AccelConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB31D94C3C100F38FF0 /* AccelConfig.m */; }; - 407820461D9DD84500FF5134 /* MBLConnectionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655CC1D9A46FF0066AB54 /* MBLConnectionTests.m */; }; 40915FE71D94D3C8008A5F24 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 40915FDB1D94D3A1008A5F24 /* AppDelegate.m */; }; 40915FE91D94D3D2008A5F24 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 40915FDD1D94D3A1008A5F24 /* Main.storyboard */; }; 40915FEA1D94D3D7008A5F24 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 40915FE01D94D3A1008A5F24 /* main.m */; }; - 40915FF71D94D4BB008A5F24 /* TempLoggerConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC81D94C3C100F38FF0 /* TempLoggerConfiguration.m */; }; - 40915FF81D94D4BB008A5F24 /* IncrementingEventConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EBE1D94C3C100F38FF0 /* IncrementingEventConfig.m */; }; - 40915FF91D94D4BB008A5F24 /* ButtonConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EBA1D94C3C100F38FF0 /* ButtonConfig.m */; }; - 40915FFA1D94D4BB008A5F24 /* AccelConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB31D94C3C100F38FF0 /* AccelConfig.m */; }; - 40915FFE1D94D4BB008A5F24 /* AutomaticTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EB61D94C3C100F38FF0 /* AutomaticTests.m */; }; - 409160041D94D4BB008A5F24 /* MetaWearTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703EC21D94C3C100F38FF0 /* MetaWearTest.m */; }; 40969D911F96B63A0024C2ED /* metawearmmc-r0.1-r1.3.5.zip in Resources */ = {isa = PBXBuildFile; fileRef = 40969D901F96B6320024C2ED /* metawearmmc-r0.1-r1.3.5.zip */; }; 40969D921F96B63A0024C2ED /* metawearmmr-r0.2-r1.3.4.zip in Resources */ = {isa = PBXBuildFile; fileRef = 40969D8F1F96B6320024C2ED /* metawearmmr-r0.2-r1.3.4.zip */; }; 40969D931F96B63D0024C2ED /* metawearmmc-r0.1-r1.3.5.zip in Resources */ = {isa = PBXBuildFile; fileRef = 40969D901F96B6320024C2ED /* metawearmmc-r0.1-r1.3.5.zip */; }; @@ -81,25 +48,31 @@ 40969D9A1F96C01D0024C2ED /* metawearmmr-r0.2-r1.3.4.zip in Resources */ = {isa = PBXBuildFile; fileRef = 40969D8F1F96B6320024C2ED /* metawearmmr-r0.2-r1.3.4.zip */; }; 40969D9B1F96C0210024C2ED /* metawearmmc-r0.1-r1.3.5.zip in Resources */ = {isa = PBXBuildFile; fileRef = 40969D901F96B6320024C2ED /* metawearmmc-r0.1-r1.3.5.zip */; }; 40969D9C1F96C0210024C2ED /* metawearmmr-r0.2-r1.3.4.zip in Resources */ = {isa = PBXBuildFile; fileRef = 40969D8F1F96B6320024C2ED /* metawearmmr-r0.2-r1.3.4.zip */; }; - 40CBC8961D9B37580078573C /* MBLMetaBootTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40CBC8951D9B37040078573C /* MBLMetaBootTests.m */; }; - 40CBC8971D9B37590078573C /* MBLMetaBootTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40CBC8951D9B37040078573C /* MBLMetaBootTests.m */; }; - 40CBC8991D9B7D620078573C /* MagnetometerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40CBC8981D9B7D5E0078573C /* MagnetometerTests.m */; }; - 40CBC89A1D9B7D630078573C /* MagnetometerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40CBC8981D9B7D5E0078573C /* MagnetometerTests.m */; }; - 40D2A7091DC0192300916C7E /* MetaWearPrivate.podspec in Resources */ = {isa = PBXBuildFile; fileRef = 40D2A7081DC0192300916C7E /* MetaWearPrivate.podspec */; }; - 40F4C1B51DAF3EB100DAD8F6 /* MBLMetaWearTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 400655D01D9A67B60066AB54 /* MBLMetaWearTests.m */; }; - 40F4C1B61DAF3EB600DAD8F6 /* MBLMetaBootTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40CBC8951D9B37040078573C /* MBLMetaBootTests.m */; }; - 40F4C1B71DAF3EB900DAD8F6 /* MBLAutomaticTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E0F1D94AE5000F38FF0 /* MBLAutomaticTests.m */; }; - 40F4C1B81DAF3EBC00DAD8F6 /* MBLConverstionTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 40703E101D94AE5000F38FF0 /* MBLConverstionTests.m */; }; 4CD60AFE9810719E6C216CA9 /* Pods_MetaWearIntegrationTests_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A9274E932D0BA7E8B3AB8D3 /* Pods_MetaWearIntegrationTests_macOS.framework */; }; 507DF4AF55480C3FD7E0DE6B /* Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FFAABAC8B3AA3D6E4C1C4F88 /* Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework */; }; 7A5922771D78B9E2C42DAA92 /* Pods_MetaWearIntegrationTests_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9614BF1F256D2E9766AF51F3 /* Pods_MetaWearIntegrationTests_tvOS.framework */; }; 944905580F05FE11E28F1CDA /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5511FEC9D23EDED11DA652A /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework */; }; AA67B6217E520AD3126D553A /* Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5EAB7B6352380360645B98AD /* Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework */; }; ACAB1804AB0115C056BF758B /* Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBB2CC43F574564AEC7B2954 /* Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework */; }; + B7E4C1EC3139AFCD24132488 /* Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F7D42585D28D4745E3E01A /* Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework */; }; F788597B715675A6862B643D /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8ED5F56A688455F38CFF3F5 /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 40405840209A83CB00591D6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6003F582195388D10070C39A /* Project object */; + proxyType = 1; + remoteGlobalIDString = 4040583D209A83CB00591D6B; + remoteInfo = "MetaWearIntegrationTestHost-watchOS Extension"; + }; + 4040584A209A83CC00591D6B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 6003F582195388D10070C39A /* Project object */; + proxyType = 1; + remoteGlobalIDString = 40405831209A83CA00591D6B; + remoteInfo = "MetaWearIntegrationTestHost-watchOS"; + }; 40703EAE1D94C39F00F38FF0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 6003F582195388D10070C39A /* Project object */; @@ -123,32 +96,53 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + 40405852209A83CC00591D6B /* Embed App Extensions */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 13; + files = ( + 4040583F209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension.appex in Embed App Extensions */, + ); + name = "Embed App Extensions"; + runOnlyForDeploymentPostprocessing = 0; + }; + 40405854209A83CC00591D6B /* Embed Watch Content */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; + dstSubfolderSpec = 16; + files = ( + 4040584C209A83CC00591D6B /* MetaWearIntegrationTestHost-watchOS.app in Embed Watch Content */, + ); + name = "Embed Watch Content"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 0BC206FACF309897F345A691 /* Pods-MetaWearIntegrationTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWearIntegrationTests-iOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.debug.xcconfig"; sourceTree = ""; }; 0BE7C944CE23C1660A3C623F /* Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig"; sourceTree = ""; }; 120874BAE9EB8D11171E121C /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig"; sourceTree = ""; }; - 2E06F9C64AEA806D32581A30 /* MetaWear.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = MetaWear.podspec; path = ../MetaWear.podspec; sourceTree = ""; }; + 2E06F9C64AEA806D32581A30 /* MetaWear.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = MetaWear.podspec; path = ../MetaWear.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 315922240872C094896F86A5 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig"; sourceTree = ""; }; 372F4EFD8A378C461EB0D023 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig"; sourceTree = ""; }; 3F0AE8CB80A89F8BF3547857 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig"; sourceTree = ""; }; - 400655B11D9A00BA0066AB54 /* ANCSTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ANCSTests.m; sourceTree = ""; }; - 400655B51D9A017D0066AB54 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; - 400655B61D9A017D0066AB54 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; - 400655C01D9A0E090066AB54 /* EnablingTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EnablingTests.m; sourceTree = ""; }; - 400655C51D9A1DF30066AB54 /* .travis.yml */ = {isa = PBXFileReference; lastKnownFileType = text; name = .travis.yml; path = ../.travis.yml; sourceTree = ""; }; - 400655CC1D9A46FF0066AB54 /* MBLConnectionTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBLConnectionTests.m; sourceTree = ""; }; - 400655D01D9A67B60066AB54 /* MBLMetaWearTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBLMetaWearTests.m; sourceTree = ""; }; - 4009E36B1FE1B8C7009509CB /* MBLRegisterTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MBLRegisterTests.m; sourceTree = ""; }; - 400C47D91E8F1CEF00F72568 /* gen_api_reference.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = gen_api_reference.sh; sourceTree = ""; }; - 403BF7721D9E342800B22B82 /* DFUTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DFUTests.m; sourceTree = ""; }; + 404057AC209A796300591D6B /* FirmwareTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FirmwareTests.swift; sourceTree = ""; }; + 404057B0209A7CB700591D6B /* ManualTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManualTests.swift; sourceTree = ""; }; + 404057B1209A7CB700591D6B /* Tests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; + 40405832209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "MetaWearIntegrationTestHost-watchOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 40405835209A83CA00591D6B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Interface.storyboard; sourceTree = ""; }; + 40405837209A83CB00591D6B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 40405839209A83CB00591D6B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4040583E209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "MetaWearIntegrationTestHost-watchOS Extension.appex"; sourceTree = BUILT_PRODUCTS_DIR; }; + 40405843209A83CB00591D6B /* InterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InterfaceController.swift; sourceTree = ""; }; + 40405845209A83CB00591D6B /* ExtensionDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionDelegate.swift; sourceTree = ""; }; + 40405847209A83CC00591D6B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 40405849209A83CC00591D6B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 40703E061D94AE3500F38FF0 /* MetaWearUnitTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "MetaWearUnitTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 40703E0A1D94AE3500F38FF0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../../MetaWearUnitTests-iOS/Info.plist"; sourceTree = ""; }; - 40703E0F1D94AE5000F38FF0 /* MBLAutomaticTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = MBLAutomaticTests.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 40703E101D94AE5000F38FF0 /* MBLConverstionTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBLConverstionTests.m; sourceTree = ""; }; - 40703E111D94AE5000F38FF0 /* MBLEnabling.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = MBLEnabling.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 40703E121D94AE5000F38FF0 /* MBLLogDatabase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBLLogDatabase.m; sourceTree = ""; }; - 40703E131D94AE5000F38FF0 /* MBLMockMetaWearUnitTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MBLMockMetaWearUnitTest.h; sourceTree = ""; }; - 40703E141D94AE5000F38FF0 /* MBLMockMetaWearUnitTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MBLMockMetaWearUnitTest.m; sourceTree = ""; }; 40703E1E1D94AEFE00F38FF0 /* MetaWearIntegrationTests-iOS-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MetaWearIntegrationTests-iOS-Info.plist"; sourceTree = ""; }; 40703E1F1D94AEFE00F38FF0 /* MetaWearIntegrationTests-macOS-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MetaWearIntegrationTests-macOS-Info.plist"; sourceTree = ""; }; 40703E201D94AEFE00F38FF0 /* MetaWearUnitTests-iOS-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MetaWearUnitTests-iOS-Info.plist"; sourceTree = ""; }; @@ -162,29 +156,11 @@ 40703E7A1D94C0AB00F38FF0 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 40703E7B1D94C0AB00F38FF0 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 40703EA61D94C37500F38FF0 /* MetaWearIntegrationTests-iOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "MetaWearIntegrationTests-iOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - 40703EB21D94C3C100F38FF0 /* AccelConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AccelConfig.h; sourceTree = ""; }; - 40703EB31D94C3C100F38FF0 /* AccelConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccelConfig.m; sourceTree = ""; }; - 40703EB41D94C3C100F38FF0 /* AccelerometerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AccelerometerTests.m; sourceTree = ""; }; - 40703EB61D94C3C100F38FF0 /* AutomaticTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AutomaticTests.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 40703EB71D94C3C100F38FF0 /* BMA255Tests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BMA255Tests.m; sourceTree = ""; }; - 40703EB81D94C3C100F38FF0 /* BMI160Tests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = BMI160Tests.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 40703EB91D94C3C100F38FF0 /* ButtonConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ButtonConfig.h; sourceTree = ""; }; - 40703EBA1D94C3C100F38FF0 /* ButtonConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ButtonConfig.m; sourceTree = ""; }; - 40703EBD1D94C3C100F38FF0 /* IncrementingEventConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IncrementingEventConfig.h; sourceTree = ""; }; - 40703EBE1D94C3C100F38FF0 /* IncrementingEventConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IncrementingEventConfig.m; sourceTree = ""; }; - 40703EC11D94C3C100F38FF0 /* MetaWearTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MetaWearTest.h; sourceTree = ""; }; - 40703EC21D94C3C100F38FF0 /* MetaWearTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = MetaWearTest.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 40703EC31D94C3C100F38FF0 /* MMA8452QTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MMA8452QTests.m; sourceTree = ""; }; - 40703EC41D94C3C100F38FF0 /* SendBytesTest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = SendBytesTest.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 40703EC71D94C3C100F38FF0 /* TempLoggerConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TempLoggerConfiguration.h; sourceTree = ""; }; - 40703EC81D94C3C100F38FF0 /* TempLoggerConfiguration.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TempLoggerConfiguration.m; sourceTree = ""; }; - 407085211DCA555E00AAEB33 /* MetaWearSyntaxFriendly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MetaWearSyntaxFriendly.h; sourceTree = ""; }; - 407085221DCA55C200AAEB33 /* MetaWearSyntaxFriendly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MetaWearSyntaxFriendly.h; sourceTree = ""; }; 40781F8D1D9DD1C400FF5134 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 40781F8E1D9DD1C400FF5134 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 40781F921D9DD1C400FF5134 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Main.storyboard; sourceTree = ""; }; 40781F931D9DD1C400FF5134 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 40781F941D9DD1C400FF5134 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = "../Tests/MetaWearIntegrationTestHost-tvOS/main.m"; sourceTree = ""; }; + 40781F941D9DD1C400FF5134 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 40781FA01D9DD29900FF5134 /* MetaWearUnitTests-tvOS-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "MetaWearUnitTests-tvOS-Info.plist"; sourceTree = ""; }; 40781FE01D9DD41900FF5134 /* MetaWearUnitTests-tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "MetaWearUnitTests-tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 407820181D9DD60500FF5134 /* MetaWearIntegrationTestHost-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "MetaWearIntegrationTestHost-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -200,50 +176,6 @@ 40969D8F1F96B6320024C2ED /* metawearmmr-r0.2-r1.3.4.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "metawearmmr-r0.2-r1.3.4.zip"; sourceTree = ""; }; 40969D901F96B6320024C2ED /* metawearmmc-r0.1-r1.3.5.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "metawearmmc-r0.1-r1.3.5.zip"; sourceTree = ""; }; 409CA2881D9D00FF00E1262B /* FastCoding.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FastCoding.framework; path = "Build/MetaWear/Build/Products/Debug-appletvos/FastCoding-tvOS/FastCoding.framework"; sourceTree = ""; }; - 40CBC8951D9B37040078573C /* MBLMetaBootTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = MBLMetaBootTests.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 40CBC8981D9B7D5E0078573C /* MagnetometerTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MagnetometerTests.m; sourceTree = ""; }; - 40D2A7081DC0192300916C7E /* MetaWearPrivate.podspec */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = MetaWearPrivate.podspec; path = ../MetaWearPrivate.podspec; sourceTree = ""; }; - 40F5A8BF1E8F1C4200BC143D /* accelerometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometer.rst; sourceTree = ""; }; - 40F5A8C01E8F1C4200BC143D /* accelerometerbmi160.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometerbmi160.rst; sourceTree = ""; }; - 40F5A8C11E8F1C4200BC143D /* accelerometermma8452q.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = accelerometermma8452q.rst; sourceTree = ""; }; - 40F5A8C21E8F1C4200BC143D /* advanced_features.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = advanced_features.rst; sourceTree = ""; }; - 40F5A8C31E8F1C4200BC143D /* ambient_light.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ambient_light.rst; sourceTree = ""; }; - 40F5A8C41E8F1C4200BC143D /* ambientlightltr329.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ambientlightltr329.rst; sourceTree = ""; }; - 40F5A8C51E8F1C4200BC143D /* ancs.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ancs.rst; sourceTree = ""; }; - 40F5A8C61E8F1C4200BC143D /* barometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = barometer.rst; sourceTree = ""; }; - 40F5A8C71E8F1C4200BC143D /* barometerbmp280.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = barometerbmp280.rst; sourceTree = ""; }; - 40F5A8C81E8F1C4200BC143D /* color_sensor_tcs3472.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = color_sensor_tcs3472.rst; sourceTree = ""; }; - 40F5A8C91E8F1C4200BC143D /* color_sensor.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = color_sensor.rst; sourceTree = ""; }; - 40F5A8CA1E8F1C4200BC143D /* conf.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = conf.py; sourceTree = ""; }; - 40F5A8CB1E8F1C4200BC143D /* core_modules.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = core_modules.rst; sourceTree = ""; }; - 40F5A8CC1E8F1C4200BC143D /* data_processor.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = data_processor.rst; sourceTree = ""; }; - 40F5A8CD1E8F1C4200BC143D /* data.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = data.rst; sourceTree = ""; }; - 40F5A8CE1E8F1C4200BC143D /* events.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = events.rst; sourceTree = ""; }; - 40F5A8CF1E8F1C4200BC143D /* gpio.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gpio.rst; sourceTree = ""; }; - 40F5A8D01E8F1C4200BC143D /* gyro.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gyro.rst; sourceTree = ""; }; - 40F5A8D11E8F1C4200BC143D /* gyrobmi160.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = gyrobmi160.rst; sourceTree = ""; }; - 40F5A8D21E8F1C4200BC143D /* haptic.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = haptic.rst; sourceTree = ""; }; - 40F5A8D31E8F1C4200BC143D /* humidity_bme280.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = humidity_bme280.rst; sourceTree = ""; }; - 40F5A8D41E8F1C4200BC143D /* humidity.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = humidity.rst; sourceTree = ""; }; - 40F5A8D51E8F1C4200BC143D /* ibeacon.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ibeacon.rst; sourceTree = ""; }; - 40F5A8D61E8F1C4200BC143D /* index.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = index.rst; sourceTree = ""; }; - 40F5A8D71E8F1C4200BC143D /* led.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = led.rst; sourceTree = ""; }; - 40F5A8D81E8F1C4200BC143D /* magnetometer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = magnetometer.rst; sourceTree = ""; }; - 40F5A8D91E8F1C4200BC143D /* magnetometerbmm150.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = magnetometerbmm150.rst; sourceTree = ""; }; - 40F5A8DA1E8F1C4200BC143D /* metawear_manager.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = metawear_manager.rst; sourceTree = ""; }; - 40F5A8DB1E8F1C4200BC143D /* metawearboard.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = metawearboard.rst; sourceTree = ""; }; - 40F5A8DC1E8F1C4200BC143D /* neopixel.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = neopixel.rst; sourceTree = ""; }; - 40F5A8DD1E8F1C4200BC143D /* peripherals.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = peripherals.rst; sourceTree = ""; }; - 40F5A8DE1E8F1C4200BC143D /* project_setup.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = project_setup.rst; sourceTree = ""; }; - 40F5A8DF1E8F1C4200BC143D /* proximity_tsl2671.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = proximity_tsl2671.rst; sourceTree = ""; }; - 40F5A8E01E8F1C4200BC143D /* proximity.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = proximity.rst; sourceTree = ""; }; - 40F5A8E11E8F1C4200BC143D /* pushbutton.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = pushbutton.rst; sourceTree = ""; }; - 40F5A8E21E8F1C4200BC143D /* sensor_fusion.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sensor_fusion.rst; sourceTree = ""; }; - 40F5A8E31E8F1C4200BC143D /* sensors.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = sensors.rst; sourceTree = ""; }; - 40F5A8E41E8F1C4200BC143D /* serial_passthrough.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = serial_passthrough.rst; sourceTree = ""; }; - 40F5A8E51E8F1C4200BC143D /* settings.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = settings.rst; sourceTree = ""; }; - 40F5A8E61E8F1C4200BC143D /* temperature.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = temperature.rst; sourceTree = ""; }; - 40F5A8E71E8F1C4200BC143D /* timer.rst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = timer.rst; sourceTree = ""; }; 484B02B57C8B8237F94E2B65 /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWearIntegrationTests-tvOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.release.xcconfig"; sourceTree = ""; }; 4C9766F13CD493411988E405 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig"; sourceTree = ""; }; 54E10821F9CD84FE00E1EFAA /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig"; sourceTree = ""; }; @@ -258,11 +190,14 @@ 7DB1D5FB2C9DF1B999A30C40 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig"; sourceTree = ""; }; 8A9274E932D0BA7E8B3AB8D3 /* Pods_MetaWearIntegrationTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9614BF1F256D2E9766AF51F3 /* Pods_MetaWearIntegrationTests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AB3382D0AA93F53F82426A6B /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig"; sourceTree = ""; }; + B5F7D42585D28D4745E3E01A /* Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B8191DF79A938D05A40C4647 /* Pods_MetaWearIntegrationTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BFFE3806FA2AEB7E46E264A0 /* Pods-MetaWearIntegrationTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWearIntegrationTests-macOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.debug.xcconfig"; sourceTree = ""; }; C258274DBAC14BFD8411CF49 /* Pods-MetaWearIntegrationTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWearIntegrationTests-iOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.release.xcconfig"; sourceTree = ""; }; C4639C9104CACAD62933611C /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; C9B9653403BEAE2CC84C0280 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig"; sourceTree = ""; }; + D5BA4F01FBBB9FB3A6F3CD11 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig"; path = "Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig"; sourceTree = ""; }; E1E34DFCA4063CE2A07A83BF /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E5511FEC9D23EDED11DA652A /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E8ED5F56A688455F38CFF3F5 /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -273,6 +208,21 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 37D415863D591D11861A8862 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4040583B209A83CB00591D6B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + B7E4C1EC3139AFCD24132488 /* Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 40703E031D94AE3500F38FF0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -348,78 +298,31 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 400655BA1D9A0D920066AB54 /* AdvancedSetups */ = { + 40405833209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS */ = { isa = PBXGroup; children = ( - 40703EC41D94C3C100F38FF0 /* SendBytesTest.m */, + 40405834209A83CA00591D6B /* Interface.storyboard */, + 40405837209A83CB00591D6B /* Assets.xcassets */, + 40405839209A83CB00591D6B /* Info.plist */, ); - name = AdvancedSetups; + path = "MetaWearIntegrationTestHost-watchOS"; sourceTree = ""; }; - 402B7E181DADA696005F81D3 /* Docs */ = { + 40405842209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension */ = { isa = PBXGroup; children = ( - 400C47D91E8F1CEF00F72568 /* gen_api_reference.sh */, - 40F5A8BF1E8F1C4200BC143D /* accelerometer.rst */, - 40F5A8C01E8F1C4200BC143D /* accelerometerbmi160.rst */, - 40F5A8C11E8F1C4200BC143D /* accelerometermma8452q.rst */, - 40F5A8C21E8F1C4200BC143D /* advanced_features.rst */, - 40F5A8C31E8F1C4200BC143D /* ambient_light.rst */, - 40F5A8C41E8F1C4200BC143D /* ambientlightltr329.rst */, - 40F5A8C51E8F1C4200BC143D /* ancs.rst */, - 40F5A8C61E8F1C4200BC143D /* barometer.rst */, - 40F5A8C71E8F1C4200BC143D /* barometerbmp280.rst */, - 40F5A8C81E8F1C4200BC143D /* color_sensor_tcs3472.rst */, - 40F5A8C91E8F1C4200BC143D /* color_sensor.rst */, - 40F5A8CA1E8F1C4200BC143D /* conf.py */, - 40F5A8CB1E8F1C4200BC143D /* core_modules.rst */, - 40F5A8CC1E8F1C4200BC143D /* data_processor.rst */, - 40F5A8CD1E8F1C4200BC143D /* data.rst */, - 40F5A8CE1E8F1C4200BC143D /* events.rst */, - 40F5A8CF1E8F1C4200BC143D /* gpio.rst */, - 40F5A8D01E8F1C4200BC143D /* gyro.rst */, - 40F5A8D11E8F1C4200BC143D /* gyrobmi160.rst */, - 40F5A8D21E8F1C4200BC143D /* haptic.rst */, - 40F5A8D31E8F1C4200BC143D /* humidity_bme280.rst */, - 40F5A8D41E8F1C4200BC143D /* humidity.rst */, - 40F5A8D51E8F1C4200BC143D /* ibeacon.rst */, - 40F5A8D61E8F1C4200BC143D /* index.rst */, - 40F5A8D71E8F1C4200BC143D /* led.rst */, - 40F5A8D81E8F1C4200BC143D /* magnetometer.rst */, - 40F5A8D91E8F1C4200BC143D /* magnetometerbmm150.rst */, - 40F5A8DA1E8F1C4200BC143D /* metawear_manager.rst */, - 40F5A8DB1E8F1C4200BC143D /* metawearboard.rst */, - 40F5A8DC1E8F1C4200BC143D /* neopixel.rst */, - 40F5A8DD1E8F1C4200BC143D /* peripherals.rst */, - 40F5A8DE1E8F1C4200BC143D /* project_setup.rst */, - 40F5A8DF1E8F1C4200BC143D /* proximity_tsl2671.rst */, - 40F5A8E01E8F1C4200BC143D /* proximity.rst */, - 40F5A8E11E8F1C4200BC143D /* pushbutton.rst */, - 40F5A8E21E8F1C4200BC143D /* sensor_fusion.rst */, - 40F5A8E31E8F1C4200BC143D /* sensors.rst */, - 40F5A8E41E8F1C4200BC143D /* serial_passthrough.rst */, - 40F5A8E51E8F1C4200BC143D /* settings.rst */, - 40F5A8E61E8F1C4200BC143D /* temperature.rst */, - 40F5A8E71E8F1C4200BC143D /* timer.rst */, - ); - name = Docs; - path = ../Docs/source; + 40405843209A83CB00591D6B /* InterfaceController.swift */, + 40405845209A83CB00591D6B /* ExtensionDelegate.swift */, + 40405847209A83CC00591D6B /* Assets.xcassets */, + 40405849209A83CC00591D6B /* Info.plist */, + ); + path = "MetaWearIntegrationTestHost-watchOS Extension"; sourceTree = ""; }; 40703E0E1D94AE5000F38FF0 /* Unit */ = { isa = PBXGroup; children = ( - 407085221DCA55C200AAEB33 /* MetaWearSyntaxFriendly.h */, - 40703E131D94AE5000F38FF0 /* MBLMockMetaWearUnitTest.h */, - 40703E141D94AE5000F38FF0 /* MBLMockMetaWearUnitTest.m */, - 400655CC1D9A46FF0066AB54 /* MBLConnectionTests.m */, - 400655D01D9A67B60066AB54 /* MBLMetaWearTests.m */, - 4009E36B1FE1B8C7009509CB /* MBLRegisterTests.m */, - 40CBC8951D9B37040078573C /* MBLMetaBootTests.m */, - 40703E0F1D94AE5000F38FF0 /* MBLAutomaticTests.m */, - 40703E101D94AE5000F38FF0 /* MBLConverstionTests.m */, - 40703E111D94AE5000F38FF0 /* MBLEnabling.m */, - 40703E121D94AE5000F38FF0 /* MBLLogDatabase.m */, + 404057AC209A796300591D6B /* FirmwareTests.swift */, 40703E1C1D94AE7200F38FF0 /* Supporting Files */, ); path = Unit; @@ -453,8 +356,6 @@ children = ( 40703E731D94C0AB00F38FF0 /* AppDelegate.h */, 40703E741D94C0AB00F38FF0 /* AppDelegate.m */, - 400655B51D9A017D0066AB54 /* ViewController.h */, - 400655B61D9A017D0066AB54 /* ViewController.m */, 40703E781D94C0AB00F38FF0 /* Main.storyboard */, 40703E761D94C0AB00F38FF0 /* LaunchScreen.storyboard */, 40703E7A1D94C0AB00F38FF0 /* Info.plist */, @@ -474,20 +375,8 @@ 40703EB01D94C3C100F38FF0 /* Integration */ = { isa = PBXGroup; children = ( - 407085211DCA555E00AAEB33 /* MetaWearSyntaxFriendly.h */, - 400655BA1D9A0D920066AB54 /* AdvancedSetups */, - 40915FC01D94D1E6008A5F24 /* DeviceConfigurations */, - 40703EC11D94C3C100F38FF0 /* MetaWearTest.h */, - 40703EC21D94C3C100F38FF0 /* MetaWearTest.m */, - 400655C01D9A0E090066AB54 /* EnablingTests.m */, - 40703EB61D94C3C100F38FF0 /* AutomaticTests.m */, - 403BF7721D9E342800B22B82 /* DFUTests.m */, - 40703EB41D94C3C100F38FF0 /* AccelerometerTests.m */, - 40703EC31D94C3C100F38FF0 /* MMA8452QTests.m */, - 40703EB71D94C3C100F38FF0 /* BMA255Tests.m */, - 40703EB81D94C3C100F38FF0 /* BMI160Tests.m */, - 400655B11D9A00BA0066AB54 /* ANCSTests.m */, - 40CBC8981D9B7D5E0078573C /* MagnetometerTests.m */, + 404057B0209A7CB700591D6B /* ManualTests.swift */, + 404057B1209A7CB700591D6B /* Tests.swift */, ); path = Integration; sourceTree = ""; @@ -504,21 +393,6 @@ path = "MetaWearIntegrationTestHost-tvOS"; sourceTree = ""; }; - 40915FC01D94D1E6008A5F24 /* DeviceConfigurations */ = { - isa = PBXGroup; - children = ( - 40703EC71D94C3C100F38FF0 /* TempLoggerConfiguration.h */, - 40703EC81D94C3C100F38FF0 /* TempLoggerConfiguration.m */, - 40703EBD1D94C3C100F38FF0 /* IncrementingEventConfig.h */, - 40703EBE1D94C3C100F38FF0 /* IncrementingEventConfig.m */, - 40703EB91D94C3C100F38FF0 /* ButtonConfig.h */, - 40703EBA1D94C3C100F38FF0 /* ButtonConfig.m */, - 40703EB21D94C3C100F38FF0 /* AccelConfig.h */, - 40703EB31D94C3C100F38FF0 /* AccelConfig.m */, - ); - name = DeviceConfigurations; - sourceTree = ""; - }; 40915FD91D94D3A1008A5F24 /* MetaWearIntegrationTestHost-macOS */ = { isa = PBXGroup; children = ( @@ -545,14 +419,12 @@ 40781F941D9DD1C400FF5134 /* main.m */, ); name = "Supporting Files"; - path = "../../MetaWearIntegrationTestHost-tvOS"; sourceTree = ""; }; 6003F581195388D10070C39A = { isa = PBXGroup; children = ( 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */, - 402B7E181DADA696005F81D3 /* Docs */, 6003F5B5195388D20070C39A /* Tests */, 6003F58C195388D20070C39A /* Frameworks */, 6003F58B195388D20070C39A /* Products */, @@ -572,6 +444,8 @@ 40781FE01D9DD41900FF5134 /* MetaWearUnitTests-tvOS.xctest */, 407820181D9DD60500FF5134 /* MetaWearIntegrationTestHost-tvOS.app */, 4078202D1D9DD60500FF5134 /* MetaWearIntegrationTests-tvOS.xctest */, + 40405832209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS.app */, + 4040583E209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension.appex */, ); name = Products; sourceTree = ""; @@ -592,6 +466,7 @@ B8191DF79A938D05A40C4647 /* Pods_MetaWearIntegrationTests_iOS.framework */, 8A9274E932D0BA7E8B3AB8D3 /* Pods_MetaWearIntegrationTests_macOS.framework */, 9614BF1F256D2E9766AF51F3 /* Pods_MetaWearIntegrationTests_tvOS.framework */, + B5F7D42585D28D4745E3E01A /* Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework */, ); name = Frameworks; sourceTree = ""; @@ -605,6 +480,8 @@ 40703E721D94C0AB00F38FF0 /* MetaWearIntegrationTestHost-iOS */, 40915FD91D94D3A1008A5F24 /* MetaWearIntegrationTestHost-macOS */, 40781F8C1D9DD16500FF5134 /* MetaWearIntegrationTestHost-tvOS */, + 40405833209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS */, + 40405842209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension */, ); path = Tests; sourceTree = ""; @@ -612,11 +489,9 @@ 60FF7A9C1954A5C5007DD14C /* Podspec Metadata */ = { isa = PBXGroup; children = ( - 40D2A7081DC0192300916C7E /* MetaWearPrivate.podspec */, 2E06F9C64AEA806D32581A30 /* MetaWear.podspec */, C4639C9104CACAD62933611C /* README.md */, 56D26D2541DE09EA81DA4175 /* LICENSE */, - 400655C51D9A1DF30066AB54 /* .travis.yml */, ); name = "Podspec Metadata"; sourceTree = ""; @@ -642,6 +517,8 @@ 6B17492B63AD8FBF5BC78DD6 /* Pods-MetaWearIntegrationTests-macOS.release.xcconfig */, 0BE7C944CE23C1660A3C623F /* Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig */, 484B02B57C8B8237F94E2B65 /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */, + AB3382D0AA93F53F82426A6B /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig */, + D5BA4F01FBBB9FB3A6F3CD11 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -649,6 +526,43 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 40405831209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 40405853209A83CC00591D6B /* Build configuration list for PBXNativeTarget "MetaWearIntegrationTestHost-watchOS" */; + buildPhases = ( + 40405830209A83CA00591D6B /* Resources */, + 40405852209A83CC00591D6B /* Embed App Extensions */, + 37D415863D591D11861A8862 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 40405841209A83CB00591D6B /* PBXTargetDependency */, + ); + name = "MetaWearIntegrationTestHost-watchOS"; + productName = "MetaWearIntegrationTestHost-watchOS"; + productReference = 40405832209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS.app */; + productType = "com.apple.product-type.application.watchapp2"; + }; + 4040583D209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 40405851209A83CC00591D6B /* Build configuration list for PBXNativeTarget "MetaWearIntegrationTestHost-watchOS Extension" */; + buildPhases = ( + 8DB2A51FA651028165A30686 /* [CP] Check Pods Manifest.lock */, + 4040583A209A83CB00591D6B /* Sources */, + 4040583B209A83CB00591D6B /* Frameworks */, + 4040583C209A83CB00591D6B /* Resources */, + 7506B69DF24E6E47DA895E75 /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "MetaWearIntegrationTestHost-watchOS Extension"; + productName = "MetaWearIntegrationTestHost-watchOS Extension"; + productReference = 4040583E209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension.appex */; + productType = "com.apple.product-type.watchkit2-extension"; + }; 40703E051D94AE3500F38FF0 /* MetaWearUnitTests-iOS */ = { isa = PBXNativeTarget; buildConfigurationList = 40703E0D1D94AE3500F38FF0 /* Build configuration list for PBXNativeTarget "MetaWearUnitTests-iOS" */; @@ -658,7 +572,6 @@ 40703E031D94AE3500F38FF0 /* Frameworks */, 40703E041D94AE3500F38FF0 /* Resources */, 346F7A67900D41D94213EBAA /* [CP] Embed Pods Frameworks */, - 33D71A76E323B9B206883FD3 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -678,7 +591,6 @@ 40703E2E1D94B8A700F38FF0 /* Frameworks */, 40703E2F1D94B8A700F38FF0 /* Resources */, E483B0530F48198DA665653E /* [CP] Embed Pods Frameworks */, - 4C09F1E7626F360333C9646E /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -698,11 +610,12 @@ 40703E581D94C06800F38FF0 /* Frameworks */, 40703E591D94C06800F38FF0 /* Resources */, 631C0B8F86757D22D29FFE29 /* [CP] Embed Pods Frameworks */, - 0137699022A7D0201A49436F /* [CP] Copy Pods Resources */, + 40405854209A83CC00591D6B /* Embed Watch Content */, ); buildRules = ( ); dependencies = ( + 4040584B209A83CC00591D6B /* PBXTargetDependency */, ); name = "MetaWearIntegrationTestHost-iOS"; productName = "MetaWearIntegrationTestHost-iOS"; @@ -718,7 +631,6 @@ 40703EA31D94C37500F38FF0 /* Frameworks */, 40703EA41D94C37500F38FF0 /* Resources */, 3E7FE9044A6EBB771B472483 /* [CP] Embed Pods Frameworks */, - 76059A12DB46EEA4A5EB2FAB /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -739,7 +651,6 @@ 40781FDD1D9DD41900FF5134 /* Frameworks */, 40781FDE1D9DD41900FF5134 /* Resources */, CD397537C4F0DF6A0CCBA718 /* [CP] Embed Pods Frameworks */, - 92FFBAC3FECF5C140A582577 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -759,7 +670,6 @@ 407820151D9DD60500FF5134 /* Frameworks */, 407820161D9DD60500FF5134 /* Resources */, 817CFAFEE002EA2071491BC4 /* [CP] Embed Pods Frameworks */, - 1A349ED794582B27B51054A6 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -778,8 +688,6 @@ 407820291D9DD60500FF5134 /* Sources */, 4078202A1D9DD60500FF5134 /* Frameworks */, 4078202B1D9DD60500FF5134 /* Resources */, - D9290FEB3A49E4F0B96D72C0 /* [CP] Embed Pods Frameworks */, - 2906418BAD5816F9166C3BBB /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -800,7 +708,6 @@ 40915FC21D94D392008A5F24 /* Frameworks */, 40915FC31D94D392008A5F24 /* Resources */, FBC90CCA537EF206514FE09B /* [CP] Embed Pods Frameworks */, - 77910CAAD6167CDAB0AC513B /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -820,7 +727,6 @@ 40915FEC1D94D478008A5F24 /* Frameworks */, 40915FED1D94D478008A5F24 /* Resources */, ACF38D7B5EFF0974AB9F807B /* [CP] Embed Pods Frameworks */, - 8320841632EE48A195255044 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -839,17 +745,30 @@ isa = PBXProject; attributes = { CLASSPREFIX = MBL; - LastUpgradeCheck = 0920; + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; ORGANIZATIONNAME = "Stephen Schiffli"; TargetAttributes = { + 40405831209A83CA00591D6B = { + CreatedOnToolsVersion = 9.3; + DevelopmentTeam = S2273LZ6GL; + ProvisioningStyle = Automatic; + }; + 4040583D209A83CB00591D6B = { + CreatedOnToolsVersion = 9.3; + DevelopmentTeam = S2273LZ6GL; + ProvisioningStyle = Automatic; + }; 40703E051D94AE3500F38FF0 = { CreatedOnToolsVersion = 8.0; DevelopmentTeam = S2273LZ6GL; + LastSwiftMigration = 0930; ProvisioningStyle = Automatic; }; 40703E301D94B8A700F38FF0 = { CreatedOnToolsVersion = 8.0; DevelopmentTeam = S2273LZ6GL; + LastSwiftMigration = 0930; ProvisioningStyle = Automatic; }; 40703E5A1D94C06800F38FF0 = { @@ -865,12 +784,14 @@ 40703EA51D94C37500F38FF0 = { CreatedOnToolsVersion = 8.0; DevelopmentTeam = S2273LZ6GL; + LastSwiftMigration = 0930; ProvisioningStyle = Automatic; TestTargetID = 40703E5A1D94C06800F38FF0; }; 40781FDF1D9DD41900FF5134 = { CreatedOnToolsVersion = 8.0; DevelopmentTeam = S2273LZ6GL; + LastSwiftMigration = 0930; ProvisioningStyle = Automatic; }; 407820171D9DD60500FF5134 = { @@ -886,6 +807,7 @@ 4078202C1D9DD60500FF5134 = { CreatedOnToolsVersion = 8.0; DevelopmentTeam = S2273LZ6GL; + LastSwiftMigration = 0930; ProvisioningStyle = Automatic; TestTargetID = 407820171D9DD60500FF5134; }; @@ -897,6 +819,7 @@ 40915FEE1D94D478008A5F24 = { CreatedOnToolsVersion = 8.0; DevelopmentTeam = S2273LZ6GL; + LastSwiftMigration = 0930; ProvisioningStyle = Automatic; TestTargetID = 40915FC41D94D392008A5F24; }; @@ -924,11 +847,30 @@ 40781FDF1D9DD41900FF5134 /* MetaWearUnitTests-tvOS */, 407820171D9DD60500FF5134 /* MetaWearIntegrationTestHost-tvOS */, 4078202C1D9DD60500FF5134 /* MetaWearIntegrationTests-tvOS */, + 40405831209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS */, + 4040583D209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 40405830209A83CA00591D6B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40405838209A83CB00591D6B /* Assets.xcassets in Resources */, + 40405836209A83CA00591D6B /* Interface.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4040583C209A83CB00591D6B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40405848209A83CC00591D6B /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 40703E041D94AE3500F38FF0 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -936,7 +878,6 @@ 40969D921F96B63A0024C2ED /* metawearmmr-r0.2-r1.3.4.zip in Resources */, 4078203E1D9DD6B200FF5134 /* MetaWearIntegrationTests-tvOS-Info.plist in Resources */, 40969D911F96B63A0024C2ED /* metawearmmc-r0.1-r1.3.5.zip in Resources */, - 40D2A7091DC0192300916C7E /* MetaWearPrivate.podspec in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1013,21 +954,6 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 0137699022A7D0201A49436F /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 02E81058C53AD24BA4DBAD91 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1064,21 +990,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 1A349ED794582B27B51054A6 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 1ECA979582EC73A7433D3C9D /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1097,36 +1008,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 2906418BAD5816F9166C3BBB /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 33D71A76E323B9B206883FD3 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 346F7A67900D41D94213EBAA /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1134,14 +1015,12 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework", - "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-iOS/MetaWear.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework", + "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -1169,21 +1048,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 4C09F1E7626F360333C9646E /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 631C0B8F86757D22D29FFE29 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1191,14 +1055,12 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework", - "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-iOS/MetaWear.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework", + "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -1224,34 +1086,24 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 76059A12DB46EEA4A5EB2FAB /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 77910CAAD6167CDAB0AC513B /* [CP] Copy Pods Resources */ = { + 7506B69DF24E6E47DA895E75 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-watchOS/BoltsSwift.framework", + "${BUILT_PRODUCTS_DIR}/MetaWear-watchOS/MetaWear.framework", ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh\"\n"; + shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 7B23486CC0856302ADECCB77 /* [CP] Check Pods Manifest.lock */ = { @@ -1279,14 +1131,12 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework", - "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-tvOS/MetaWear.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework", + "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -1294,19 +1144,22 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 8320841632EE48A195255044 /* [CP] Copy Pods Resources */ = { + 8DB2A51FA651028165A30686 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Copy Pods Resources"; + name = "[CP] Check Pods Manifest.lock"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-resources.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; 9247577DE79F1381D2AB2BAE /* [CP] Check Pods Manifest.lock */ = { @@ -1327,21 +1180,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - 92FFBAC3FECF5C140A582577 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; ACF38D7B5EFF0974AB9F807B /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1405,14 +1243,12 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework", - "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-tvOS/MetaWear.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework", + "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -1438,21 +1274,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - D9290FEB3A49E4F0B96D72C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Embed Pods Frameworks"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; E483B0530F48198DA665653E /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -1460,14 +1281,12 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework", - "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-macOS/MetaWear.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework", + "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -1482,14 +1301,12 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework", - "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-macOS/MetaWear.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework", + "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -1500,17 +1317,20 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 4040583A209A83CB00591D6B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 40405846209A83CB00591D6B /* ExtensionDelegate.swift in Sources */, + 40405844209A83CB00591D6B /* InterfaceController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 40703E021D94AE3500F38FF0 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 400655C31D9A19720066AB54 /* MBLAutomaticTests.m in Sources */, - 4009E36C1FE1B8C7009509CB /* MBLRegisterTests.m in Sources */, - 400655CE1D9A479A0066AB54 /* MBLConnectionTests.m in Sources */, - 40703E281D94B09600F38FF0 /* MBLConverstionTests.m in Sources */, - 400655D11D9A67FD0066AB54 /* MBLMetaWearTests.m in Sources */, - 40CBC8961D9B37580078573C /* MBLMetaBootTests.m in Sources */, - 400655A71D98BE920066AB54 /* MBLMockMetaWearUnitTest.m in Sources */, + 404057AD209A796400591D6B /* FirmwareTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1518,13 +1338,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 400655C41D9A19720066AB54 /* MBLAutomaticTests.m in Sources */, - 4009E36D1FE1B8C7009509CB /* MBLRegisterTests.m in Sources */, - 400655CD1D9A47990066AB54 /* MBLConnectionTests.m in Sources */, - 40703E3A1D94B8CA00F38FF0 /* MBLConverstionTests.m in Sources */, - 400655D21D9A67FD0066AB54 /* MBLMetaWearTests.m in Sources */, - 40CBC8971D9B37590078573C /* MBLMetaBootTests.m in Sources */, - 400655A81D98BE920066AB54 /* MBLMockMetaWearUnitTest.m in Sources */, + 404057AE209A796400591D6B /* FirmwareTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1532,7 +1346,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 400655B71D9A01820066AB54 /* ViewController.m in Sources */, 40703E861D94C0F000F38FF0 /* main.m in Sources */, 40703E831D94C0DB00F38FF0 /* AppDelegate.m in Sources */, ); @@ -1542,21 +1355,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 40703EE01D94C3EB00F38FF0 /* AccelConfig.m in Sources */, - 400655B31D9A00C10066AB54 /* ANCSTests.m in Sources */, - 400655AD1D99FEED0066AB54 /* BMI160Tests.m in Sources */, - 400655BD1D9A0DE40066AB54 /* BMA255Tests.m in Sources */, - 400655BB1D9A0DD70066AB54 /* AccelerometerTests.m in Sources */, - 40703EE31D94C3EB00F38FF0 /* AutomaticTests.m in Sources */, - 40703EE61D94C3EB00F38FF0 /* ButtonConfig.m in Sources */, - 400655C11D9A0E300066AB54 /* EnablingTests.m in Sources */, - 40CBC8991D9B7D620078573C /* MagnetometerTests.m in Sources */, - 40703EF01D94C3EB00F38FF0 /* TempLoggerConfiguration.m in Sources */, - 400655B81D9A0C510066AB54 /* SendBytesTest.m in Sources */, - 400655AB1D99FD4A0066AB54 /* MMA8452QTests.m in Sources */, - 403BF7731D9E348000B22B82 /* DFUTests.m in Sources */, - 40703EEB1D94C3EB00F38FF0 /* MetaWearTest.m in Sources */, - 40703EE81D94C3EB00F38FF0 /* IncrementingEventConfig.m in Sources */, + 404057B2209A7CB700591D6B /* ManualTests.swift in Sources */, + 404057B5209A7CB700591D6B /* Tests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1564,13 +1364,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 40F4C1B81DAF3EBC00DAD8F6 /* MBLConverstionTests.m in Sources */, - 4009E36E1FE1B8C7009509CB /* MBLRegisterTests.m in Sources */, - 407820131D9DD5EB00FF5134 /* MBLMockMetaWearUnitTest.m in Sources */, - 40F4C1B51DAF3EB100DAD8F6 /* MBLMetaWearTests.m in Sources */, - 40F4C1B61DAF3EB600DAD8F6 /* MBLMetaBootTests.m in Sources */, - 40F4C1B71DAF3EB900DAD8F6 /* MBLAutomaticTests.m in Sources */, - 407820461D9DD84500FF5134 /* MBLConnectionTests.m in Sources */, + 404057AF209A796400591D6B /* FirmwareTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1587,12 +1381,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 407820401D9DD7C000FF5134 /* MetaWearTest.m in Sources */, - 407820421D9DD7DB00FF5134 /* TempLoggerConfiguration.m in Sources */, - 407820411D9DD7C800FF5134 /* AutomaticTests.m in Sources */, - 407820451D9DD7DB00FF5134 /* AccelConfig.m in Sources */, - 407820431D9DD7DB00FF5134 /* IncrementingEventConfig.m in Sources */, - 407820441D9DD7DB00FF5134 /* ButtonConfig.m in Sources */, + 404057B4209A7CB700591D6B /* ManualTests.swift in Sources */, + 404057B7209A7CB700591D6B /* Tests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1609,26 +1399,24 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 40915FF71D94D4BB008A5F24 /* TempLoggerConfiguration.m in Sources */, - 400655B41D9A00C20066AB54 /* ANCSTests.m in Sources */, - 400655AE1D99FEEE0066AB54 /* BMI160Tests.m in Sources */, - 400655BE1D9A0DE50066AB54 /* BMA255Tests.m in Sources */, - 400655BC1D9A0DD80066AB54 /* AccelerometerTests.m in Sources */, - 40915FF81D94D4BB008A5F24 /* IncrementingEventConfig.m in Sources */, - 40915FFA1D94D4BB008A5F24 /* AccelConfig.m in Sources */, - 400655C21D9A0E310066AB54 /* EnablingTests.m in Sources */, - 40CBC89A1D9B7D630078573C /* MagnetometerTests.m in Sources */, - 40915FF91D94D4BB008A5F24 /* ButtonConfig.m in Sources */, - 400655B91D9A0C530066AB54 /* SendBytesTest.m in Sources */, - 400655AC1D99FD4C0066AB54 /* MMA8452QTests.m in Sources */, - 40915FFE1D94D4BB008A5F24 /* AutomaticTests.m in Sources */, - 409160041D94D4BB008A5F24 /* MetaWearTest.m in Sources */, + 404057B3209A7CB700591D6B /* ManualTests.swift in Sources */, + 404057B6209A7CB700591D6B /* Tests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 40405841209A83CB00591D6B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 4040583D209A83CB00591D6B /* MetaWearIntegrationTestHost-watchOS Extension */; + targetProxy = 40405840209A83CB00591D6B /* PBXContainerItemProxy */; + }; + 4040584B209A83CC00591D6B /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 40405831209A83CA00591D6B /* MetaWearIntegrationTestHost-watchOS */; + targetProxy = 4040584A209A83CC00591D6B /* PBXContainerItemProxy */; + }; 40703EAF1D94C39F00F38FF0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 40703E5A1D94C06800F38FF0 /* MetaWearIntegrationTestHost-iOS */; @@ -1647,6 +1435,14 @@ /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ + 40405834209A83CA00591D6B /* Interface.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 40405835209A83CA00591D6B /* Base */, + ); + name = Interface.storyboard; + sourceTree = ""; + }; 40703E761D94C0AB00F38FF0 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( @@ -1683,11 +1479,126 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 4040584D209A83CC00591D6B /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = S2273LZ6GL; + GCC_C_LANGUAGE_STANDARD = gnu11; + IBSC_MODULE = MetaWearIntegrationTestHost_watchOS_Extension; + INFOPLIST_FILE = "Tests/MetaWearIntegrationTestHost-watchOS/Info.plist"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTestHost-iOS.watchkitapp"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 4; + }; + name = Debug; + }; + 4040584E209A83CC00591D6B /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = S2273LZ6GL; + GCC_C_LANGUAGE_STANDARD = gnu11; + IBSC_MODULE = MetaWearIntegrationTestHost_watchOS_Extension; + INFOPLIST_FILE = "Tests/MetaWearIntegrationTestHost-watchOS/Info.plist"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTestHost-iOS.watchkitapp"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 4; + }; + name = Release; + }; + 4040584F209A83CC00591D6B /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AB3382D0AA93F53F82426A6B /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = S2273LZ6GL; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Tests/MetaWearIntegrationTestHost-watchOS Extension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = YES; + PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTestHost-iOS.watchkitapp.watchkitextension"; + PRODUCT_NAME = "${TARGET_NAME}"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 4; + }; + name = Debug; + }; + 40405850209A83CC00591D6B /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = D5BA4F01FBBB9FB3A6F3CD11 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CODE_SIGN_STYLE = Automatic; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = S2273LZ6GL; + GCC_C_LANGUAGE_STANDARD = gnu11; + INFOPLIST_FILE = "Tests/MetaWearIntegrationTestHost-watchOS Extension/Info.plist"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTestHost-iOS.watchkitapp.watchkitextension"; + PRODUCT_NAME = "${TARGET_NAME}"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 4; + }; + name = Release; + }; 40703E0B1D94AE3500F38FF0 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 4C9766F13CD493411988E405 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; DEBUG_INFORMATION_FORMAT = dwarf; @@ -1698,12 +1609,13 @@ "MBL_UNIT_TEST=1", ); INFOPLIST_FILE = "Tests/Resources/MetaWearUnitTests-iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearUnitTests-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = iphonesimulator; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -1712,6 +1624,7 @@ baseConfigurationReference = 7DB1D5FB2C9DF1B999A30C40 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; COPY_PHASE_STRIP = NO; @@ -1723,12 +1636,12 @@ "MBL_UNIT_TEST=1", ); INFOPLIST_FILE = "Tests/Resources/MetaWearUnitTests-iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearUnitTests-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = iphonesimulator; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -1737,6 +1650,7 @@ baseConfigurationReference = F9A1816D273EAF6C594AB9B9 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; CODE_SIGN_IDENTITY = "-"; @@ -1749,13 +1663,13 @@ "MBL_UNIT_TEST=1", ); INFOPLIST_FILE = "Tests/Resources/MetaWearUnitTests-macOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearUnitTests-macOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; }; name = Debug; }; @@ -1764,6 +1678,7 @@ baseConfigurationReference = 315922240872C094896F86A5 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; CODE_SIGN_IDENTITY = "-"; @@ -1777,13 +1692,12 @@ "MBL_UNIT_TEST=1", ); INFOPLIST_FILE = "Tests/Resources/MetaWearUnitTests-macOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearUnitTests-macOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_VERSION = 3.0; }; name = Release; }; @@ -1798,7 +1712,6 @@ DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = "Tests/MetaWearIntegrationTestHost-iOS/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTestHost-iOS"; @@ -1819,7 +1732,6 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = "Tests/MetaWearIntegrationTestHost-iOS/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTestHost-iOS"; @@ -1832,20 +1744,21 @@ isa = XCBuildConfiguration; baseConfigurationReference = 0BC206FACF309897F345A691 /* Pods-MetaWearIntegrationTests-iOS.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = "Tests/Resources/MetaWearIntegrationTests-iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTests-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = iphoneos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MetaWearIntegrationTestHost-iOS.app/MetaWearIntegrationTestHost-iOS"; }; name = Debug; @@ -1854,8 +1767,8 @@ isa = XCBuildConfiguration; baseConfigurationReference = C258274DBAC14BFD8411CF49 /* Pods-MetaWearIntegrationTests-iOS.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; @@ -1863,12 +1776,12 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = "Tests/Resources/MetaWearIntegrationTests-iOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTests-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SUPPORTED_PLATFORMS = iphoneos; + SWIFT_VERSION = 3.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MetaWearIntegrationTestHost-iOS.app/MetaWearIntegrationTestHost-iOS"; }; name = Release; @@ -1878,6 +1791,7 @@ baseConfigurationReference = 54E10821F9CD84FE00E1EFAA /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; DEBUG_INFORMATION_FORMAT = dwarf; @@ -1888,8 +1802,9 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearUnitTests-tvOSTests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Debug; }; @@ -1898,6 +1813,7 @@ baseConfigurationReference = 372F4EFD8A378C461EB0D023 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig */; buildSettings = { CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; COPY_PHASE_STRIP = NO; @@ -1909,8 +1825,8 @@ PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearUnitTests-tvOSTests"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Release; }; @@ -1932,7 +1848,6 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Debug; }; @@ -1955,7 +1870,6 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Release; }; @@ -1965,6 +1879,7 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; DEBUG_INFORMATION_FORMAT = dwarf; @@ -1976,9 +1891,10 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SUPPORTED_PLATFORMS = appletvos; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MetaWearIntegrationTestHost-tvOS.app/MetaWearIntegrationTestHost-tvOS"; - TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Debug; }; @@ -1988,6 +1904,7 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; COPY_PHASE_STRIP = NO; @@ -2000,9 +1917,9 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; SUPPORTED_PLATFORMS = appletvos; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MetaWearIntegrationTestHost-tvOS.app/MetaWearIntegrationTestHost-tvOS"; - TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Release; }; @@ -2019,9 +1936,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = "Tests/MetaWearIntegrationTestHost-macOS/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTestHost-macOS"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2043,9 +1958,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = "Tests/MetaWearIntegrationTestHost-macOS/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTestHost-macOS"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -2057,8 +1970,8 @@ isa = XCBuildConfiguration; baseConfigurationReference = BFFE3806FA2AEB7E46E264A0 /* Pods-MetaWearIntegrationTests-macOS.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; CODE_SIGN_IDENTITY = "-"; @@ -2066,13 +1979,13 @@ DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = "Tests/Resources/MetaWearIntegrationTests-macOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTests-macOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MetaWearIntegrationTestHost-macOS.app/Contents/MacOS/MetaWearIntegrationTestHost-macOS"; }; name = Debug; @@ -2081,8 +1994,8 @@ isa = XCBuildConfiguration; baseConfigurationReference = 6B17492B63AD8FBF5BC78DD6 /* Pods-MetaWearIntegrationTests-macOS.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ANALYZER_NONNULL = YES; + CLANG_ENABLE_MODULES = YES; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_SUSPICIOUS_MOVES = YES; CODE_SIGN_IDENTITY = "-"; @@ -2091,13 +2004,12 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = "Tests/Resources/MetaWearIntegrationTests-macOS-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.mbientlab.MetaWearIntegrationTests-macOS"; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = macosx; + SWIFT_VERSION = 3.0; TEST_HOST = "$(BUILT_PRODUCTS_DIR)/MetaWearIntegrationTestHost-macOS.app/Contents/MacOS/MetaWearIntegrationTestHost-macOS"; }; name = Release; @@ -2114,12 +2026,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -2146,11 +2060,13 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MACOSX_DEPLOYMENT_TARGET = 10.13; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_DEPLOYMENT_TARGET = 10.0; + WATCHOS_DEPLOYMENT_TARGET = 4.0; }; name = Debug; }; @@ -2166,12 +2082,14 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -2191,17 +2109,37 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MACOSX_DEPLOYMENT_TARGET = 10.13; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_DEPLOYMENT_TARGET = 10.0; VALIDATE_PRODUCT = YES; + WATCHOS_DEPLOYMENT_TARGET = 4.0; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 40405851209A83CC00591D6B /* Build configuration list for PBXNativeTarget "MetaWearIntegrationTestHost-watchOS Extension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4040584F209A83CC00591D6B /* Debug */, + 40405850209A83CC00591D6B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 40405853209A83CC00591D6B /* Build configuration list for PBXNativeTarget "MetaWearIntegrationTestHost-watchOS" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 4040584D209A83CC00591D6B /* Debug */, + 4040584E209A83CC00591D6B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 40703E0D1D94AE3500F38FF0 /* Build configuration list for PBXNativeTarget "MetaWearUnitTests-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/MetaWear/MetaWear.xcodeproj/xcshareddata/xcschemes/MetaWearDFU.xcscheme b/MetaWear/MetaWear.xcodeproj/xcshareddata/xcschemes/MetaWearDFU.xcscheme index 4cd3177..5412183 100644 --- a/MetaWear/MetaWear.xcodeproj/xcshareddata/xcschemes/MetaWearDFU.xcscheme +++ b/MetaWear/MetaWear.xcodeproj/xcshareddata/xcschemes/MetaWearDFU.xcscheme @@ -1,6 +1,6 @@ + codeCoverageEnabled = "YES" + shouldUseLaunchSchemeArgsEnv = "NO"> @@ -55,7 +54,6 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - language = "" launchStyle = "0" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" diff --git a/MetaWear/MetaWear.xcodeproj/xcshareddata/xcschemes/MetaWearUnitTests-macOS.xcscheme b/MetaWear/MetaWear.xcodeproj/xcshareddata/xcschemes/MetaWearUnitTests-macOS.xcscheme index f43a5d2..52f81db 100644 --- a/MetaWear/MetaWear.xcodeproj/xcshareddata/xcschemes/MetaWearUnitTests-macOS.xcscheme +++ b/MetaWear/MetaWear.xcodeproj/xcshareddata/xcschemes/MetaWearUnitTests-macOS.xcscheme @@ -1,6 +1,6 @@ + + + + IDEDidComputeMac32BitWarning + + + diff --git a/MetaWear/Mocks/MetaWear+Mock.swift b/MetaWear/Mocks/MetaWear+Mock.swift new file mode 100644 index 0000000..e477aad --- /dev/null +++ b/MetaWear/Mocks/MetaWear+Mock.swift @@ -0,0 +1,90 @@ +/** + * MockMetaWear.swift + * MetaWear-Swift + * + * Created by Stephen Schiffli on 12/14/17. + * Copyright 2017 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import CoreBluetooth +import MetaWearCpp + +class MockPeripheral: CBPeripheral { + private var mockName: String? + override var name: String? { + get { return mockName } + set { mockName = newValue } + } + private var mockIdentifier: UUID + override var identifier: UUID { + get { return mockIdentifier } + set { mockIdentifier = newValue } + } + private init(id: String, name: String? = nil) { + self.mockName = name + self.mockIdentifier = UUID(uuidString: id)! + } + static func create(id: String, name: String? = nil) -> CBPeripheral { + let peripheral = MockPeripheral(id: id, name: name) + // This is needed to prevent crashing when disposed + peripheral.addObserver(peripheral, forKeyPath: #keyPath(MockPeripheral.delegate), options: [], context: nil) + return peripheral + } +} + +extension DeviceInformation { + static let metaMotionC = DeviceInformation( + manufacturer: "MbientLab Inc", + modelNumber: "6", + serialNumber: "FFFFFF", + firmwareRevision: "1.3.6", + hardwareRevision: "0.1" + ) + static let metaMotionR = DeviceInformation( + manufacturer: "MbientLab Inc", + modelNumber: "5", + serialNumber: "FFFFFF", + firmwareRevision: "1.3.6", + hardwareRevision: "0.2" + ) +} + +extension MetaWear { + static func spoof(name: String = "unittest", + id: String = "CC5CEEF1-C8B9-47BF-9B5D-E7329CED353D", + mac: String = "BA:AA:AD:F0:00:0D", + info: DeviceInformation = .metaMotionC) -> MetaWear { + let peripheral = MockPeripheral.create(id: id, name: name) + let device = MetaWear(peripheral: peripheral, scanner: MetaWearScanner.shared) + device.mac = mac + device.info = info + return device + } +} diff --git a/MetaWear/Podfile b/MetaWear/Podfile index 012bb98..c55dc43 100644 --- a/MetaWear/Podfile +++ b/MetaWear/Podfile @@ -1,11 +1,10 @@ use_frameworks! -# All tests need access to the Private headers of MetaWear abstract_target 'MetaWear' do - pod 'MetaWearPrivate', :path => '../' + pod 'MetaWear', :subspecs => ['UI', 'AsyncUtils', 'Mocks'], :path => '../' abstract_target 'MetaWear-iOS' do - platform :ios, '8.0' + platform :ios, '10.0' target 'MetaWearIntegrationTestHost-iOS' do target 'MetaWearIntegrationTests-iOS' do @@ -20,7 +19,7 @@ abstract_target 'MetaWear' do end abstract_target 'MetaWear-macOS' do - platform :osx, '10.11' + platform :osx, '10.13' target 'MetaWearIntegrationTestHost-macOS' do target 'MetaWearIntegrationTests-macOS' do @@ -46,4 +45,12 @@ abstract_target 'MetaWear' do target 'MetaWearUnitTests-tvOS' do end end + + + abstract_target 'MetaWear-watchOS' do + platform :watchos, '4.0' + + target 'MetaWearIntegrationTestHost-watchOS Extension' do + end + end end diff --git a/MetaWear/Podfile.lock b/MetaWear/Podfile.lock index 6769536..00574ea 100644 --- a/MetaWear/Podfile.lock +++ b/MetaWear/Podfile.lock @@ -1,28 +1,40 @@ PODS: - - Bolts/Tasks (1.8.4) - - FastCoding (3.2.2) - - iOSDFULibrary (4.1.0): + - Bolts-Swift (1.3.0) + - iOSDFULibrary (4.1.3): - Zip (~> 1.0) - - MetaWearPrivate (2.10.0): - - Bolts/Tasks (~> 1.8.4) - - FastCoding (~> 3.2.2) + - MetaWear/AsyncUtils (3.0.0): + - MetaWear/Core + - MetaWear/Core (3.0.0): + - Bolts-Swift (~> 1.3.0) + - MetaWear/Mocks (3.0.0): + - MetaWear/Core + - MetaWear/UI (3.0.0): + - MetaWear/AsyncUtils + - MetaWear/Core - Zip (1.1.0) DEPENDENCIES: - iOSDFULibrary - - MetaWearPrivate (from `../`) + - MetaWear/AsyncUtils (from `../`) + - MetaWear/Mocks (from `../`) + - MetaWear/UI (from `../`) + +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - Bolts-Swift + - iOSDFULibrary + - Zip EXTERNAL SOURCES: - MetaWearPrivate: - :path: ../ + MetaWear: + :path: "../" SPEC CHECKSUMS: - Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322 - FastCoding: f7b1b75a2ccb0dd6ef9c928e46339e20252d98d3 - iOSDFULibrary: e245240cc1096f3961f2e5ec53860f8fca1ff648 - MetaWearPrivate: f9cb466d358f6a4a5639f3cce393ddaf37c4def5 + Bolts-Swift: fa98d1b59fc1acea9b21a21306dcdca1c85e3737 + iOSDFULibrary: 921bc0e250ad204a68ffe0cc98a7cb6ac8b13b9f + MetaWear: db411d9e682ce4845a3e187a6de0b8cca16b726d Zip: 8877eede3dda76bcac281225c20e71c25270774c -PODFILE CHECKSUM: 3f1860c05419ce0c9f1c5e51d97b5df098184716 +PODFILE CHECKSUM: 0e8b329392a8a7e966662fa269e1ca5b0f680490 -COCOAPODS: 1.3.1 +COCOAPODS: 1.5.0 diff --git a/MetaWear/Pods/Bolts/LICENSE b/MetaWear/Pods/Bolts-Swift/LICENSE similarity index 94% rename from MetaWear/Pods/Bolts/LICENSE rename to MetaWear/Pods/Bolts-Swift/LICENSE index e1a5831..4cdb491 100644 --- a/MetaWear/Pods/Bolts/LICENSE +++ b/MetaWear/Pods/Bolts-Swift/LICENSE @@ -1,8 +1,8 @@ BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/MetaWear/Pods/Bolts-Swift/README.md b/MetaWear/Pods/Bolts-Swift/README.md new file mode 100644 index 0000000..d1c1c12 --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/README.md @@ -0,0 +1,164 @@ +# Bolts in Swift + +![Platforms][platforms-svg] +![Swift Version][swift-version-svg] + +[![Podspec][podspec-svg]][podspec-link] +[![Carthage compatible][carthage-svg]](carthage-link) +[![License][license-svg]][license-link] + +[![Build Status][build-status-svg]][build-status-link] +[![Coverage Status][coverage-status-svg]][coverage-status-link] + + +Bolts is a collection of low-level libraries designed to make developing mobile apps easier. Bolts was designed by Parse and Facebook for our own internal use, and we have decided to open source these libraries to make them available to others. + +## Tasks + +Bolts Tasks is a complete implementation of futures/promises for iOS/OS X/watchOS/tvOS and any platform that supports Swift. +A task represents the result of an asynchronous operation, which typically would be returned from a function. +In addition to being able to have different states `completed`/`faulted`/`cancelled` they provide these benefits: +- `Tasks` consume fewer system resources, since they don't occupy a thread while waiting on other `Tasks`. +- `Tasks` could be performed/chained in a row which will not create nested "pyramid" code as you would get when using only callbacks. +- `Tasks` are fully composable, allowing you to perform branching, parallelism, and complex error handling, without the spaghetti code of having many named callbacks. +- `Tasks` allow you to arrange code in the order that it executes, rather than having to split your logic across scattered callback functions. +- `Tasks` don't depend on any particular threading model. So you can use concepts like operation queues/dispatch queues or even thread executors. +- `Tasks` could be used synchronously or asynchronously, providing the same benefit of different results of any function/operation. + +## Getting Started + +- **[CocoaPods](https://cocoapods.org)** + + Add the following line to your Podfile: + ```ruby + pod 'Bolts-Swift' + ``` + Run `pod install`, and you should now have the latest parse release. + +- **[Carthage](https://github.com/carthage/carthage)** + + Add the following line to your Cartfile: + ``` + github "BoltsFramework/Bolts-Swift" + ``` + Run `carthage update`, and you should now have the latest version of Bolts in your Carthage folder. + +- **Using Bolts as a sub-project** + + You can also include parse as a subproject inside of your application if you'd prefer, although we do not recommend this, as it will increase your indexing time significantly. To do so, just drag and drop the `BoltsSwift.xcodeproj` file into your workspace. + +- **Import Bolts** + + Now that you have the framework linked to your application - add the folowing line in every `.swift` that you want to use Bolts from: + ``` + import BoltsSwift + ``` + +## Chaining Tasks + +Every `Task` has a function named `continueWith()`, which takes a continuation closure. A continuation will be executed when the task is complete. You can the inspect the task to check if it was successful and to get its result. +```swift +save(object).continueWith { task in + if task.cancelled { + // Save was cancelled + } else if task.faulted { + // Save failed + } else { + // Object was successfully saved + let result = task.result + } +} +``` + +In many cases, you only want to do more work if the previous task was successful, and propagate any error or cancellation to be dealt with later. To do this, use `continueOnSuccessWith` function: +```swift +save(object).continueOnSuccessWith { task in + // The object was saved succesfully + let result = task.result +} +``` + +If you return any object from `continueWith` function - this will become a result of the new function. And if you want to call into more tasks and return those results - you can use `continueWithTask`. This gives you an ability to chain more asynchronous work together. +In the following example we want to fetch a user profile, then fetch a profile image, and if any of these operations failed - we still want to display an placeholder image: +```swift +fetchProfile(user).continueOnSuccessWithTask { task in + return fetchProfileImage(task.result); +}.continueWith { task in + if let image = task.result { + return image + } + return ProfileImagePlaceholder() +} +``` + +## Creating Tasks + +To create a task - you would need a `TaskCompletionSource`, which is a consumer end of any `Task`, which gives you an ability to control whether the task is completed/faulted or cancelled. +After you create a `TaskCompletionSource`, you need to call `setResult()`/`setError()`/`cancel()` to trigger its continuations and change its state. +```swift +func fetch(object: PFObject) -> Task { + let taskCompletionSource = TaskCompletionSource() + object.fetchInBackgroundWithBlock() { (object: PFObject?, error: NSError?) in + if let error = error { + taskCompletionSource.setError(error) + } else if let object = object { + taskCompletionSource.setResult(object) + } else { + taskCompletionSource.cancel() + } + } + return taskCompletionSource.task +} +``` + +## Tasks in Parallel + +You can also perform several tasks in parallel and chain the result of all of them using `whenAll()` function. +```swift +let query = PFQuery(className: "Comments") +find(query).continueWithTask { task in + var tasks: [Task] = [] + task.result?.forEach { comment in + tasks.append(self.deleteComment(comment)) + } + return Task.whenAll(tasks) +}.continueOnSuccessWith { task in + // All comments were deleted +} +``` + +## Task Executors + +Both `continueWith()` and `continueWithTask()` functions accept an optional executor parameter. These allow you to control how the continuation is executed. +The default executor will dispatch to global dispatch queue, but you can provide your own executor to schedule work in a specific way. +For example, if you want to continue with work on the main thread: +```swift +fetch(object).continueWith(Executor.MainThread) { task in + // This closure will be executor on the main application's thread +} +``` + +## How Do I Contribute? + +We want to make contributing to this project as easy and transparent as possible. Please refer to the [Contribution Guidelines][contributing]. + + [releases]: https://github.com/BoltsFramework/Bolts-Swift/releases + [contributing]: https://github.com/BoltsFramework/Bolts-Swift/blob/master/CONTRIBUTING.md + + [build-status-svg]: https://img.shields.io/travis/BoltsFramework/Bolts-Swift/master.svg + [build-status-link]: https://travis-ci.org/BoltsFramework/Bolts-Swift/branches + + [coverage-status-svg]: https://img.shields.io/codecov/c/github/BoltsFramework/Bolts-Swift/master.svg + [coverage-status-link]: https://codecov.io/github/BoltsFramework/Bolts-Swift?branch=master + + [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg + [license-link]: https://github.com/BoltsFramework/Bolts-Swift/blob/master/LICENSE + + [podspec-svg]: https://img.shields.io/cocoapods/v/Bolts-Swift.svg + [podspec-link]: https://cocoapods.org/pods/Bolts-Swift + + [carthage-svg]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat + [carthage-link]: https://github.com/carthage/carthage + + [platforms-svg]: http://img.shields.io/cocoapods/p/Bolts-Swift.svg?style=flat + [swift-version-svg]: https://img.shields.io/badge/Swift-3.0.x-orange.svg diff --git a/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Errors.swift b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Errors.swift new file mode 100644 index 0000000..ec3db5b --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Errors.swift @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +/** + An error type that contains one or more underlying errors. + */ +public struct AggregateError: Error { + /// An array of errors that are aggregated into this one. + public let errors: [Error] + + init(errors: [Error]) { + self.errors = errors + } +} + +/** + An error type that indicates that the task was cancelled. + + Return or throw this from a continuation closure to propagate to the `task.cancelled` property. + */ +public struct CancelledError: Error { + /** + Initializes a Cancelled Error. + */ + public init() { } +} diff --git a/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Executor.swift b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Executor.swift new file mode 100644 index 0000000..fb18ed6 --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Executor.swift @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +/// `Executor` is an `enum`, that defines different strategies for calling closures. +public enum Executor { + + /** + Calls closures immediately unless the call stack gets too deep, + in which case it dispatches the closure in the default priority queue. + */ + case `default` + + /** + Calls closures immediately. + Tasks continuations will be run in the thread of the previous task. + */ + case immediate + + /** + Calls closures on the main thread. + Will execute synchronously if already on the main thread, otherwise - will execute asynchronously. + */ + case mainThread + + /** + Dispatches closures on a GCD queue. + */ + case queue(DispatchQueue) + + /** + Adds closures to an operation queue. + */ + case operationQueue(Foundation.OperationQueue) + + /** + Passes closures to an executing closure. + */ + case closure((() -> Void) -> Void) + + /** + Executes the given closure using the corresponding strategy. + + - parameter closure: The closure to execute. + */ + public func execute(_ closure: @escaping () -> Void) { + switch self { + case .default: + struct Static { + static let taskDepthKey = "com.bolts.TaskDepthKey" + static let maxTaskDepth = 20 + } + + let localThreadDictionary = Thread.current.threadDictionary + + var previousDepth: Int + if let depth = localThreadDictionary[Static.taskDepthKey] as? Int { + previousDepth = depth + } else { + previousDepth = 0 + } + + if previousDepth > Static.maxTaskDepth { + DispatchQueue.global(qos: .default).async(execute: closure) + } else { + localThreadDictionary[Static.taskDepthKey] = previousDepth + 1 + closure() + localThreadDictionary[Static.taskDepthKey] = previousDepth + } + case .immediate: + closure() + case .mainThread: + if Thread.isMainThread { + closure() + } else { + DispatchQueue.main.async(execute: closure) + } + case .queue(let queue): + queue.async(execute: closure) + case .operationQueue(let operationQueue): + operationQueue.addOperation(closure) + case .closure(let executingClosure): + executingClosure(closure) + } + } +} + +extension Executor : CustomStringConvertible, CustomDebugStringConvertible { + /// A textual representation of `self`. + public var description: String { + switch self { + case .default: + return "Default Executor" + case .immediate: + return "Immediate Executor" + case .mainThread: + return "MainThread Executor" + case .queue: + return "Executor with dispatch_queue" + case .operationQueue: + return "Executor with NSOperationQueue" + case .closure: + return "Executor with custom closure" + } + } + + /// A textual representation of `self`, suitable for debugging. + public var debugDescription: String { + switch self { + case .queue(let object): + return "\(description): \(object)" + case .operationQueue(let queue): + return "\(description): \(queue)" + case .closure(let closure): + return "\(description): \(closure)" + default: + return description + } + } +} diff --git a/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+ContinueWith.swift b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+ContinueWith.swift new file mode 100644 index 0000000..8fbc2b7 --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+ContinueWith.swift @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +//-------------------------------------- +// MARK: - ContinueWith +//-------------------------------------- + +extension Task { + /** + Internal continueWithTask. This is the method that all other continuations must go through. + + - parameter executor: The executor to invoke the closure on. + - parameter options: The options to run the closure with + - parameter continuation: The closure to execute. + + - returns: The task resulting from the continuation + */ + fileprivate func continueWithTask(_ executor: Executor, + options: TaskContinuationOptions, + continuation: @escaping ((Task) throws -> Task) + ) -> Task { + let taskCompletionSource = TaskCompletionSource() + let wrapperContinuation = { + switch self.state { + case .success where options.contains(.RunOnSuccess): fallthrough + case .error where options.contains(.RunOnError): fallthrough + case .cancelled where options.contains(.RunOnCancelled): + executor.execute { + let wrappedState = TaskState>.fromClosure { + try continuation(self) + } + switch wrappedState { + case .success(let nextTask): + switch nextTask.state { + case .pending: + nextTask.continueWith { nextTask in + taskCompletionSource.setState(nextTask.state) + } + default: + taskCompletionSource.setState(nextTask.state) + } + case .error(let error): + taskCompletionSource.set(error: error) + case .cancelled: + taskCompletionSource.cancel() + default: abort() // This should never happen. + } + } + + case .success(let result as S): + // This is for continueOnErrorWith - the type of the result doesn't change, so we can pass it through + taskCompletionSource.set(result: result) + + case .error(let error): + taskCompletionSource.set(error: error) + + case .cancelled: + taskCompletionSource.cancel() + + default: + fatalError("Task was in an invalid state \(self.state)") + } + } + appendOrRunContinuation(wrapperContinuation) + return taskCompletionSource.task + } + + /** + Enqueues a given closure to be run once this task is complete. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns the result of the task. + + - returns: A task that will be completed with a result from a given closure. + */ + @discardableResult + public func continueWith(_ executor: Executor = .default, continuation: @escaping ((Task) throws -> S)) -> Task { + return continueWithTask(executor) { task in + let state = TaskState.fromClosure({ + try continuation(task) + }) + return Task(state: state) + } + } + + /** + Enqueues a given closure to be run once this task is complete. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueWithTask(_ executor: Executor = .default, continuation: @escaping ((Task) throws -> Task)) -> Task { + return continueWithTask(executor, options: .RunAlways, continuation: continuation) + } +} + +//-------------------------------------- +// MARK: - ContinueOnSuccessWith +//-------------------------------------- + +extension Task { + /** + Enqueues a given closure to be run once this task completes with success (has intended result). + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnSuccessWith(_ executor: Executor = .default, + continuation: @escaping ((TResult) throws -> S)) -> Task { + return continueOnSuccessWithTask(executor) { taskResult in + let state = TaskState.fromClosure({ + try continuation(taskResult) + }) + return Task(state: state) + } + } + + /** + Enqueues a given closure to be run once this task completes with success (has intended result). + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnSuccessWithTask(_ executor: Executor = .default, + continuation: @escaping ((TResult) throws -> Task)) -> Task { + return continueWithTask(executor, options: .RunOnSuccess) { task in + return try continuation(task.result!) + } + } +} + +//-------------------------------------- +// MARK: - ContinueOnErrorWith +//-------------------------------------- + +extension Task { + /** + Enqueues a given closure to be run once this task completes with error. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnErrorWith(_ executor: Executor = .default, continuation: @escaping ((E) throws -> TResult)) -> Task { + return continueOnErrorWithTask(executor) { (error: E) in + let state = TaskState.fromClosure({ + try continuation(error) + }) + return Task(state: state) + } + } + + /** + Enqueues a given closure to be run once this task completes with error. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnErrorWith(_ executor: Executor = .default, continuation: @escaping ((Error) throws -> TResult)) -> Task { + return continueOnErrorWithTask(executor) { (error: Error) in + let state = TaskState.fromClosure({ + try continuation(error) + }) + return Task(state: state) + } + } + + /** + Enqueues a given closure to be run once this task completes with error. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnErrorWithTask(_ executor: Executor = .default, continuation: @escaping ((E) throws -> Task)) -> Task { + return continueOnErrorWithTask(executor) { (error: Error) in + if let error = error as? E { + return try continuation(error) + } + return Task(state: .error(error)) + } + } + + /** + Enqueues a given closure to be run once this task completes with error. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnErrorWithTask(_ executor: Executor = .default, continuation: @escaping ((Error) throws -> Task)) -> Task { + return continueWithTask(executor, options: .RunOnError) { task in + return try continuation(task.error!) + } + } +} diff --git a/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+Delay.swift b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+Delay.swift new file mode 100644 index 0000000..1c8feb6 --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+Delay.swift @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +//-------------------------------------- +// MARK: - Task with Delay +//-------------------------------------- + +extension Task { + /** + Creates a task that will complete after the given delay. + + - parameter delay: The delay for the task to completes. + + - returns: A task that will complete after the given delay. + */ + public class func withDelay(_ delay: TimeInterval) -> Task { + let taskCompletionSource = TaskCompletionSource() + let time = DispatchTime.now() + delay + DispatchQueue.global(qos: .default).asyncAfter(deadline: time) { + taskCompletionSource.trySet(result: ()) + } + return taskCompletionSource.task + } +} diff --git a/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAll.swift b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAll.swift new file mode 100644 index 0000000..fb78753 --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAll.swift @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +//-------------------------------------- +// MARK: - WhenAll +//-------------------------------------- + +extension Task { + + /** + Creates a task that will be completed after all of the input tasks have completed. + + - parameter tasks: Array tasks to wait on for completion. + + - returns: A new task that will complete after all `tasks` are completed. + */ + public class func whenAll(_ tasks: [Task]) -> Task { + if tasks.isEmpty { + return Task.emptyTask() + } + + var tasksCount: Int32 = Int32(tasks.count) + var cancelledCount: Int32 = 0 + var errorCount: Int32 = 0 + + let tcs = TaskCompletionSource() + tasks.forEach { + $0.continueWith { task -> Void in + if task.cancelled { + OSAtomicIncrement32(&cancelledCount) + } else if task.faulted { + OSAtomicIncrement32(&errorCount) + } + + if OSAtomicDecrement32(&tasksCount) == 0 { + if cancelledCount > 0 { + tcs.cancel() + } else if errorCount > 0 { + tcs.set(error: AggregateError(errors: tasks.flatMap({ $0.error }))) + } else { + tcs.set(result: ()) + } + } + } + } + return tcs.task + } + + /** + Creates a task that will be completed after all of the input tasks have completed. + + - parameter tasks: Zero or more tasks to wait on for completion. + + - returns: A new task that will complete after all `tasks` are completed. + */ + public class func whenAll(_ tasks: Task...) -> Task { + return whenAll(tasks) + } + + /** + Creates a task that will be completed after all of the input tasks have completed. + + - parameter tasks: Array of tasks to wait on for completion. + + - returns: A new task that will complete after all `tasks` are completed. + The result of the task is going an array of results of all tasks in the same order as they were provided. + */ + public class func whenAllResult(_ tasks: [Task]) -> Task<[TResult]> { + return whenAll(tasks).continueOnSuccessWithTask { task -> Task<[TResult]> in + let results: [TResult] = tasks.map { task in + guard let result = task.result else { + // This should never happen. + // If the task succeeded - there is no way result is `nil`, even in case TResult is optional, + // because `task.result` would have a type of `Result??`, and we unwrap only one optional here. + // If a task was cancelled, we should have never have gotten past 'continueOnSuccess'. + // If a task errored, we should have returned a 'AggregateError' and never gotten past 'continueOnSuccess'. + // If a task was pending, then something went horribly wrong. + fatalError("Task is in unknown state \(task.state).") + } + return result + } + return Task<[TResult]>(results) + } + } + + /** + Creates a task that will be completed after all of the input tasks have completed. + + - parameter tasks: Zero or more tasks to wait on for completion. + + - returns: A new task that will complete after all `tasks` are completed. + The result of the task is going an array of results of all tasks in the same order as they were provided. + */ + public class func whenAllResult(_ tasks: Task...) -> Task<[TResult]> { + return whenAllResult(tasks) + } +} diff --git a/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAny.swift b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAny.swift new file mode 100644 index 0000000..90abced --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAny.swift @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +//-------------------------------------- +// MARK: - WhenAny +//-------------------------------------- + +extension Task { + + /** + Creates a task that will complete when any of the input tasks have completed. + + The returned task will complete when any of the supplied tasks have completed. + This is true even if the first task to complete ended in the canceled or faulted state. + + - parameter tasks: Array of tasks to wait on for completion. + + - returns: A new task that will complete when any of the `tasks` are completed. + */ + public class func whenAny(_ tasks: [Task]) -> Task { + if tasks.isEmpty { + return Task.emptyTask() + } + let taskCompletionSource = TaskCompletionSource() + for task in tasks { + // Do not continue anything if we completed the task, because we fulfilled our job here. + if taskCompletionSource.task.completed { + break + } + task.continueWith { task in + taskCompletionSource.trySet(result: ()) + } + } + return taskCompletionSource.task + } + + /** + Creates a task that will complete when any of the input tasks have completed. + + The returned task will complete when any of the supplied tasks have completed. + This is true even if the first task to complete ended in the canceled or faulted state. + + - parameter tasks: Zeror or more tasks to wait on for completion. + + - returns: A new task that will complete when any of the `tasks` are completed. + */ + public class func whenAny(_ tasks: Task...) -> Task { + return whenAny(tasks) + } +} diff --git a/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task.swift b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task.swift new file mode 100644 index 0000000..f2852dc --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/Task.swift @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +enum TaskState { + case pending() + case success(TResult) + case error(Error) + case cancelled + + static func fromClosure(_ closure: () throws -> TResult) -> TaskState { + do { + return .success(try closure()) + } catch is CancelledError { + return .cancelled + } catch { + return .error(error) + } + } +} + +struct TaskContinuationOptions: OptionSet { + let rawValue: Int + init(rawValue: Int) { + self.rawValue = rawValue + } + + static let RunOnSuccess = TaskContinuationOptions(rawValue: 1 << 0) + static let RunOnError = TaskContinuationOptions(rawValue: 1 << 1) + static let RunOnCancelled = TaskContinuationOptions(rawValue: 1 << 2) + + static let RunAlways: TaskContinuationOptions = [ .RunOnSuccess, .RunOnError, .RunOnCancelled ] +} + +//-------------------------------------- +// MARK: - Task +//-------------------------------------- + +/// +/// The consumer view of a Task. +/// Task has methods to inspect the state of the task, and to add continuations to be run once the task is complete. +/// +public final class Task { + public typealias Continuation = () -> Void + + fileprivate let synchronizationQueue = DispatchQueue(label: "com.bolts.task", attributes: DispatchQueue.Attributes.concurrent) + fileprivate var _completedCondition: NSCondition? + + fileprivate var _state: TaskState = .pending() + fileprivate var _continuations: [Continuation] = Array() + + // MARK: Initializers + + init() {} + + init(state: TaskState) { + _state = state + } + + /** + Creates a task that is already completed with the given result. + + - parameter result: The task result. + */ + public init(_ result: TResult) { + _state = .success(result) + } + + /** + Initializes a task that is already completed with the given error. + + - parameter error: The task error. + */ + public init(error: Error) { + _state = .error(error) + } + + /** + Creates a cancelled task. + + - returns: A cancelled task. + */ + public class func cancelledTask() -> Self { + // Swift prevents this method from being called `cancelled` due to the `cancelled` instance var. This is most likely a bug. + return self.init(state: .cancelled) + } + + class func emptyTask() -> Task { + return Task(state: .success()) + } + + // MARK: Execute + + /** + Creates a task that will complete with the result of the given closure. + + - note: The closure cannot make the returned task to fail. Use the other `execute` overload for this. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter closure: The closure that returns the result of the task. + The returned task will complete when the closure completes. + */ + public convenience init(_ executor: Executor = .default, closure: @escaping ((Void) throws -> TResult)) { + self.init(state: .pending()) + executor.execute { + self.trySet(state: TaskState.fromClosure(closure)) + } + } + + /** + Creates a task that will continue with the task returned by the given closure. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter closure: The closure that returns the continuation task. + The returned task will complete when the continuation task completes. + + - returns: A task that will continue with the task returned by the given closure. + */ + public class func execute(_ executor: Executor = .default, closure: @escaping ((Void) throws -> TResult)) -> Task { + return Task(executor, closure: closure) + } + + /** + Creates a task that will continue with the task returned by the given closure. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter closure: The closure that returns the continuation task. + The returned task will complete when the continuation task completes. + + - returns: A task that will continue with the task returned by the given closure. + */ + public class func executeWithTask(_ executor: Executor = .default, closure: @escaping (() throws -> Task)) -> Task { + return emptyTask().continueWithTask(executor) { _ in + return try closure() + } + } + + // MARK: State Accessors + + /// Whether this task is completed. A completed task can also be faulted or cancelled. + public var completed: Bool { + switch state { + case .pending: + return false + default: + return true + } + } + + /// Whether this task has completed due to an error or exception. A `faulted` task is also completed. + public var faulted: Bool { + switch state { + case .error: + return true + default: + return false + } + } + + /// Whether this task has been cancelled. A `cancelled` task is also completed. + public var cancelled: Bool { + switch state { + case .cancelled: + return true + default: + return false + } + } + + /// The result of a successful task. Won't be set until the task completes with a `result`. + public var result: TResult? { + switch state { + case .success(let result): + return result + default: + break + } + return nil + } + + /// The error of a errored task. Won't be set until the task completes with `error`. + public var error: Error? { + switch state { + case .error(let error): + return error + default: + break + } + return nil + } + + /** + Waits until this operation is completed. + + This method is inefficient and consumes a thread resource while it's running. + It should be avoided. This method logs a warning message if it is used on the main thread. + */ + public func waitUntilCompleted() { + if Thread.isMainThread { + debugPrint("Warning: A long-running operation is being executed on the main thread waiting on \(self).") + } + + var conditon: NSCondition? + synchronizationQueue.sync(flags: .barrier, execute: { + if case .pending = self._state { + conditon = self._completedCondition ?? NSCondition() + self._completedCondition = conditon + } + }) + + guard let condition = conditon else { + // Task should have been completed + precondition(completed) + return + } + + condition.lock() + while !completed { + condition.wait() + } + condition.unlock() + + synchronizationQueue.sync(flags: .barrier, execute: { + self._completedCondition = nil + }) + } + + // MARK: State Change + + @discardableResult + func trySet(state: TaskState) -> Bool { + var stateChanged = false + + var continuations: [Continuation]? + var completedCondition: NSCondition? + synchronizationQueue.sync(flags: .barrier, execute: { + switch self._state { + case .pending(): + stateChanged = true + self._state = state + continuations = self._continuations + completedCondition = self._completedCondition + self._continuations.removeAll() + default: + break + } + }) + if stateChanged { + completedCondition?.lock() + completedCondition?.broadcast() + completedCondition?.unlock() + + for continuation in continuations! { + continuation() + } + } + + return stateChanged + } + + // MARK: Internal + + func appendOrRunContinuation(_ continuation: @escaping Continuation) { + var runContinuation = false + synchronizationQueue.sync(flags: .barrier, execute: { + switch self._state { + case .pending: + self._continuations.append(continuation) + default: + runContinuation = true + } + }) + if runContinuation { + continuation() + } + } + + var state: TaskState { + var value: TaskState? + synchronizationQueue.sync { + value = self._state + } + return value! + } +} + +//-------------------------------------- +// MARK: - Description +//-------------------------------------- + +extension Task: CustomStringConvertible, CustomDebugStringConvertible { + /// A textual representation of `self`. + public var description: String { + return "Task: \(self.state)" + } + + /// A textual representation of `self`, suitable for debugging. + public var debugDescription: String { + return "Task: \(self.state)" + } +} diff --git a/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/TaskCompletionSource.swift b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/TaskCompletionSource.swift new file mode 100644 index 0000000..00a8c55 --- /dev/null +++ b/MetaWear/Pods/Bolts-Swift/Sources/BoltsSwift/TaskCompletionSource.swift @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +/// A `TaskCompletionSource` represents the producer side of a `Task`, +/// providing access to the consumer side through the `task` property. +/// As a producer, it can complete the underlying task by either by setting its result, error or cancelling it. +/// +/// For example, this is how you could use a task completion source +/// to provide a task that asynchronously reads data from disk: +/// +/// func dataFromPath(path: String) -> Task { +/// let tcs = TaskCompletionSource() +/// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { +/// if let data = NSData(contentsOfFile: path) { +/// tcs.setResult(data) +/// } else { +/// tcs.setError(NSError(domain: "com.example", code: 0, userInfo: nil)) +/// } +/// } +/// return tcs.task +/// } +public class TaskCompletionSource { + + /// The underlying task. + public let task = Task() + + /// Creates a task completion source with a pending task. + public init() {} + + //-------------------------------------- + // MARK: - Change Task State + //-------------------------------------- + + /** + Completes the task with the given result. + + Throws an exception if the task is already completed. + + - parameter result: The task result. + */ + public func set(result: TResult) { + guard task.trySet(state: .success(result)) else { + preconditionFailure("Can not set the result on a completed task.") + } + } + + /** + Completes the task with the given error. + + Throws an exception if the task is already completed. + + - parameter error: The task error. + */ + public func set(error: Error) { + guard task.trySet(state: .error(error)) else { + preconditionFailure("Can not set error on a completed task.") + } + } + + /** + Cancels the task. + + Throws an exception if the task is already completed. + */ + public func cancel() { + guard task.trySet(state: .cancelled) else { + preconditionFailure("Can not cancel a completed task.") + } + } + + /** + Tries to complete the task with the given result. + + - parameter result: The task result. + - returns: `true` if the result was set, `false` otherwise. + */ + @discardableResult + public func trySet(result: TResult) -> Bool { + return task.trySet(state: .success(result)) + } + + /** + Tries to completes the task with the given error. + + - parameter error: The task error. + - returns: `true` if the error was set, `false` otherwise. + */ + @discardableResult + public func trySet(error: Error) -> Bool { + return task.trySet(state: .error(error)) + } + + /** + Cancels the task. + + - returns: `true` if the task was completed, `false` otherwise. + */ + @discardableResult + public func tryCancel() -> Bool { + return task.trySet(state: .cancelled) + } + + //-------------------------------------- + // MARK: - Change Task State (internal) + //-------------------------------------- + + func setState(_ state: TaskState) { + guard task.trySet(state: state) else { + preconditionFailure("Can not complete a completed task.") + } + } +} diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationToken.h b/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationToken.h deleted file mode 100644 index 4d7dec0..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationToken.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - A block that will be called when a token is cancelled. - */ -typedef void(^BFCancellationBlock)(); - -/*! - The consumer view of a CancellationToken. - Propagates notification that operations should be canceled. - A BFCancellationToken has methods to inspect whether the token has been cancelled. - */ -@interface BFCancellationToken : NSObject - -/*! - Whether cancellation has been requested for this token source. - */ -@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; - -/*! - Register a block to be notified when the token is cancelled. - If the token is already cancelled the delegate will be notified immediately. - */ -- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationToken.m b/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationToken.m deleted file mode 100644 index 4acd589..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationToken.m +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationToken () - -@property (nullable, nonatomic, strong) NSMutableArray *registrations; -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic) BOOL disposed; - -@end - -@interface BFCancellationTokenRegistration (BFCancellationToken) - -+ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate; - -- (void)notifyDelegate; - -@end - -@implementation BFCancellationToken - -@synthesize cancellationRequested = _cancellationRequested; - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _registrations = [NSMutableArray array]; - _lock = [NSObject new]; - - return self; -} - -#pragma mark - Custom Setters/Getters - -- (BOOL)isCancellationRequested { - @synchronized(self.lock) { - [self throwIfDisposed]; - return _cancellationRequested; - } -} - -- (void)cancel { - NSArray *registrations; - @synchronized(self.lock) { - [self throwIfDisposed]; - if (_cancellationRequested) { - return; - } - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; - _cancellationRequested = YES; - registrations = [self.registrations copy]; - } - - [self notifyCancellation:registrations]; -} - -- (void)notifyCancellation:(NSArray *)registrations { - for (BFCancellationTokenRegistration *registration in registrations) { - [registration notifyDelegate]; - } -} - -- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block { - @synchronized(self.lock) { - BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration registrationWithToken:self delegate:[block copy]]; - [self.registrations addObject:registration]; - - return registration; - } -} - -- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration { - @synchronized(self.lock) { - [self throwIfDisposed]; - [self.registrations removeObject:registration]; - } -} - -// Delay on a non-public method to prevent interference with a user calling performSelector or -// cancelPreviousPerformRequestsWithTarget on the public method -- (void)cancelPrivate { - [self cancel]; -} - -- (void)cancelAfterDelay:(int)millis { - [self throwIfDisposed]; - if (millis < -1) { - [NSException raise:NSInvalidArgumentException format:@"Delay must be >= -1"]; - } - - if (millis == 0) { - [self cancel]; - return; - } - - @synchronized(self.lock) { - [self throwIfDisposed]; - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; - if (self.cancellationRequested) { - return; - } - - if (millis != -1) { - double delay = (double)millis / 1000; - [self performSelector:@selector(cancelPrivate) withObject:nil afterDelay:delay]; - } - } -} - -- (void)dispose { - @synchronized(self.lock) { - if (self.disposed) { - return; - } - [self.registrations makeObjectsPerformSelector:@selector(dispose)]; - self.registrations = nil; - self.disposed = YES; - } -} - -- (void)throwIfDisposed { - if (self.disposed) { - [NSException raise:NSInternalInconsistencyException format:@"Object already disposed"]; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h b/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h deleted file mode 100644 index fa6090f..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Represents the registration of a cancellation observer with a cancellation token. - Can be used to unregister the observer at a later time. - */ -@interface BFCancellationTokenRegistration : NSObject - -/*! - Removes the cancellation observer registered with the token - and releases all resources associated with this registration. - */ -- (void)dispose; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m b/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m deleted file mode 100644 index f396c1c..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationTokenRegistration.h" - -#import "BFCancellationToken.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationTokenRegistration () - -@property (nonatomic, weak) BFCancellationToken *token; -@property (nullable, nonatomic, strong) BFCancellationBlock cancellationObserverBlock; -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic) BOOL disposed; - -@end - -@interface BFCancellationToken (BFCancellationTokenRegistration) - -- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration; - -@end - -@implementation BFCancellationTokenRegistration - -+ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate { - BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration new]; - registration.token = token; - registration.cancellationObserverBlock = delegate; - return registration; -} - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _lock = [NSObject new]; - - return self; -} - -- (void)dispose { - @synchronized(self.lock) { - if (self.disposed) { - return; - } - self.disposed = YES; - } - - BFCancellationToken *token = self.token; - if (token != nil) { - [token unregisterRegistration:self]; - self.token = nil; - } - self.cancellationObserverBlock = nil; -} - -- (void)notifyDelegate { - @synchronized(self.lock) { - [self throwIfDisposed]; - self.cancellationObserverBlock(); - } -} - -- (void)throwIfDisposed { - NSAssert(!self.disposed, @"Object already disposed"); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h b/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h deleted file mode 100644 index 4627e99..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class BFCancellationToken; - -/*! - BFCancellationTokenSource represents the producer side of a CancellationToken. - Signals to a CancellationToken that it should be canceled. - It is a cancellation token that also has methods - for changing the state of a token by cancelling it. - */ -@interface BFCancellationTokenSource : NSObject - -/*! - Creates a new cancellation token source. - */ -+ (instancetype)cancellationTokenSource; - -/*! - The cancellation token associated with this CancellationTokenSource. - */ -@property (nonatomic, strong, readonly) BFCancellationToken *token; - -/*! - Whether cancellation has been requested for this token source. - */ -@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; - -/*! - Cancels the token if it has not already been cancelled. - */ -- (void)cancel; - -/*! - Schedules a cancel operation on this CancellationTokenSource after the specified number of milliseconds. - @param millis The number of milliseconds to wait before completing the returned task. - If delay is `0` the cancel is executed immediately. If delay is `-1` any scheduled cancellation is stopped. - */ -- (void)cancelAfterDelay:(int)millis; - -/*! - Releases all resources associated with this token source, - including disposing of all registrations. - */ -- (void)dispose; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m b/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m deleted file mode 100644 index ee05cf0..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationTokenSource.h" - -#import "BFCancellationToken.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationToken (BFCancellationTokenSource) - -- (void)cancel; -- (void)cancelAfterDelay:(int)millis; - -- (void)dispose; -- (void)throwIfDisposed; - -@end - -@implementation BFCancellationTokenSource - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _token = [BFCancellationToken new]; - - return self; -} - -+ (instancetype)cancellationTokenSource { - return [BFCancellationTokenSource new]; -} - -#pragma mark - Custom Setters/Getters - -- (BOOL)isCancellationRequested { - return _token.isCancellationRequested; -} - -- (void)cancel { - [_token cancel]; -} - -- (void)cancelAfterDelay:(int)millis { - [_token cancelAfterDelay:millis]; -} - -- (void)dispose { - [_token dispose]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.h b/MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.h deleted file mode 100644 index afa4f3d..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - An object that can run a given block. - */ -@interface BFExecutor : NSObject - -/*! - Returns a default executor, which runs continuations immediately until the call stack gets too - deep, then dispatches to a new GCD queue. - */ -+ (instancetype)defaultExecutor; - -/*! - Returns an executor that runs continuations on the thread where the previous task was completed. - */ -+ (instancetype)immediateExecutor; - -/*! - Returns an executor that runs continuations on the main thread. - */ -+ (instancetype)mainThreadExecutor; - -/*! - Returns a new executor that uses the given block to execute continuations. - @param block The block to use. - */ -+ (instancetype)executorWithBlock:(void(^)(void(^block)()))block; - -/*! - Returns a new executor that runs continuations on the given queue. - @param queue The instance of `dispatch_queue_t` to dispatch all continuations onto. - */ -+ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue; - -/*! - Returns a new executor that runs continuations on the given queue. - @param queue The instance of `NSOperationQueue` to run all continuations on. - */ -+ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue; - -/*! - Runs the given block using this executor's particular strategy. - @param block The block to execute. - */ -- (void)execute:(void(^)())block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.m b/MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.m deleted file mode 100644 index b5d1f6b..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFExecutor.m +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFExecutor.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Get the remaining stack-size of the current thread. - - @param totalSize The total stack size of the current thread. - - @return The remaining size, in bytes, available to the current thread. - - @note This function cannot be inlined, as otherwise the internal implementation could fail to report the proper - remaining stack space. - */ -__attribute__((noinline)) static size_t remaining_stack_size(size_t *restrict totalSize) { - pthread_t currentThread = pthread_self(); - - // NOTE: We must store stack pointers as uint8_t so that the pointer math is well-defined - uint8_t *endStack = pthread_get_stackaddr_np(currentThread); - *totalSize = pthread_get_stacksize_np(currentThread); - - // NOTE: If the function is inlined, this value could be incorrect - uint8_t *frameAddr = __builtin_frame_address(0); - - return (*totalSize) - (endStack - frameAddr); -} - -@interface BFExecutor () - -@property (nonatomic, copy) void(^block)(void(^block)()); - -@end - -@implementation BFExecutor - -#pragma mark - Executor methods - -+ (instancetype)defaultExecutor { - static BFExecutor *defaultExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - defaultExecutor = [self executorWithBlock:^void(void(^block)()) { - // We prefer to run everything possible immediately, so that there is callstack information - // when debugging. However, we don't want the stack to get too deep, so if the remaining stack space - // is less than 10% of the total space, we dispatch to another GCD queue. - size_t totalStackSize = 0; - size_t remainingStackSize = remaining_stack_size(&totalStackSize); - - if (remainingStackSize < (totalStackSize / 10)) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); - } else { - @autoreleasepool { - block(); - } - } - }]; - }); - return defaultExecutor; -} - -+ (instancetype)immediateExecutor { - static BFExecutor *immediateExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - immediateExecutor = [self executorWithBlock:^void(void(^block)()) { - block(); - }]; - }); - return immediateExecutor; -} - -+ (instancetype)mainThreadExecutor { - static BFExecutor *mainThreadExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - mainThreadExecutor = [self executorWithBlock:^void(void(^block)()) { - if (![NSThread isMainThread]) { - dispatch_async(dispatch_get_main_queue(), block); - } else { - @autoreleasepool { - block(); - } - } - }]; - }); - return mainThreadExecutor; -} - -+ (instancetype)executorWithBlock:(void(^)(void(^block)()))block { - return [[self alloc] initWithBlock:block]; -} - -+ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue { - return [self executorWithBlock:^void(void(^block)()) { - dispatch_async(queue, block); - }]; -} - -+ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue { - return [self executorWithBlock:^void(void(^block)()) { - [queue addOperation:[NSBlockOperation blockOperationWithBlock:block]]; - }]; -} - -#pragma mark - Initializer - -- (instancetype)initWithBlock:(void(^)(void(^block)()))block { - self = [super init]; - if (!self) return self; - - _block = block; - - return self; -} - -#pragma mark - Execution - -- (void)execute:(void(^)())block { - self.block(block); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFTask+Exceptions.h b/MetaWear/Pods/Bolts/Bolts/Common/BFTask+Exceptions.h deleted file mode 100644 index 41b633c..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFTask+Exceptions.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#pragma once - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Returns whether all instances of `BFTask` should automatically @try/@catch exceptions in continuation blocks. Default: `YES`. - - @return Boolean value indicating whether exceptions are being caught. - */ -extern BOOL BFTaskCatchesExceptions(void) -__attribute__((deprecated("This is temporary API and will be removed in a future release."))); - -/** - Set whether all instances of `BFTask` should automatically @try/@catch exceptions in continuation blocks. Default: `YES`. - - @param catchExceptions Boolean value indicating whether exceptions shoudl be caught. - */ -extern void BFTaskSetCatchesExceptions(BOOL catchExceptions) -__attribute__((deprecated("This is a temporary API and will be removed in a future release."))); - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFTask+Exceptions.m b/MetaWear/Pods/Bolts/Bolts/Common/BFTask+Exceptions.m deleted file mode 100644 index 928197e..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFTask+Exceptions.m +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2016, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import "BFTask+Exceptions.h" - -NS_ASSUME_NONNULL_BEGIN - -static BOOL taskCatchExceptions = YES; - -BOOL BFTaskCatchesExceptions(void) { - return taskCatchExceptions; -} - -void BFTaskSetCatchesExceptions(BOOL catchExceptions) { - taskCatchExceptions = catchExceptions; -} - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFTask.h b/MetaWear/Pods/Bolts/Bolts/Common/BFTask.h deleted file mode 100644 index 071f994..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFTask.h +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Error domain used if there was multiple errors on . - */ -extern NSString *const BFTaskErrorDomain; - -/*! - An error code used for , if there were multiple errors. - */ -extern NSInteger const kBFMultipleErrorsError; - -/*! - An exception that is thrown if there was multiple exceptions on . - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -extern NSString *const BFTaskMultipleExceptionsException -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - An error userInfo key used if there were multiple errors on . - Value type is `NSArray *`. - */ -extern NSString *const BFTaskMultipleErrorsUserInfoKey; - -/*! - An error userInfo key used if there were multiple exceptions on . - Value type is `NSArray *`. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -extern NSString *const BFTaskMultipleExceptionsUserInfoKey -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -@class BFExecutor; -@class BFTask; - -/*! - The consumer view of a Task. A BFTask has methods to - inspect the state of the task, and to add continuations to - be run once the task is complete. - */ -@interface BFTask<__covariant ResultType> : NSObject - -/*! - A block that can act as a continuation for a task. - */ -typedef __nullable id(^BFContinuationBlock)(BFTask *t); - -/*! - Creates a task that is already completed with the given result. - @param result The result for the task. - */ -+ (instancetype)taskWithResult:(nullable ResultType)result; - -/*! - Creates a task that is already completed with the given error. - @param error The error for the task. - */ -+ (instancetype)taskWithError:(NSError *)error; - -/*! - Creates a task that is already completed with the given exception. - @param exception The exception for the task. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -+ (instancetype)taskWithException:(NSException *)exception -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - Creates a task that is already cancelled. - */ -+ (instancetype)cancelledTask; - -/*! - Returns a task that will be completed (with result == nil) once - all of the input tasks have completed. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAllTasks:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once all of the input tasks have completed. - If all tasks complete successfully without being faulted or cancelled the result will be - an `NSArray` of all task results in the order they were provided. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAllTasksWithResults:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once there is at least one successful task. - The first task to successuly complete will set the result, all other tasks results are - ignored. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAnyTask:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed a certain amount of time in the future. - @param millis The approximate number of milliseconds to wait before the - task will be finished (with result == nil). - */ -+ (instancetype)taskWithDelay:(int)millis; - -/*! - Returns a task that will be completed a certain amount of time in the future. - @param millis The approximate number of milliseconds to wait before the - task will be finished (with result == nil). - @param token The cancellation token (optional). - */ -+ (instancetype)taskWithDelay:(int)millis cancellationToken:(nullable BFCancellationToken *)token; - -/*! - Returns a task that will be completed after the given block completes with - the specified executor. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to immediately schedule to run with the given executor. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -+ (instancetype)taskFromExecutor:(BFExecutor *)executor withBlock:(nullable id (^)())block; - -// Properties that will be set on the task once it is completed. - -/*! - The result of a successful task. - */ -@property (nullable, nonatomic, strong, readonly) ResultType result; - -/*! - The error of a failed task. - */ -@property (nullable, nonatomic, strong, readonly) NSError *error; - -/*! - The exception of a failed task. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -@property (nullable, nonatomic, strong, readonly) NSException *exception -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - Whether this task has been cancelled. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -/*! - Whether this task has completed due to an error or exception. - */ -@property (nonatomic, assign, readonly, getter=isFaulted) BOOL faulted; - -/*! - Whether this task has completed. - */ -@property (nonatomic, assign, readonly, getter=isCompleted) BOOL completed; - -/*! - Enqueues the given block to be run once this task is complete. - This method uses a default execution strategy. The block will be - run on the thread where the previous task completes, unless the - the stack depth is too deep, in which case it will be run on a - dispatch queue with default priority. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block; - -/*! - Enqueues the given block to be run once this task is complete. - This method uses a default execution strategy. The block will be - run on the thread where the previous task completes, unless the - the stack depth is too deep, in which case it will be run on a - dispatch queue with default priority. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -/*! - Enqueues the given block to be run once this task is complete. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor withBlock:(BFContinuationBlock)block; -/*! - Enqueues the given block to be run once this task is complete. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - his method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation, error, or exception. - If it did, then the failure will be propagated to the returned - task. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block; - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation, error, or exception. - If it did, then the failure will be propagated to the returned - task. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or - exception. If it did, then the failure will be propagated to the - returned task. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor withSuccessBlock:(BFContinuationBlock)block; - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or - exception. If it did, then the failure will be propagated to the - returned task. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -/*! - Waits until this operation is completed. - This method is inefficient and consumes a thread resource while - it's running. It should be avoided. This method logs a warning - message if it is used on the main thread. - */ -- (void)waitUntilFinished; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFTask.m b/MetaWear/Pods/Bolts/Bolts/Common/BFTask.m deleted file mode 100644 index fa14fac..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFTask.m +++ /dev/null @@ -1,563 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFTask.h" - -#import - -#import "Bolts.h" -#import "BFTask+Exceptions.h" - -NS_ASSUME_NONNULL_BEGIN - -__attribute__ ((noinline)) void warnBlockingOperationOnMainThread() { - NSLog(@"Warning: A long-running operation is being executed on the main thread. \n" - " Break on warnBlockingOperationOnMainThread() to debug."); -} - -NSString *const BFTaskErrorDomain = @"bolts"; -NSInteger const kBFMultipleErrorsError = 80175001; -NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException"; - -NSString *const BFTaskMultipleErrorsUserInfoKey = @"errors"; -NSString *const BFTaskMultipleExceptionsUserInfoKey = @"exceptions"; - -@interface BFTask () { - id _result; - NSError *_error; - NSException *_exception; -} - -@property (nonatomic, assign, readwrite, getter=isCancelled) BOOL cancelled; -@property (nonatomic, assign, readwrite, getter=isFaulted) BOOL faulted; -@property (nonatomic, assign, readwrite, getter=isCompleted) BOOL completed; - -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic, strong) NSCondition *condition; -@property (nonatomic, strong) NSMutableArray *callbacks; - -@end - -@implementation BFTask - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _lock = [[NSObject alloc] init]; - _condition = [[NSCondition alloc] init]; - _callbacks = [NSMutableArray array]; - - return self; -} - -- (instancetype)initWithResult:(id)result { - self = [super init]; - if (!self) return self; - - [self trySetResult:result]; - - return self; -} - -- (instancetype)initWithError:(NSError *)error { - self = [super init]; - if (!self) return self; - - [self trySetError:error]; - - return self; -} - -- (instancetype)initWithException:(NSException *)exception { - self = [super init]; - if (!self) return self; - - [self trySetException:exception]; - - return self; -} - -- (instancetype)initCancelled { - self = [super init]; - if (!self) return self; - - [self trySetCancelled]; - - return self; -} - -#pragma mark - Task Class methods - -+ (instancetype)taskWithResult:(nullable id)result { - return [[self alloc] initWithResult:result]; -} - -+ (instancetype)taskWithError:(NSError *)error { - return [[self alloc] initWithError:error]; -} - -+ (instancetype)taskWithException:(NSException *)exception { - return [[self alloc] initWithException:exception]; -} - -+ (instancetype)cancelledTask { - return [[self alloc] initCancelled]; -} - -+ (instancetype)taskForCompletionOfAllTasks:(nullable NSArray *)tasks { - __block int32_t total = (int32_t)tasks.count; - if (total == 0) { - return [self taskWithResult:nil]; - } - - __block int32_t cancelled = 0; - NSObject *lock = [[NSObject alloc] init]; - NSMutableArray *errors = [NSMutableArray array]; - NSMutableArray *exceptions = [NSMutableArray array]; - - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - for (BFTask *task in tasks) { - [task continueWithBlock:^id(BFTask *t) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (t.exception) { - @synchronized (lock) { - [exceptions addObject:t.exception]; -#pragma clang diagnostic pop - } - } else if (t.error) { - @synchronized (lock) { - [errors addObject:t.error]; - } - } else if (t.cancelled) { - OSAtomicIncrement32Barrier(&cancelled); - } - - if (OSAtomicDecrement32Barrier(&total) == 0) { - if (exceptions.count > 0) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (exceptions.count == 1) { - tcs.exception = [exceptions firstObject]; - } else { - NSException *exception = [NSException exceptionWithName:BFTaskMultipleExceptionsException - reason:@"There were multiple exceptions." - userInfo:@{ BFTaskMultipleExceptionsUserInfoKey: exceptions }]; - tcs.exception = exception; - } -#pragma clang diagnostic pop - } else if (errors.count > 0) { - if (errors.count == 1) { - tcs.error = [errors firstObject]; - } else { - NSError *error = [NSError errorWithDomain:BFTaskErrorDomain - code:kBFMultipleErrorsError - userInfo:@{ BFTaskMultipleErrorsUserInfoKey: errors }]; - tcs.error = error; - } - } else if (cancelled > 0) { - [tcs cancel]; - } else { - tcs.result = nil; - } - } - return nil; - }]; - } - return tcs.task; -} - -+ (instancetype)taskForCompletionOfAllTasksWithResults:(nullable NSArray *)tasks { - return [[self taskForCompletionOfAllTasks:tasks] continueWithSuccessBlock:^id(BFTask *task) { - return [tasks valueForKey:@"result"]; - }]; -} - -+ (instancetype)taskForCompletionOfAnyTask:(nullable NSArray *)tasks -{ - __block int32_t total = (int32_t)tasks.count; - if (total == 0) { - return [self taskWithResult:nil]; - } - - __block int completed = 0; - __block int32_t cancelled = 0; - - NSObject *lock = [NSObject new]; - NSMutableArray *errors = [NSMutableArray new]; - NSMutableArray *exceptions = [NSMutableArray new]; - - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - for (BFTask *task in tasks) { - [task continueWithBlock:^id(BFTask *t) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (t.exception != nil) { - @synchronized(lock) { - [exceptions addObject:t.exception]; -#pragma clang diagnostic pop - } - } else if (t.error != nil) { - @synchronized(lock) { - [errors addObject:t.error]; - } - } else if (t.cancelled) { - OSAtomicIncrement32Barrier(&cancelled); - } else { - if(OSAtomicCompareAndSwap32Barrier(0, 1, &completed)) { - [source setResult:t.result]; - } - } - - if (OSAtomicDecrement32Barrier(&total) == 0 && - OSAtomicCompareAndSwap32Barrier(0, 1, &completed)) { - if (cancelled > 0) { - [source cancel]; - } else if (exceptions.count > 0) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (exceptions.count == 1) { - source.exception = exceptions.firstObject; - } else { - NSException *exception = [NSException exceptionWithName:BFTaskMultipleExceptionsException - reason:@"There were multiple exceptions." - userInfo:@{ BFTaskMultipleExceptionsUserInfoKey: exceptions }]; - source.exception = exception; -#pragma clang diagnostic pop - } - } else if (errors.count > 0) { - if (errors.count == 1) { - source.error = errors.firstObject; - } else { - NSError *error = [NSError errorWithDomain:BFTaskErrorDomain - code:kBFMultipleErrorsError - userInfo:@{ @"errors": errors }]; - source.error = error; - } - } - } - // Abort execution of per tasks continuations - return nil; - }]; - } - return source.task; -} - - -+ (instancetype)taskWithDelay:(int)millis { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - tcs.result = nil; - }); - return tcs.task; -} - -+ (instancetype)taskWithDelay:(int)millis cancellationToken:(nullable BFCancellationToken *)token { - if (token.cancellationRequested) { - return [BFTask cancelledTask]; - } - - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - if (token.cancellationRequested) { - [tcs cancel]; - return; - } - tcs.result = nil; - }); - return tcs.task; -} - -+ (instancetype)taskFromExecutor:(BFExecutor *)executor withBlock:(nullable id (^)())block { - return [[self taskWithResult:nil] continueWithExecutor:executor withBlock:^id(BFTask *task) { - return block(); - }]; -} - -#pragma mark - Custom Setters/Getters - -- (nullable id)result { - @synchronized(self.lock) { - return _result; - } -} - -- (BOOL)trySetResult:(nullable id)result { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - _result = result; - [self runContinuations]; - return YES; - } -} - -- (nullable NSError *)error { - @synchronized(self.lock) { - return _error; - } -} - -- (BOOL)trySetError:(NSError *)error { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.faulted = YES; - _error = error; - [self runContinuations]; - return YES; - } -} - -- (nullable NSException *)exception { - @synchronized(self.lock) { - return _exception; - } -} - -- (BOOL)trySetException:(NSException *)exception { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.faulted = YES; - _exception = exception; - [self runContinuations]; - return YES; - } -} - -- (BOOL)isCancelled { - @synchronized(self.lock) { - return _cancelled; - } -} - -- (BOOL)isFaulted { - @synchronized(self.lock) { - return _faulted; - } -} - -- (BOOL)trySetCancelled { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.cancelled = YES; - [self runContinuations]; - return YES; - } -} - -- (BOOL)isCompleted { - @synchronized(self.lock) { - return _completed; - } -} - -- (void)runContinuations { - @synchronized(self.lock) { - [self.condition lock]; - [self.condition broadcast]; - [self.condition unlock]; - for (void (^callback)() in self.callbacks) { - callback(); - } - [self.callbacks removeAllObjects]; - } -} - -#pragma mark - Chaining methods - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor withBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:executor block:block cancellationToken:nil]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - - // Capture all of the state that needs to used when the continuation is complete. - dispatch_block_t executionBlock = ^{ - if (cancellationToken.cancellationRequested) { - [tcs cancel]; - return; - } - - id result = nil; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (BFTaskCatchesExceptions()) { - @try { - result = block(self); - } @catch (NSException *exception) { - NSLog(@"[Bolts] Warning: `BFTask` caught an exception in the continuation block." - @" This behavior is discouraged and will be removed in a future release." - @" Caught Exception: %@", exception); - tcs.exception = exception; - return; - } - } else { - result = block(self); - } -#pragma clang diagnostic pop - - if ([result isKindOfClass:[BFTask class]]) { - - id (^setupWithTask) (BFTask *) = ^id(BFTask *task) { - if (cancellationToken.cancellationRequested || task.cancelled) { - [tcs cancel]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - } else if (task.exception) { - tcs.exception = task.exception; -#pragma clang diagnostic pop - } else if (task.error) { - tcs.error = task.error; - } else { - tcs.result = task.result; - } - return nil; - }; - - BFTask *resultTask = (BFTask *)result; - - if (resultTask.completed) { - setupWithTask(resultTask); - } else { - [resultTask continueWithBlock:setupWithTask]; - } - - } else { - tcs.result = result; - } - }; - - BOOL completed; - @synchronized(self.lock) { - completed = self.completed; - if (!completed) { - [self.callbacks addObject:[^{ - [executor execute:executionBlock]; - } copy]]; - } - } - if (completed) { - [executor execute:executionBlock]; - } - - return tcs.task; -} - -- (BFTask *)continueWithBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:nil]; -} - -- (BFTask *)continueWithBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken { - return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:cancellationToken]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:executor successBlock:block cancellationToken:nil]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - return [self continueWithExecutor:executor block:^id(BFTask *task) { - if (task.faulted || task.cancelled) { - return task; - } else { - return block(task); - } - } cancellationToken:cancellationToken]; -} - -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:nil]; -} - -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken { - return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:cancellationToken]; -} - -#pragma mark - Syncing Task (Avoid it) - -- (void)warnOperationOnMainThread { - warnBlockingOperationOnMainThread(); -} - -- (void)waitUntilFinished { - if ([NSThread isMainThread]) { - [self warnOperationOnMainThread]; - } - - @synchronized(self.lock) { - if (self.completed) { - return; - } - [self.condition lock]; - } - // TODO: (nlutsenko) Restructure this to use Bolts-Swift thread access synchronization architecture - // In the meantime, it's absolutely safe to get `_completed` aka an ivar, as long as it's a `BOOL` aka less than word size. - while (!_completed) { - [self.condition wait]; - } - [self.condition unlock]; -} - -#pragma mark - NSObject - -- (NSString *)description { - // Acquire the data from the locked properties - BOOL completed; - BOOL cancelled; - BOOL faulted; - NSString *resultDescription = nil; - - @synchronized(self.lock) { - completed = self.completed; - cancelled = self.cancelled; - faulted = self.faulted; - resultDescription = completed ? [NSString stringWithFormat:@" result = %@", self.result] : @""; - } - - // Description string includes status information and, if available, the - // result since in some ways this is what a promise actually "is". - return [NSString stringWithFormat:@"<%@: %p; completed = %@; cancelled = %@; faulted = %@;%@>", - NSStringFromClass([self class]), - self, - completed ? @"YES" : @"NO", - cancelled ? @"YES" : @"NO", - faulted ? @"YES" : @"NO", - resultDescription]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h b/MetaWear/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h deleted file mode 100644 index 18810bc..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask; - -/*! - A BFTaskCompletionSource represents the producer side of tasks. - It is a task that also has methods for changing the state of the - task by settings its completion values. - */ -@interface BFTaskCompletionSource<__covariant ResultType> : NSObject - -/*! - Creates a new unfinished task. - */ -+ (instancetype)taskCompletionSource; - -/*! - The task associated with this TaskCompletionSource. - */ -@property (nonatomic, strong, readonly) BFTask *task; - -/*! - Completes the task by setting the result. - Attempting to set this for a completed task will raise an exception. - @param result The result of the task. - */ -- (void)setResult:(nullable ResultType)result; - -/*! - Completes the task by setting the error. - Attempting to set this for a completed task will raise an exception. - @param error The error for the task. - */ -- (void)setError:(NSError *)error; - -/*! - Completes the task by setting an exception. - Attempting to set this for a completed task will raise an exception. - @param exception The exception for the task. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -- (void)setException:(NSException *)exception -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - Completes the task by marking it as cancelled. - Attempting to set this for a completed task will raise an exception. - */ -- (void)cancel; - -/*! - Sets the result of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetResult:(nullable ResultType)result; - -/*! - Sets the error of the task if it wasn't already completed. - @param error The error for the task. - @returns whether the new value was set. - */ -- (BOOL)trySetError:(NSError *)error; - -/*! - Sets the exception of the task if it wasn't already completed. - @param exception The exception for the task. - @returns whether the new value was set. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -- (BOOL)trySetException:(NSException *)exception -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - Sets the cancellation state of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetCancelled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m b/MetaWear/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m deleted file mode 100644 index 1b99aab..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFTaskCompletionSource.h" - -#import "BFTask.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFTask (BFTaskCompletionSource) - -- (BOOL)trySetResult:(nullable id)result; -- (BOOL)trySetError:(NSError *)error; -- (BOOL)trySetException:(NSException *)exception; -- (BOOL)trySetCancelled; - -@end - -@implementation BFTaskCompletionSource - -#pragma mark - Initializer - -+ (instancetype)taskCompletionSource { - return [[self alloc] init]; -} - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _task = [[BFTask alloc] init]; - - return self; -} - -#pragma mark - Custom Setters/Getters - -- (void)setResult:(nullable id)result { - if (![self.task trySetResult:result]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the result on a completed task."]; - } -} - -- (void)setError:(NSError *)error { - if (![self.task trySetError:error]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the error on a completed task."]; - } -} - -- (void)setException:(NSException *)exception { - if (![self.task trySetException:exception]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the exception on a completed task."]; - } -} - -- (void)cancel { - if (![self.task trySetCancelled]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot cancel a completed task."]; - } -} - -- (BOOL)trySetResult:(nullable id)result { - return [self.task trySetResult:result]; -} - -- (BOOL)trySetError:(NSError *)error { - return [self.task trySetError:error]; -} - -- (BOOL)trySetException:(NSException *)exception { - return [self.task trySetException:exception]; -} - -- (BOOL)trySetCancelled { - return [self.task trySetCancelled]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/Bolts.h b/MetaWear/Pods/Bolts/Bolts/Common/Bolts.h deleted file mode 100644 index 907e4a2..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/Bolts.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import -#import -#import -#import -#import -#import -#import - -#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#endif - - -NS_ASSUME_NONNULL_BEGIN - -/** - A string containing the version of the Bolts Framework used by the current application. - */ -extern NSString *const BoltsFrameworkVersionString; - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/Bolts/Common/Bolts.m b/MetaWear/Pods/Bolts/Bolts/Common/Bolts.m deleted file mode 100644 index 54a88ac..0000000 --- a/MetaWear/Pods/Bolts/Bolts/Common/Bolts.m +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "Bolts.h" - -NS_ASSUME_NONNULL_BEGIN - -NSString *const BoltsFrameworkVersionString = @"1.8.4"; - -NS_ASSUME_NONNULL_END diff --git a/MetaWear/Pods/Bolts/README.md b/MetaWear/Pods/Bolts/README.md deleted file mode 100644 index 5e972c8..0000000 --- a/MetaWear/Pods/Bolts/README.md +++ /dev/null @@ -1,683 +0,0 @@ -Bolts -============ -[![Build Status](https://img.shields.io/travis/BoltsFramework/Bolts-ObjC/master.svg?style=flat)](https://travis-ci.org/BoltsFramework/Bolts-ObjC) -[![Coverage Status](https://codecov.io/github/BoltsFramework/Bolts-ObjC/coverage.svg?branch=master)](https://codecov.io/github/BoltsFramework/Bolts-ObjC?branch=master) -[![Pod Platform](https://img.shields.io/cocoapods/p/Bolts.svg?style=flat)](https://cocoapods.org/pods/Bolts) -[![Pod License](https://img.shields.io/cocoapods/l/Bolts.svg?style=flat)](https://github.com/BoltsFramework/Bolts-ObjC/blob/master/LICENSE) -[![Reference Status](https://www.versioneye.com/objective-c/bolts/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/bolts/references) - -[![Pod Version](https://img.shields.io/cocoapods/v/Bolts.svg?style=flat)](https://cocoapods.org/pods/Bolts) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -Bolts is a collection of low-level libraries designed to make developing mobile -apps easier. Bolts was designed by Parse and Facebook for our own internal use, -and we have decided to open source these libraries to make them available to -others. Using these libraries does not require using any Parse services. Nor -do they require having a Parse or Facebook developer account. - -Bolts includes: - -* "Tasks", which make organization of complex asynchronous code more manageable. A task is kind of like a JavaScript Promise, but available for iOS and Android. -* An implementation of the [App Links protocol](http://applinks.org/), helping you link to content in other apps and handle incoming deep-links. - -For more information, see the [Bolts iOS API Reference](http://boltsframework.github.io/docs/ios/). - -# Tasks - -To build a truly responsive iOS application, you must keep long-running operations off of the UI thread, and be careful to avoid blocking anything the UI thread might be waiting on. This means you will need to execute various operations in the background. To make this easier, we've added a class called `BFTask`. A task represents the result of an asynchronous operation. Typically, a `BFTask` is returned from an asynchronous function and gives the ability to continue processing the result of the task. When a task is returned from a function, it's already begun doing its job. A task is not tied to a particular threading model: it represents the work being done, not where it is executing. Tasks have many advantages over other methods of asynchronous programming, such as callbacks. `BFTask` is not a replacement for `NSOperation` or GCD. In fact, they play well together. But tasks do fill in some gaps that those technologies don't address. -* `BFTask` takes care of managing dependencies for you. Unlike using `NSOperation` for dependency management, you don't have to declare all dependencies before starting a `BFTask`. For example, imagine you need to save a set of objects and each one may or may not require saving child objects. With an `NSOperation`, you would normally have to create operations for each of the child saves ahead of time. But you don't always know before you start the work whether that's going to be necessary. That can make managing dependencies with `NSOperation` very painful. Even in the best case, you have to create your dependencies before the operations that depend on them, which results in code that appears in a different order than it executes. With `BFTask`, you can decide during your operation's work whether there will be subtasks and return the other task in just those cases. -* `BFTasks` release their dependencies. `NSOperation` strongly retains its dependencies, so if you have a queue of ordered operations and sequence them using dependencies, you have a leak, because every operation gets retained forever. `BFTasks` release their callbacks as soon as they are run, so everything cleans up after itself. This can reduce memory use, and simplify memory management. -* `BFTasks` keep track of the state of finished tasks: It tracks whether there was a returned value, the task was cancelled, or if an error occurred. It also has convenience methods for propagating errors. With `NSOperation`, you have to build all of this stuff yourself. -* `BFTasks` don't depend on any particular threading model. So it's easy to have some tasks perform their work with an operation queue, while others perform work using blocks with GCD. These tasks can depend on each other seamlessly. -* Performing several tasks in a row will not create nested "pyramid" code as you would get when using only callbacks. -* `BFTasks` are fully composable, allowing you to perform branching, parallelism, and complex error handling, without the spaghetti code of having many named callbacks. -* You can arrange task-based code in the order that it executes, rather than having to split your logic across scattered callback functions. - -For the examples in this doc, assume there are async versions of some common Parse methods, called `saveAsync:` and `findAsync:` which return a `Task`. In a later section, we'll show how to define these functions yourself. - -## The `continueWithBlock` Method - -Every `BFTask` has a method named `continueWithBlock:` which takes a continuation block. A continuation is a block that will be executed when the task is complete. You can then inspect the task to check if it was successful and to get its result. - -```objective-c -// Objective-C -[[self saveAsync:obj] continueWithBlock:^id(BFTask *task) { - if (task.isCancelled) { - // the save was cancelled. - } else if (task.error) { - // the save failed. - } else { - // the object was saved successfully. - PFObject *object = task.result; - } - return nil; -}]; -``` - -```swift -// Swift -self.saveAsync(obj).continueWithBlock { - (task: BFTask!) -> BFTask in - if task.isCancelled() { - // the save was cancelled. - } else if task.error != nil { - // the save failed. - } else { - // the object was saved successfully. - var object = task.result() as PFObject - } -} -``` - -BFTasks use Objective-C blocks, so the syntax should be pretty straightforward. Let's look closer at the types involved with an example. - -```objective-c -// Objective-C -/** - * Gets an NSString asynchronously. - */ -- (BFTask *)getStringAsync { - // Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. - return [[self getNumberAsync] continueWithBlock:^id(BFTask *task) { - // This continuation block takes the NSNumber BFTask as input, - // and provides an NSString as output. - - NSNumber *number = task.result; - return [NSString stringWithFormat:@"%@", number]; - )]; -} -``` - -```swift -// Swift -/** - * Gets an NSString asynchronously. - */ -func getStringAsync() -> BFTask { - //Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. - return self.getNumberAsync().continueWithBlock { - (task: BFTask!) -> NSString in - // This continuation block takes the NSNumber BFTask as input, - // and provides an NSString as output. - - let number = task.result() as NSNumber - return NSString(format:"%@", number) - } -} -``` - -In many cases, you only want to do more work if the previous task was successful, and propagate any errors or cancellations to be dealt with later. To do this, use the `continueWithSuccessBlock:` method instead of `continueWithBlock:`. - -```objective-c -// Objective-C -[[self saveAsync:obj] continueWithSuccessBlock:^id(BFTask *task) { - // the object was saved successfully. - return nil; -}]; -``` - -```swift -// Swift -self.saveAsync(obj).continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // the object was saved successfully. - return nil -} -``` - -## Chaining Tasks Together - -BFTasks are a little bit magical, in that they let you chain them without nesting. If you return a BFTask from `continueWithBlock:`, then the task returned by `continueWithBlock:` will not be considered finished until the new task returned from the new continuation block. This lets you perform multiple actions without incurring the pyramid code you would get with callbacks. Likewise, you can return a `BFTask` from `continueWithSuccessBlock:`. So, return a `BFTask` to do more asynchronous work. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Student"]; -[query orderByDescending:@"gpa"]; -[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *valedictorian = [students objectAtIndex:0]; - [valedictorian setObject:@YES forKey:@"valedictorian"]; - return [self saveAsync:valedictorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - PFObject *valedictorian = task.result; - return [self findAsync:query]; -}] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *salutatorian = [students objectAtIndex:1]; - [salutatorian setObject:@YES forKey:@"salutatorian"]; - return [self saveAsync:salutatorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Everything is done! - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Student") -query.orderByDescending("gpa") -findAsync(query).continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var valedictorian = students.objectAtIndex(0) as PFObject - valedictorian["valedictorian"] = true - return self.saveAsync(valedictorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - var valedictorian = task.result() as PFObject - return self.findAsync(query) -}.continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var salutatorian = students.objectAtIndex(1) as PFObject - salutatorian["salutatorian"] = true - return self.saveAsync(salutatorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // Everything is done! - return nil -} -``` - -## Error Handling - -By carefully choosing whether to call `continueWithBlock:` or `continueWithSuccessBlock:`, you can control how errors are propagated in your application. Using `continueWithBlock:` lets you handle errors by transforming them or dealing with them. You can think of failed tasks kind of like throwing an exception. In fact, if you throw an exception inside a continuation, the resulting task will be faulted with that exception. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Student"]; -[query orderByDescending:@"gpa"]; -[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *valedictorian = [students objectAtIndex:0]; - [valedictorian setObject:@YES forKey:@"valedictorian"]; - // Force this callback to fail. - return [BFTask taskWithError:[NSError errorWithDomain:@"example.com" - code:-1 - userInfo:nil]]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Now this continuation will be skipped. - PFQuery *valedictorian = task.result; - return [self findAsync:query]; -}] continueWithBlock:^id(BFTask *task) { - if (task.error) { - // This error handler WILL be called. - // The error will be the NSError returned above. - // Let's handle the error by returning a new value. - // The task will be completed with nil as its value. - return nil; - } - // This will also be skipped. - NSArray *students = task.result; - PFObject *salutatorian = [students objectAtIndex:1]; - [salutatorian setObject:@YES forKey:@"salutatorian"]; - return [self saveAsync:salutatorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Everything is done! This gets called. - // The task's result is nil. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Student") -query.orderByDescending("gpa") -findAsync(query).continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var valedictorian = students.objectAtIndex(0) as PFObject - valedictorian["valedictorian"] = true - //Force this callback to fail. - return BFTask(error:NSError(domain:"example.com", - code:-1, userInfo: nil)) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - //Now this continuation will be skipped. - var valedictorian = task.result() as PFObject - return self.findAsync(query) -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - if task.error != nil { - // This error handler WILL be called. - // The error will be the NSError returned above. - // Let's handle the error by returning a new value. - // The task will be completed with nil as its value. - return nil - } - // This will also be skipped. - let students = task.result() as NSArray - var salutatorian = students.objectAtIndex(1) as PFObject - salutatorian["salutatorian"] = true - return self.saveAsync(salutatorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // Everything is done! This gets called. - // The tasks result is nil. - return nil -} -``` - -It's often convenient to have a long chain of success callbacks with only one error handler at the end. - -## Creating Tasks - -When you're getting started, you can just use the tasks returned from methods like `findAsync:` or `saveAsync:`. However, for more advanced scenarios, you may want to make your own tasks. To do that, you create a `BFTaskCompletionSource`. This object will let you create a new `BFTask`, and control whether it gets marked as finished or cancelled. After you create a `BFTaskCompletionSource`, you'll need to call `setResult:`, `setError:`, or `cancel` to trigger its continuations. - -```objective-c -// Objective-C -- (BFTask *)successAsync { - BFTaskCompletionSource *successful = [BFTaskCompletionSource taskCompletionSource]; - [successful setResult:@"The good result."]; - return successful.task; -} - -- (BFTask *)failAsync { - BFTaskCompletionSource *failed = [BFTaskCompletionSource taskCompletionSource]; - [failed setError:[NSError errorWithDomain:@"example.com" code:-1 userInfo:nil]]; - return failed.task; -} -``` - -```swift -// Swift -func successAsync() -> BFTask { - var successful = BFTaskCompletionSource() - successful.setResult("The good result.") - return successful.task -} - -func failAsync() -> BFTask { - var failed = BFTaskCompletionSource() - failed.setError(NSError(domain:"example.com", code:-1, userInfo:nil)) - return failed.task -} -``` - -If you know the result of a task at the time it is created, there are some convenience methods you can use. - -```objective-c -// Objective-C -BFTask *successful = [BFTask taskWithResult:@"The good result."]; - -BFTask *failed = [BFTask taskWithError:anError]; -``` - -```swift -// Swift -let successful = BFTask(result:"The good result") - -let failed = BFTask(error:anError) -``` - -## Creating Async Methods - -With these tools, it's easy to make your own asynchronous functions that return tasks. For example, you can make a task-based version of `fetchAsync:` easily. - -```objective-c -// Objective-C -- (BFTask *) fetchAsync:(PFObject *)object { - BFTaskCompletionSource *task = [BFTaskCompletionSource taskCompletionSource]; - [object fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { - if (!error) { - [task setResult:object]; - } else { - [task setError:error]; - } - }]; - return task.task; -} -``` - -```swift -// Swift -func fetchAsync(object: PFObject) -> BFTask { - var task = BFTaskCompletionSource() - object.fetchInBackgroundWithBlock { - (object: PFObject?, error: NSError?) -> Void in - if error == nil { - task.setResult(object) - } else { - task.setError(error) - } - } - return task.task -} - -``` - -It's similarly easy to create `saveAsync:`, `findAsync:` or `deleteAsync:`. - -## Tasks in Series - -`BFTasks` are convenient when you want to do a series of tasks in a row, each one waiting for the previous to finish. For example, imagine you want to delete all of the comments on your blog. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; -[query whereKey:@"post" equalTo:@123]; - -[[[self findAsync:query] continueWithBlock:^id(BFTask *task) { - NSArray *results = task.result; - - // Create a trivial completed task as a base case. - BFTask *task = [BFTask taskWithResult:nil]; - for (PFObject *result in results) { - // For each item, extend the task with a function to delete the item. - task = [task continueWithBlock:^id(BFTask *task) { - // Return a task that will be marked as completed when the delete is finished. - return [self deleteAsync:result]; - }]; - } - return task; -}] continueWithBlock:^id(BFTask *task) { - // Every comment was deleted. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Comments") -query.whereKey("post", equalTo:123) -findAsync(query).continueWithBlock { - (task: BFTask!) -> BFTask in - let results = task.result() as NSArray - - // Create a trivial completed task as a base case. - let task = BFTask(result:nil) - for result : PFObject in results { - // For each item, extend the task with a function to delete the item. - task = task.continueWithBlock { - (task: BFTask!) -> BFTask in - return self.deleteAsync(result) - } - } - return task -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - // Every comment was deleted. - return nil -} -``` - -## Tasks in Parallel - -You can also perform several tasks in parallel, using the `taskForCompletionOfAllTasks:` method. You can start multiple operations at once, and use `taskForCompletionOfAllTasks:` to create a new task that will be marked as completed when all of its input tasks are completed. The new task will be successful only if all of the passed-in tasks succeed. Performing operations in parallel will be faster than doing them serially, but may consume more system resources and bandwidth. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; -[query whereKey:@"post" equalTo:@123]; - -[[[self findAsync:query] continueWithBlock:^id(BFTask *results) { - // Collect one task for each delete into an array. - NSMutableArray *tasks = [NSMutableArray array]; - for (PFObject *result in results) { - // Start this delete immediately and add its task to the list. - [tasks addObject:[self deleteAsync:result]]; - } - // Return a new task that will be marked as completed when all of the deletes are - // finished. - return [BFTask taskForCompletionOfAllTasks:tasks]; -}] continueWithBlock:^id(BFTask *task) { - // Every comment was deleted. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Comments") -query.whereKey("post", equalTo:123) - -findAsync(query).continueWithBlock { - (task: BFTask!) -> BFTask in - // Collect one task for each delete into an array. - var tasks = NSMutableArray.array() - var results = task.result() as NSArray - for result : PFObject! in results { - // Start this delete immediately and add its task to the list. - tasks.addObject(self.deleteAsync(result)) - } - // Return a new task that will be marked as completed when all of the deletes - // are finished. - return BFTask(forCompletionOfAllTasks:tasks) -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - // Every comment was deleted. - return nil -} -``` - -## Task Executors - -Both `continueWithBlock:` and `continueWithSuccessBlock:` methods have another form that takes an instance of `BFExecutor`. These are `continueWithExecutor:withBlock:` and `continueWithExecutor:withSuccessBlock:`. These methods allow you to control how the continuation is executed. The default executor will dispatch to GCD, but you can provide your own executor to schedule work onto a different thread. For example, if you want to continue with work on the UI thread: - -```objective-c -// Create a BFExecutor that uses the main thread. -BFExecutor *myExecutor = [BFExecutor executorWithBlock:^void(void(^block)()) { - dispatch_async(dispatch_get_main_queue(), block); -}]; - -// And use the Main Thread Executor like this. The executor applies only to the new -// continuation being passed into continueWithBlock. -[[self fetchAsync:object] continueWithExecutor:myExecutor withBlock:^id(BFTask *task) { - myTextView.text = [object objectForKey:@"name"]; -}]; -``` - -For common cases, such as dispatching on the main thread, we have provided default implementations of `BFExecutor`. These include `defaultExecutor`, `immediateExecutor`, `mainThreadExecutor`, `executorWithDispatchQueue:`, and `executorWithOperationQueue:`. For example: - -```objective-c -// Continue on the Main Thread, using a built-in executor. -[[self fetchAsync:object] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { - myTextView.text = [object objectForKey:@"name"]; -}]; -``` - -## Task Cancellation - -It's generally bad design to keep track of the `BFTaskCompletionSource` for cancellation. A better model is to create a "cancellation token" at the top level, and pass that to each async function that you want to be part of the same "cancelable operation". Then, in your continuation blocks, you can check whether the cancellation token has been cancelled and bail out early by returning a `[BFTask cancelledTask]`. For example: - -```objective-c -- (void)doSomethingComplicatedAsync:(MYCancellationToken *)cancellationToken { - [[self doSomethingAsync:cancellationToken] continueWithBlock:^{ - if (cancellationToken.isCancelled) { - return [BFTask cancelledTask]; - } - // Do something that takes a while. - return result; - }]; -} - -// Somewhere else. -MYCancellationToken *cancellationToken = [[MYCancellationToken alloc] init]; -[obj doSomethingComplicatedAsync:cancellationToken]; - -// When you get bored... -[cancellationToken cancel]; -``` - -**Note:** The cancellation token implementation should be thread-safe. -We are likely to add some concept like this to Bolts at some point in the future. - -# App Links - -[App Links](http://applinks.org/) provide a cross-platform mechanism that allows a developer to define and publish a deep-linking scheme for their content, allowing other apps to link directly to an experience optimized for the device they are running on. Whether you are building an app that receives incoming links or one that may link out to other apps' content, Bolts provides tools to simplify implementation of the [App Links protocol](http://applinks.org/documentation). - -## Handling an App Link - -The most common case will be making your app receive App Links. In-linking will allow your users to quickly access the richest, most native-feeling presentation of linked content on their devices. Bolts makes it easy to handle an inbound App Link (as well as general inbound deep-links) by providing utilities for processing an incoming URL. - -For example, you can use the `BFURL` utility class to parse an incoming URL in your `AppDelegate`: - -```objective-c -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation { - BFURL *parsedUrl = [BFURL URLWithInboundURL:url sourceApplication:sourceApplication]; - - // Use the target URL from the App Link to locate content. - if ([parsedUrl.targetURL.pathComponents[1] isEqualToString:@"profiles"]) { - // Open a profile viewer. - } - - // You can also check the query string easily. - NSString *query = parsedUrl.targetQueryParameters[@"query"]; - - // Apps that have existing deep-linking support and map their App Links to existing - // deep-linking functionality may instead want to perform these operations on the input URL. - // Use the target URL from the App Link to locate content. - if ([parsedUrl.inputURL.pathComponents[1] isEqualToString:@"profiles"]) { - // Open a profile viewer. - } - - // You can also check the query string easily. - NSString *query = parsedUrl.inputQueryParameters[@"query"]; - - // Apps can easily check the Extras and App Link data from the App Link as well. - NSString *fbAccessToken = parsedUrl.appLinkExtras[@"fb_access_token"]; - NSDictionary *refererData = parsedUrl.appLinkExtras[@"referer"]; -} -``` - -## Navigating to a URL - -Following an App Link allows your app to provide the best user experience (as defined by the receiving app) when a user navigates to a link. Bolts makes this process simple, automating the steps required to follow a link: - -1. Resolve the App Link by getting the App Link metadata from the HTML at the URL specified. -2. Step through App Link targets relevant to the device being used, checking whether the app that can handle the target is present on the device. -3. If an app is present, build a URL with the appropriate al_applink_data specified and navigate to that URL. -4. Otherwise, open the browser with the original URL specified. - -In the simplest case, it takes just one line of code to navigate to a URL that may have an App Link: - -```objective-c -[BFAppLinkNavigation navigateToURLInBackground:url]; -``` - -### Adding App and Navigation Data - -Under most circumstances, the data that will need to be passed along to an app during a navigation will be contained in the URL itself, so that whether or not the app is actually installed on the device, users are taken to the correct content. Occasionally, however, apps will want to pass along data that is relevant for app-to-app navigation, or will want to augment the App Link protocol with information that might be used by the app to adjust how the app should behave (e.g. showing a link back to the referring app). - -If you want to take advantage of these features, you can break apart the navigation process. First, you must have an App Link to which you wish to navigate: - -```objective-c -[[BFAppLinkNavigation resolveAppLinkInBackground:url] continueWithSuccessBlock:^id(BFTask *task) { - BFAppLink *link = task.result; -}]; -``` - -Then, you can build an App Link request with any additional data you would like and navigate: - -```objective-c -BFAppLinkNavigation *navigation = [BFAppLinkNavigation navigationWithAppLink:link - extras:@{ @"access_token": @"t0kEn" } - appLinkData:@{ @"ref": @"12345" }]; -NSError *error = nil; -[navigation navigate:&error]; -``` - -### Resolving App Link Metadata - -Bolts allows for custom App Link resolution, which may be used as a performance optimization (e.g. caching the metadata) or as a mechanism to allow developers to use a centralized index for obtaining App Link metadata. A custom App Link resolver just needs to be able to take a URL and return a `BFAppLink` containing the ordered list of `BFAppLinkTarget`s that are applicable for this device. Bolts provides one of these out of the box that performs this resolution on the device using a hidden UIWebView. - -You can use any resolver that implements the `BFAppLinkResolving` protocol by using one of the overloads on `BFAppLinkNavigation`: - -```objective-c -[BFAppLinkNavigation navigateToURLInBackground:url - resolver:resolver]; -``` - -Alternatively, a you can swap out the default resolver to be used by the built-in APIs: - -```objective-c -[BFAppLinkNavigation setDefaultResolver:resolver]; -[BFAppLinkNavigation navigateToURLInBackground:url]; -``` - -## App Link Return-to-Referer View - -When an application is opened via an App Link, a banner allowing the user to "Touch to return to " should be displayed. The `BFAppLinkReturnToRefererView` provides this functionality. It will take an incoming App Link and parse the referer information to display the appropriate calling app name. - -```objective-c -- (void)viewDidLoad { - [super viewDidLoad]; - - // Perform other view initialization. - - self.returnToRefererController = [[BFAppLinkReturnToRefererController alloc] init]; - - // self.returnToRefererView is a BFAppLinkReturnToRefererView. - // You may initialize the view either by loading it from a NIB or programmatically. - self.returnToRefererController.view = self.returnToRefererView; - - // If you have a UINavigationController in the view, then the bar must be shown above it. - [self.returnToRefererController] -} -``` - -The following code assumes that the view controller has an `openedAppLinkURL` `NSURL` property that has already been populated with the URL used to open the app. You can then do something like this to show the view: - -```objective-c -- (void)viewWillAppear { - [super viewWillAppear]; - - // Show only if you have a back AppLink. - [self.returnToRefererController showViewForRefererURL:self.openedAppLinkURL]; -} -``` - -In a navigation-controller view hierarchy, the banner should be displayed above the navigation bar, and `BFAppLinkReturnToRefererController` provides an `initForDisplayAboveNavController` method to assist with this. - -## Analytics - -Bolts introduces Measurement Event. App Links posts three different Measurement Event notifications to the application, which can be caught and integrated with existing analytics components in your application. - -* `al_nav_out` — Raised when your app switches out to an App Links URL. -* `al_nav_in` — Raised when your app opens an incoming App Links URL. -* `al_ref_back_out` — Raised when your app returns back the referrer app using the built-in top navigation back bar view. - -### Listen for App Links Measurement Events - -There are other analytics tools that are integrated with Bolts' App Links events, but you can also listen for these events yourself: - -```objective-c -[[NSNotificationCenter defaultCenter] addObserverForName:BFMeasurementEventNotificationName object:nil queue:nil usingBlock:^(NSNotification *note) { - NSDictionary *event = note.userInfo; - NSDictionary *eventData = event[BFMeasurementEventArgsKey]; - // Integrate to your logging/analytics component. -}]; -``` - -### App Links Event Fields - -App Links Measurement Events sends additional information from App Links Intents in flattened string key value pairs. Here are some of the useful fields for the three events. - -* `al_nav_in` - * `inputURL`: the URL that opens the app. - * `inputURLScheme`: the scheme of `inputURL`. - * `refererURL`: the URL that the referrer app added into `al_applink_data`: `referer_app_link`. - * `refererAppName`: the app name that the referrer app added to `al_applink_data`: `referer_app_link`. - * `sourceApplication`: the bundle of referrer application. - * `targetURL`: the `target_url` field in `al_applink_data`. - * `version`: App Links API version. - -* `al_nav_out` / `al_ref_back_out` - * `outputURL`: the URL used to open the other app (or browser). If there is an eligible app to open, this will be the custom scheme url/intent in `al_applink_data`. - * `outputURLScheme`: the scheme of `outputURL`. - * `sourceURL`: the URL of the page hosting App Links meta tags. - * `sourceURLHost`: the hostname of `sourceURL`. - * `success`: `“1”` to indicate success in opening the App Link in another app or browser; `“0”` to indicate failure to open the App Link. - * `type`: `“app”` for open in app, `“web”` for open in browser; `“fail”` when the success field is `“0”`. - * `version`: App Links API version. - -# Installation - -You can download the latest framework files from our [Releases page](https://github.com/BoltsFramework/Bolts-ObjC/releases). - -Bolts is also available through [CocoaPods](https://cocoapods.org/). To install it simply add the following line to your Podfile: - - pod 'Bolts' diff --git a/MetaWear/Pods/FastCoding/FastCoder/FastCoder.h b/MetaWear/Pods/FastCoding/FastCoder/FastCoder.h deleted file mode 100644 index 7a860dc..0000000 --- a/MetaWear/Pods/FastCoding/FastCoder/FastCoder.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// FastCoding.h -// -// Version 3.2.2 -// -// Created by Nick Lockwood on 09/12/2013. -// Copyright (c) 2013 Charcoal Design -// -// Distributed under the permissive zlib License -// Get the latest version from here: -// -// https://github.com/nicklockwood/FastCoding -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// - - -#import - - -extern NSString *const FastCodingException; - - -@interface NSObject (FastCoding) - -+ (NSArray *)fastCodingKeys; -- (id)awakeAfterFastCoding; -- (Class)classForFastCoding; -- (BOOL)preferFastCoding; - -@end - - -@interface FastCoder : NSObject - -+ (id)objectWithData:(NSData *)data; -+ (id)propertyListWithData:(NSData *)data; -+ (NSData *)dataWithRootObject:(id)object; - -@end diff --git a/MetaWear/Pods/FastCoding/FastCoder/FastCoder.m b/MetaWear/Pods/FastCoding/FastCoder/FastCoder.m deleted file mode 100755 index 02508ac..0000000 --- a/MetaWear/Pods/FastCoding/FastCoder/FastCoder.m +++ /dev/null @@ -1,2571 +0,0 @@ -// -// FastCoding.m -// -// Version 3.2.2 -// -// Created by Nick Lockwood on 09/12/2013. -// Copyright (c) 2013 Charcoal Design -// -// Distributed under the permissive zlib License -// Get the latest version from here: -// -// https://github.com/nicklockwood/FastCoding -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// - -#import "FastCoder.h" -#import -#import - - -#ifndef FC_DIAGNOSTIC_ENABLED -#define FC_DIAGNOSTIC_ENABLED 0 -#endif - - -#import -#if __has_feature(objc_arc) -#pragma clang diagnostic ignored "-Wpedantic" -#warning FastCoding runs slower under ARC. It is recommended that you disable it for this file -#endif - - -#pragma clang diagnostic ignored "-Wgnu" -#pragma clang diagnostic ignored "-Wpointer-arith" -#pragma clang diagnostic ignored "-Wmissing-prototypes" -#pragma clang diagnostic ignored "-Wfour-char-constants" -#pragma clang diagnostic ignored "-Wobjc-missing-property-synthesis" -#pragma clang diagnostic ignored "-Wdirect-ivar-access" -#pragma clang diagnostic ignored "-Wcast-qual" - - -NSString *const FastCodingException = @"FastCodingException"; - - -static const uint32_t FCIdentifier = 'FAST'; -static const uint16_t FCMajorVersion = 3; -static const uint16_t FCMinorVersion = 2; - - -typedef struct -{ - uint32_t identifier; - uint16_t majorVersion; - uint16_t minorVersion; -} -FCHeader; - - -typedef NS_ENUM(uint8_t, FCType) -{ - FCTypeNil = 0, - FCTypeNull, - FCTypeObjectAlias8, - FCTypeObjectAlias16, - FCTypeObjectAlias32, - FCTypeStringAlias8, - FCTypeStringAlias16, - FCTypeStringAlias32, - FCTypeString, - FCTypeDictionary, - FCTypeArray, - FCTypeSet, - FCTypeOrderedSet, - FCTypeTrue, - FCTypeFalse, - FCTypeInt8, - FCTypeInt16, - FCTypeInt32, - FCTypeInt64, - FCTypeFloat32, - FCTypeFloat64, - FCTypeData, - FCTypeDate, - FCTypeMutableString, - FCTypeMutableDictionary, - FCTypeMutableArray, - FCTypeMutableSet, - FCTypeMutableOrderedSet, - FCTypeMutableData, - FCTypeClassDefinition, - FCTypeObject8, - FCTypeObject16, - FCTypeObject32, - FCTypeURL, - FCTypePoint, - FCTypeSize, - FCTypeRect, - FCTypeRange, - FCTypeVector, - FCTypeAffineTransform, - FCType3DTransform, - FCTypeMutableIndexSet, - FCTypeIndexSet, - FCTypeNSCodedObject, - FCTypeDecimalNumber, - FCTypeOne, - FCTypeZero, - - FCTypeCount // sentinel value -}; - - -#if !__has_feature(objc_arc) -#define FC_AUTORELEASE(x) [(x) autorelease] -#else -#define FC_AUTORELEASE(x) (x) -#endif - - -#import -#if TARGET_OS_IPHONE -#define OR_IF_MAC(x) -#else -#define OR_IF_MAC(x) || (x) -#endif - - -#define FC_ASSERT_FITS(length, offset, total) { if ((NSUInteger)((offset) + (length)) > (total)) \ -[NSException raise:FastCodingException format:@"Unexpected EOF when parsing object starting at %i", (int32_t)(offset)]; } - -#define FC_READ_VALUE(type, offset, input, total) type value; { \ -FC_ASSERT_FITS (sizeof(type), offset, total); \ -value = *(type *)(input + offset); \ -offset += sizeof(value); } - -#define FC_ALIGN_INPUT(type, offset) { \ -unsigned long align = offset % sizeof(type); \ -if (align) offset += sizeof(type) - align; } - -#define FC_ALIGN_OUTPUT(type, output) { \ -unsigned long align = [output length] % sizeof(type); \ -if (align) [output increaseLengthBy:sizeof(type) - align]; } - - -@interface FCNSCoder : NSCoder - -@end - - -@interface FCNSCoder () -{ - -@public - __unsafe_unretained id _rootObject; - __unsafe_unretained NSMutableData *_output; - __unsafe_unretained NSMutableDictionary *_objectCache; - __unsafe_unretained NSMutableDictionary *_classCache; - __unsafe_unretained NSMutableDictionary *_stringCache; - __unsafe_unretained NSMutableDictionary *_classesByName; -} - -@end - - -@interface FCNSDecoder : NSCoder - -@end - - -typedef id FCTypeConstructor(FCNSDecoder *); - - -@interface FCNSDecoder () -{ - -@public - NSUInteger *_offset; - const void *_input; - NSUInteger _total; - FCTypeConstructor **_constructors; - __unsafe_unretained NSData *_objectCache; - __unsafe_unretained NSData *_classCache; - __unsafe_unretained NSData *_stringCache; - __unsafe_unretained NSMutableArray *_propertyDictionaryPool; - __unsafe_unretained NSMutableDictionary *_properties; -} - -@end - - -@interface FCClassDefinition : NSObject - -@end - - -@interface FCClassDefinition () -{ - -@public - __unsafe_unretained NSString *_className; - __unsafe_unretained NSArray *_propertyKeys; -} - -@end - - -@interface NSObject (FastCoding_Private) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder; - -@end - - -static Boolean FCEqualityCallback(const void *value1, const void *value2) -{ - return (Boolean)[(id)value1 isEqual:(id)value2]; -} - -static CFHashCode FCHashCallback(const void *value) -{ - return [(id)value hash]; -} - -static inline NSUInteger FCCacheParsedObject(__unsafe_unretained id object, __unsafe_unretained NSData *cache) -{ - NSUInteger offset = (NSUInteger)CFDataGetLength((CFMutableDataRef)cache); - -#if FC_DIAGNOSTIC_ENABLED - - if (![@[[NSURL class], [NSString class]] containsObject:[object classForCoder]]) { - printf("%tu: %s\n", offset / sizeof(id), [[[object classForCoder] description] UTF8String]); - } - -#endif - - CFDataAppendBytes((CFMutableDataRef)cache, (void *)&object, sizeof(id)); - return offset; -} - -static inline void FCReplaceCachedObject(NSUInteger offset, __unsafe_unretained id object, __unsafe_unretained NSData *cache) -{ - CFDataReplaceBytes((CFMutableDataRef)cache, CFRangeMake((CFIndex)offset, sizeof(id)), (void *)&object, sizeof(id)); -} - -static inline id FCCachedObjectAtIndex(NSUInteger index, __unsafe_unretained NSData *cache) -{ - NSUInteger count = (NSUInteger)CFDataGetLength((CFMutableDataRef)cache) / (NSUInteger)sizeof(id); - if (index >= count) - { - [NSException raise:FastCodingException format:@"Attempted to read cache object at index %tu, but cache object count is %tu", index, count]; - return [NSNull null]; - } - return ((__unsafe_unretained id *)(void *)CFDataGetBytePtr((CFMutableDataRef)cache))[index]; -} - - -static id FCReadObject(__unsafe_unretained FCNSDecoder *decoder); -static id FCReadObject_2_3(__unsafe_unretained FCNSDecoder *decoder); - -static inline uint8_t FCReadType(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint8_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline uint8_t FCReadRawUInt8(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint8_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline uint16_t FCReadRawUInt16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint16_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline uint32_t FCReadRawUInt32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint32_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline double FCReadRawDouble(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(Float64, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static id FCReadRawString(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSString *string = nil; - NSUInteger length = strlen(decoder->_input + *decoder->_offset) + 1; - FC_ASSERT_FITS(length, *decoder->_offset, decoder->_total); - if (length > 1) - { - string = CFBridgingRelease(CFStringCreateWithBytes(NULL, decoder->_input + *decoder->_offset, - (CFIndex)length - 1, kCFStringEncodingUTF8, false)); - } - else - { - string = @""; - } - *decoder->_offset += length; - return string; -} - -static id FCReadNil(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return nil; -} - -static id FCReadNull(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return [NSNull null]; -} - -static id FCReadAlias8(__unsafe_unretained FCNSDecoder *decoder) -{ - return FCCachedObjectAtIndex(FCReadRawUInt8(decoder), decoder->_objectCache); -} - -static id FCReadAlias16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint16_t, *decoder->_offset); - return FCCachedObjectAtIndex(FCReadRawUInt16(decoder), decoder->_objectCache); -} - -static id FCReadAlias32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - return FCCachedObjectAtIndex(FCReadRawUInt32(decoder), decoder->_objectCache); -} - -static id FCReadStringAlias8(__unsafe_unretained FCNSDecoder *decoder) -{ - return FCCachedObjectAtIndex(FCReadRawUInt8(decoder), decoder->_stringCache); -} - -static id FCReadStringAlias16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint16_t, *decoder->_offset); - return FCCachedObjectAtIndex(FCReadRawUInt16(decoder), decoder->_stringCache); -} - -static id FCReadStringAlias32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - return FCCachedObjectAtIndex(FCReadRawUInt32(decoder), decoder->_stringCache); -} - -static id FCReadString(__unsafe_unretained FCNSDecoder *decoder) -{ - NSString *string = FCReadRawString(decoder); - FCCacheParsedObject(string, decoder->_stringCache); - return string; -} - -static id FCReadMutableString(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSMutableString *string = nil; - NSUInteger length = strlen(decoder->_input + *decoder->_offset) + 1; - FC_ASSERT_FITS(length, *decoder->_offset, decoder->_total); - if (length > 1) - { - string = FC_AUTORELEASE([[NSMutableString alloc] initWithBytes:decoder->_input + *decoder->_offset length:length - 1 encoding:NSUTF8StringEncoding]); - } - else - { - string = [NSMutableString string]; - } - *decoder->_offset += length; - FCCacheParsedObject(string, decoder->_objectCache); - return string; -} - -static id FCReadDictionary(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSDictionary *dict = nil; - if (count) - { - __autoreleasing id *keys = (__autoreleasing id *)malloc(count * sizeof(id)); - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject(decoder); - keys[i] = FCReadObject(decoder); - } - - dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count]; - free(objects); - free(keys); - } - else - { - dict = @{}; - } - FCCacheParsedObject(dict, decoder->_objectCache); - return dict; -} - -static id FCReadMutableDictionary(__unsafe_unretained FCNSDecoder *decoder) -{ - const CFDictionaryKeyCallBacks keyCallbacks = - { - kCFTypeDictionaryKeyCallBacks.version, - kCFTypeDictionaryKeyCallBacks.retain, - kCFTypeDictionaryKeyCallBacks.release, - kCFTypeDictionaryKeyCallBacks.copyDescription, - &FCEqualityCallback, - &FCHashCallback - }; - - const CFDictionaryValueCallBacks valueCallbacks = - { - kCFTypeDictionaryKeyCallBacks.version, - kCFTypeDictionaryKeyCallBacks.retain, - kCFTypeDictionaryKeyCallBacks.release, - kCFTypeDictionaryKeyCallBacks.copyDescription, - &FCEqualityCallback, - }; - - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSMutableDictionary *dict = CFBridgingRelease(CFDictionaryCreateMutable(NULL, (CFIndex)count, &keyCallbacks, &valueCallbacks)); - FCCacheParsedObject(dict, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - __autoreleasing id object = FCReadObject(decoder); - __autoreleasing id key = FCReadObject(decoder); - CFDictionarySetValue((CFMutableDictionaryRef)dict, (const void *)key, (const void *)object); - } - return dict; -} - -static id FCReadArray(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSArray *array = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject(decoder); - } - array = [NSArray arrayWithObjects:objects count:count]; - free(objects); - } - else - { - array = @[]; - } - FCCacheParsedObject(array, decoder->_objectCache); - return array; -} - -static id FCReadMutableArray(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSMutableArray *array = [NSMutableArray arrayWithCapacity:count]; - FCCacheParsedObject(array, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - CFArrayAppendValue((CFMutableArrayRef)array, (void *)FCReadObject(decoder)); - } - return array; -} - -static id FCReadSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSSet *set = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject(decoder); - } - set = [NSSet setWithObjects:objects count:count]; - free(objects); - } - else - { - set = [NSSet set]; - } - FCCacheParsedObject(set, decoder->_objectCache); - return set; -} - -static id FCReadMutableSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSMutableSet *set = [NSMutableSet setWithCapacity:count]; - FCCacheParsedObject(set, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - [set addObject:FCReadObject(decoder)]; - } - return set; -} - -static id FCReadOrderedSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSOrderedSet *set = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject(decoder); - } - set = [NSOrderedSet orderedSetWithObjects:objects count:count]; - free(objects); - } - else - { - set = [NSOrderedSet orderedSet]; - } - FCCacheParsedObject(set, decoder->_objectCache); - return set; -} - -static id FCReadMutableOrderedSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSMutableOrderedSet *set = [NSMutableOrderedSet orderedSetWithCapacity:count]; - FCCacheParsedObject(set, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - [set addObject:FCReadObject(decoder)]; - } - return set; -} - -static id FCReadTrue(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @YES; -} - -static id FCReadFalse(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @NO; -} - -static id FCReadOne(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @1; -} - -static id FCReadZero(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @0; -} - -static id FCReadInt8(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(int8_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadInt16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(int16_t, *decoder->_offset); - FC_READ_VALUE(int16_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadInt32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(int32_t, *decoder->_offset); - FC_READ_VALUE(int32_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadInt64(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(int64_t, *decoder->_offset); - FC_READ_VALUE(int64_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadFloat32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float32, *decoder->_offset); - FC_READ_VALUE(Float32, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadFloat64(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - FC_READ_VALUE(Float64, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadData(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t length = FCReadRawUInt32(decoder); - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - __autoreleasing NSData *data = [NSData dataWithBytes:(decoder->_input + *decoder->_offset) length:length]; - *decoder->_offset += paddedLength; - FCCacheParsedObject(data, decoder->_objectCache); - return data; -} - -static id FCReadMutableData(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t length = FCReadRawUInt32(decoder); - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - __autoreleasing NSMutableData *data = [NSMutableData dataWithBytes:(decoder->_input + *decoder->_offset) length:length]; - *decoder->_offset += paddedLength; - FCCacheParsedObject(data, decoder->_objectCache); - return data; -} - -static id FCReadDate(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(NSTimeInterval, *decoder->_offset); - FC_READ_VALUE(NSTimeInterval, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSDate *date = [NSDate dateWithTimeIntervalSince1970:value]; - FCCacheParsedObject(date, decoder->_objectCache); - return date; -} - -static id FCReadClassDefinition(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing FCClassDefinition *definition = FC_AUTORELEASE([[FCClassDefinition alloc] init]); - FCCacheParsedObject(definition, decoder->_classCache); - definition->_className = FCReadRawString(decoder); - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadRawString(decoder); - } - __autoreleasing NSArray *propertyKeys = [NSArray arrayWithObjects:objects count:count]; - definition->_propertyKeys = propertyKeys; - free(objects); - } - - //now return the actual object instance - return FCReadObject(decoder); -} - -static id FCReadObjectInstance(__unsafe_unretained FCNSDecoder *decoder, NSUInteger classIndex) -{ - __autoreleasing FCClassDefinition *definition = FCCachedObjectAtIndex(classIndex, decoder->_classCache); - __autoreleasing Class objectClass = NSClassFromString(definition->_className); - __autoreleasing id object = nil; - if (objectClass) - { - object = FC_AUTORELEASE([[objectClass alloc] init]); - } - else if (definition->_className) - { - object = [NSMutableDictionary dictionaryWithObject:definition->_className forKey:@"$class"]; - } - else if (object) - { - object = [NSMutableDictionary dictionary]; - } - NSUInteger cacheIndex = FCCacheParsedObject(object, decoder->_objectCache); - for (__unsafe_unretained NSString *key in definition->_propertyKeys) - { - [object setValue:FCReadObject(decoder) forKey:key]; - } - id newObject = [object awakeAfterFastCoding]; - if (newObject != object) - { - //TODO: this is only a partial solution, as any objects that referenced - //this object between when it was created and now will have received incorrect instance - FCReplaceCachedObject(cacheIndex, newObject, decoder->_objectCache); - } - return newObject; -} - -static id FCReadObject8(__unsafe_unretained FCNSDecoder *decoder) -{ - return FCReadObjectInstance(decoder, FCReadRawUInt8(decoder)); -} - -static id FCReadObject16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint16_t, *decoder->_offset); - return FCReadObjectInstance(decoder, FCReadRawUInt16(decoder)); -} - -static id FCReadObject32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - return FCReadObjectInstance(decoder, FCReadRawUInt32(decoder)); -} - -static id FCReadURL(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSURL *URL = [NSURL URLWithString:FCReadObject(decoder) relativeToURL:FCReadObject(decoder)]; - FCCacheParsedObject(URL, decoder->_stringCache); - return URL; -} - -static id FCReadPoint(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGPoint point = {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)}; - NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(CGPoint)]; - return value; -} - -static id FCReadSize(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGSize size = {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)}; - NSValue *value = [NSValue valueWithBytes:&size objCType:@encode(CGSize)]; - return value; -} - -static id FCReadRect(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGRect rect = - { - {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)}, - {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)} - }; - NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)]; - return value; -} - -static id FCReadRange(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - NSRange range = {FCReadRawUInt32(decoder), FCReadRawUInt32(decoder)}; - NSValue *value = [NSValue valueWithBytes:&range objCType:@encode(NSRange)]; - return value; -} - -static id FCReadVector(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGVector point = {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)}; - NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(CGVector)]; - return value; -} - -static id FCReadAffineTransform(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGAffineTransform transform = - { - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder) - }; - NSValue *value = [NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)]; - return value; -} - -static id FCRead3DTransform(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGFloat transform[] = - { - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder) - }; - NSValue *value = [NSValue valueWithBytes:&transform objCType:@encode(CGFloat[16])]; - return value; -} - -static id FCReadMutableIndexSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t rangeCount = FCReadRawUInt32(decoder); - __autoreleasing NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; - FCCacheParsedObject(indexSet, decoder->_objectCache); - for (uint32_t i = 0; i < rangeCount; i++) - { - NSRange range = {FCReadRawUInt32(decoder), FCReadRawUInt32(decoder)}; - [indexSet addIndexesInRange:range]; - } - return indexSet; -} - -static id FCReadIndexSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t rangeCount = FCReadRawUInt32(decoder); - __autoreleasing NSIndexSet *indexSet; - if (rangeCount == 1) - { - //common case optimisation - NSRange range = {FCReadRawUInt32(decoder), FCReadRawUInt32(decoder)}; - indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; - } - else - { - indexSet = [NSMutableIndexSet indexSet]; - for (uint32_t i = 0; i < rangeCount; i++) - { - NSRange range = {FCReadRawUInt32(decoder), FCReadRawUInt32(decoder)}; - [(NSMutableIndexSet *)indexSet addIndexesInRange:range]; - } - indexSet = [indexSet copy]; - - } - FCCacheParsedObject(indexSet, decoder->_objectCache); - return indexSet; -} - -static id FCReadNSCodedObject(__unsafe_unretained FCNSDecoder *decoder) -{ - NSString *className = FCReadObject(decoder); - NSMutableDictionary *oldProperties = decoder->_properties; - if ([decoder->_propertyDictionaryPool count]) - { - decoder->_properties = [decoder->_propertyDictionaryPool lastObject]; - [decoder->_propertyDictionaryPool removeLastObject]; - [decoder->_properties removeAllObjects]; - } - else - { - const CFDictionaryKeyCallBacks stringKeyCallbacks = - { - 0, - NULL, - NULL, - NULL, - FCEqualityCallback, - FCHashCallback - }; - - __autoreleasing id properties = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, &stringKeyCallbacks, NULL)); - decoder->_properties = properties; - } - while (true) - { - id object = FCReadObject(decoder); - if (!object) break; - NSString *key = FCReadObject(decoder); - decoder->_properties[key] = object; - } - id object = FC_AUTORELEASE([[NSClassFromString(className) alloc] initWithCoder:decoder]); - [decoder->_propertyDictionaryPool addObject:decoder->_properties]; - decoder->_properties = oldProperties; - FCCacheParsedObject(object, decoder->_objectCache); - return object; -} - -static id FCReadDecimalNumber(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(NSDecimal, *decoder->_offset); - FC_READ_VALUE(NSDecimal, *decoder->_offset, decoder->_input, decoder->_total); - return [NSDecimalNumber decimalNumberWithDecimal:value]; -} - -static id FCReadObject(__unsafe_unretained FCNSDecoder *decoder) -{ - FCType type = FCReadType(decoder); - FCTypeConstructor *constructor = NULL; - if (type < FCTypeCount) - { - constructor = decoder->_constructors[type]; - } - if (!constructor) - { - [NSException raise:FastCodingException format:@"FastCoding cannot decode object of type: %i", type]; - return nil; - } - return constructor(decoder); -} - -id FCParseData(NSData *data, FCTypeConstructor *constructors[]) -{ - NSUInteger length = [data length]; - if (length < sizeof(FCHeader)) - { - //not a valid FastArchive - return nil; - } - - //read header - FCHeader header; - const void *input = data.bytes; - memcpy(&header, input, sizeof(header)); - if (header.identifier != FCIdentifier) - { - //not a FastArchive - return nil; - } - if (header.majorVersion < 2 || header.majorVersion > FCMajorVersion) - { - //not compatible - NSLog(@"This version of the FastCoding library doesn't support FastCoding version %i.%i files", header.majorVersion, header.minorVersion); - return nil; - } - - //create decoder - NSUInteger offset = sizeof(header); - FCNSDecoder *decoder = FC_AUTORELEASE([[FCNSDecoder alloc] init]); - decoder->_constructors = constructors; - decoder->_input = input; - decoder->_offset = &offset; - decoder->_total = length; - - //read data - __autoreleasing NSMutableData *objectCache = [NSMutableData dataWithCapacity:FCReadRawUInt32(decoder) * sizeof(id)]; - decoder->_objectCache = objectCache; - if (header.majorVersion < 3) - { - return FCReadObject_2_3(decoder); - } - else - { - __autoreleasing NSMutableData *classCache = [NSMutableData dataWithCapacity:FCReadRawUInt32(decoder) * sizeof(id)]; - __autoreleasing NSMutableData *stringCache = [NSMutableData dataWithCapacity:FCReadRawUInt32(decoder) * sizeof(id)]; - __autoreleasing NSMutableArray *propertyDictionaryPool = CFBridgingRelease(CFArrayCreateMutable(NULL, 0, NULL)); - - decoder->_classCache = classCache; - decoder->_stringCache = stringCache; - decoder->_propertyDictionaryPool = propertyDictionaryPool; - -#if FC_DIAGNOSTIC_ENABLED - - printf("Input cache:\n"); - -#endif - - @try - { - return FCReadObject(decoder); - } - @catch (NSException *exception) - { - NSLog(@"%@", [exception reason]); - return nil; - } - } -} - -static inline NSUInteger FCCacheWrittenObject(__unsafe_unretained id object, __unsafe_unretained NSMutableDictionary *cache) -{ - NSUInteger count = (NSUInteger)CFDictionaryGetCount((CFMutableDictionaryRef)cache); - CFDictionarySetValue((CFMutableDictionaryRef)cache, (const void *)(object), (const void *)(count + 1)); - return count; -} - -static inline NSUInteger FCIndexOfCachedObject(__unsafe_unretained id object, __unsafe_unretained NSMutableDictionary *cache) -{ - const void *index = CFDictionaryGetValue((CFMutableDictionaryRef)cache, (const void *)object); - if (index) - { - return ((NSUInteger)index) - 1; - } - return NSNotFound; -} - -static inline void FCWriteType(FCType value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteUInt8(uint8_t value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteUInt16(uint16_t value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteUInt32(uint32_t value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteDouble(Float64 value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteString(__unsafe_unretained NSString *string, __unsafe_unretained NSMutableData *output) -{ - const char *utf8 = [string UTF8String]; - NSUInteger length = strlen(utf8) + 1; - [output appendBytes:utf8 length:length]; -} - -static inline BOOL FCWriteObjectAlias(__unsafe_unretained id object, __unsafe_unretained FCNSCoder *coder) -{ - NSUInteger index = FCIndexOfCachedObject(object, coder->_objectCache); - if (index <= UINT8_MAX) - { - FCWriteType(FCTypeObjectAlias8, coder->_output); - FCWriteUInt8((uint8_t)index, coder->_output); - return YES; - } - else if (index <= UINT16_MAX) - { - FCWriteType(FCTypeObjectAlias16, coder->_output); - FC_ALIGN_OUTPUT(uint16_t, coder->_output); - FCWriteUInt16((uint16_t)index, coder->_output); - return YES; - } - else if (index != NSNotFound) - { - FCWriteType(FCTypeObjectAlias32, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)index, coder->_output); - return YES; - } - else - { - return NO; - } -} - -static inline BOOL FCWriteStringAlias(__unsafe_unretained id object, __unsafe_unretained FCNSCoder *coder) -{ - NSUInteger index = FCIndexOfCachedObject(object, coder->_stringCache); - if (index <= UINT8_MAX) - { - FCWriteType(FCTypeStringAlias8, coder->_output); - FCWriteUInt8((uint8_t)index, coder->_output); - return YES; - } - else if (index <= UINT16_MAX) - { - FCWriteType(FCTypeStringAlias16, coder->_output); - FC_ALIGN_OUTPUT(uint16_t, coder->_output); - FCWriteUInt16((uint16_t)index, coder->_output); - return YES; - } - else if (index != NSNotFound) - { - FCWriteType(FCTypeStringAlias32, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)index, coder->_output); - return YES; - } - else - { - return NO; - } -} - -static void FCWriteObject(__unsafe_unretained id object, __unsafe_unretained FCNSCoder *coder) -{ - if (object) - { - [object FC_encodeWithCoder:coder]; - } - else - { - FCWriteType(FCTypeNil, coder->_output); - } -} - - -@implementation FastCoder - -+ (id)objectWithData:(NSData *)data -{ - static FCTypeConstructor *constructors[] = - { - FCReadNil, - FCReadNull, - FCReadAlias8, - FCReadAlias16, - FCReadAlias32, - FCReadStringAlias8, - FCReadStringAlias16, - FCReadStringAlias32, - FCReadString, - FCReadDictionary, - FCReadArray, - FCReadSet, - FCReadOrderedSet, - FCReadTrue, - FCReadFalse, - FCReadInt8, - FCReadInt16, - FCReadInt32, - FCReadInt64, - FCReadFloat32, - FCReadFloat64, - FCReadData, - FCReadDate, - FCReadMutableString, - FCReadMutableDictionary, - FCReadMutableArray, - FCReadMutableSet, - FCReadMutableOrderedSet, - FCReadMutableData, - FCReadClassDefinition, - FCReadObject8, - FCReadObject16, - FCReadObject32, - FCReadURL, - FCReadPoint, - FCReadSize, - FCReadRect, - FCReadRange, - FCReadVector, - FCReadAffineTransform, - FCRead3DTransform, - FCReadMutableIndexSet, - FCReadIndexSet, - FCReadNSCodedObject, - FCReadDecimalNumber, - FCReadOne, - FCReadZero - }; - - return FCParseData(data, constructors); -} - -+ (id)propertyListWithData:(NSData *)data -{ - static FCTypeConstructor *constructors[] = - { - NULL, - FCReadNull, - FCReadAlias8, - FCReadAlias16, - FCReadAlias32, - FCReadStringAlias8, - FCReadStringAlias16, - FCReadStringAlias32, - FCReadString, - FCReadDictionary, - FCReadArray, - FCReadSet, - FCReadOrderedSet, - FCReadTrue, - FCReadFalse, - FCReadInt8, - FCReadInt16, - FCReadInt32, - FCReadInt64, - FCReadFloat32, - FCReadFloat64, - FCReadData, - FCReadDate, - FCReadMutableString, - FCReadMutableDictionary, - FCReadMutableArray, - FCReadMutableSet, - FCReadMutableOrderedSet, - FCReadMutableData, - NULL, - NULL, - NULL, - NULL, - FCReadURL, - FCReadPoint, - FCReadSize, - FCReadRect, - FCReadRange, - FCReadVector, - FCReadAffineTransform, - FCRead3DTransform, - FCReadMutableIndexSet, - FCReadIndexSet, - NULL, - FCReadDecimalNumber, - FCReadOne, - FCReadZero - }; - - return FCParseData(data, constructors); -} - -+ (NSData *)dataWithRootObject:(id)object -{ - if (object) - { - //write header - FCHeader header = {FCIdentifier, FCMajorVersion, FCMinorVersion}; - NSMutableData *output = [NSMutableData dataWithLength:sizeof(header)]; - memcpy(output.mutableBytes, &header, sizeof(header)); - - //object count placeholders - FCWriteUInt32(0, output); - FCWriteUInt32(0, output); - FCWriteUInt32(0, output); - - @autoreleasepool - { - __autoreleasing id objectCache = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, NULL, NULL)); - __autoreleasing id classCache = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, NULL, NULL)); - __autoreleasing id stringCache = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, &kCFCopyStringDictionaryKeyCallBacks, NULL)); - __autoreleasing id classesByName = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, &kCFCopyStringDictionaryKeyCallBacks, NULL)); - - //create coder - FCNSCoder *coder = FC_AUTORELEASE([[FCNSCoder alloc] init]); - coder->_rootObject = object; - coder->_output = output; - coder->_objectCache = objectCache; - coder->_classCache = classCache; - coder->_stringCache = stringCache; - coder->_classesByName = classesByName; - - //write object - FCWriteObject(object, coder); - -#if FC_DIAGNOSTIC_ENABLED - - NSUInteger count = [objectCache count]; - const void **keys = (const void **)malloc(count * sizeof(id)); - const NSUInteger *values = (const NSUInteger *)malloc(count * sizeof(NSUInteger)); - CFDictionaryGetKeysAndValues((CFDictionaryRef)objectCache, keys, (const void **)values); - NSMutableDictionary *cache = [NSMutableDictionary dictionary]; - for (NSUInteger i = 0; i < count; i++) - { - cache[@(values[i])] = (id)keys[i]; - } - printf("Output cache:\n"); - for (NSUInteger i = 0; i < count; i++) - { - printf("%tu: %s\n", i, [[[cache[@(i + 1)] classForCoder] description] UTF8String]); - } - printf("\n"); - free(keys); - free((void **)values); - -#endif - - //set object count - uint32_t objectCount = (uint32_t)[objectCache count]; - [output replaceBytesInRange:NSMakeRange(sizeof(header), sizeof(uint32_t)) withBytes:&objectCount]; - - //set class count - uint32_t classCount = (uint32_t)[classCache count]; - [output replaceBytesInRange:NSMakeRange(sizeof(header) + sizeof(uint32_t), sizeof(uint32_t)) withBytes:&classCount]; - - //set string count - uint32_t stringCount = (uint32_t)[stringCache count]; - [output replaceBytesInRange:NSMakeRange(sizeof(header) + sizeof(uint32_t) * 2, sizeof(uint32_t)) withBytes:&stringCount]; - - return output; - } - } - return nil; -} - -@end - - -@implementation FCNSCoder - -- (BOOL)allowsKeyedCoding -{ - return YES; -} - -- (void)encodeObject:(__unsafe_unretained id)objv forKey:(__unsafe_unretained NSString *)key -{ - if (objv) - { - FCWriteObject(objv, self); - FCWriteObject(key, self); - } -} - -- (void)encodeConditionalObject:(id)objv forKey:(__unsafe_unretained NSString *)key -{ - if (FCIndexOfCachedObject(objv, _objectCache) != NSNotFound) - { - FCWriteObject(objv, self); - FCWriteObject(key, self); - } -} - -- (void)encodeBool:(BOOL)boolv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(boolv), self); - FCWriteObject(key, self); -} - -- (void)encodeInt:(int)intv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(intv), self); - FCWriteObject(key, self); -} - -- (void)encodeInteger:(NSInteger)intv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(intv), self); - FCWriteObject(key, self); -} - -- (void)encodeInt32:(int32_t)intv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(intv), self); - FCWriteObject(key, self); -} - -- (void)encodeInt64:(int64_t)intv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(intv), self); - FCWriteObject(key, self); -} - -- (void)encodeFloat:(float)realv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(realv), self); - FCWriteObject(key, self); -} - -- (void)encodeDouble:(double)realv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(realv), self); - FCWriteObject(key, self); -} - -- (void)encodeBytes:(const uint8_t *)bytesp length:(NSUInteger)lenv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject([NSData dataWithBytes:bytesp length:lenv], self); - FCWriteObject(key, self); -} - -@end - - -@implementation FCNSDecoder - -- (BOOL)allowsKeyedCoding -{ - return YES; -} - -- (BOOL)containsValueForKey:(NSString *)key -{ - return _properties[key] != nil; -} - -- (id)decodeObjectForKey:(__unsafe_unretained NSString *)key -{ - return _properties[key]; -} - -- (BOOL)decodeBoolForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] boolValue]; -} - -- (int)decodeIntForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] intValue]; -} - -- (NSInteger)decodeIntegerForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] integerValue]; -} - -- (int32_t)decodeInt32ForKey:(__unsafe_unretained NSString *)key -{ - return (int32_t)[_properties[key] longValue]; -} - -- (int64_t)decodeInt64ForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] longLongValue]; -} - -- (float)decodeFloatForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] floatValue]; -} - -- (double)decodeDoubleForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] doubleValue]; -} - -- (const uint8_t *)decodeBytesForKey:(__unsafe_unretained NSString *)key returnedLength:(NSUInteger *)lengthp -{ - __autoreleasing NSData *data = _properties[key]; - *lengthp = [data length]; - return data.bytes; -} - -@end - - -@implementation FCClassDefinition : NSObject - -//no encoding implementation needed - -@end - - -@implementation NSObject (FastCoding) - -+ (NSArray *)fastCodingKeys -{ - __autoreleasing NSMutableArray *codableKeys = [NSMutableArray array]; - unsigned int propertyCount; - objc_property_t *properties = class_copyPropertyList(self, &propertyCount); - for (unsigned int i = 0; i < propertyCount; i++) - { - //get property - objc_property_t property = properties[i]; - const char *propertyName = property_getName(property); - NSString *key = @(propertyName); - - //see if there is a backing ivar - char *ivar = property_copyAttributeValue(property, "V"); - if (ivar) - { - //check if ivar has KVC-compliant name - NSString *ivarName = @(ivar); - if ([ivarName isEqualToString:key] || [ivarName isEqualToString:[@"_" stringByAppendingString:key]]) - { - //setValue:forKey: will work - [codableKeys addObject:key]; - } - free(ivar); - } - } - free(properties); - return codableKeys; -} - -+ (NSArray *)FC_aggregatePropertyKeys -{ - __autoreleasing NSArray *codableKeys = nil; - codableKeys = objc_getAssociatedObject(self, _cmd); - if (codableKeys == nil) - { - codableKeys = [NSMutableArray array]; - Class subclass = [self class]; - while (subclass != [NSObject class]) - { - [(NSMutableArray *)codableKeys addObjectsFromArray:[subclass fastCodingKeys]]; - subclass = [subclass superclass]; - } - codableKeys = [NSArray arrayWithArray:codableKeys]; - - //make the association atomically so that we don't need to bother with an @synchronize - objc_setAssociatedObject(self, _cmd, codableKeys, OBJC_ASSOCIATION_RETAIN); - } - return codableKeys; -} - -- (id)awakeAfterFastCoding -{ - return self; -} - -- (Class)classForFastCoding -{ - return [self classForCoder]; -} - -- (BOOL)preferFastCoding -{ - return NO; -} - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - - //handle NSCoding - if (![self preferFastCoding] && [self conformsToProtocol:@protocol(NSCoding)]) - { - //write object - FCWriteType(FCTypeNSCodedObject, coder->_output); - FCWriteObject(NSStringFromClass([self classForCoder]), coder); - [(id )self encodeWithCoder:coder]; - FCWriteType(FCTypeNil, coder->_output); - FCCacheWrittenObject(self, coder->_objectCache); - return; - } - - //write class definition - Class objectClass = [self classForFastCoding]; - NSUInteger classIndex = FCIndexOfCachedObject(objectClass, coder->_classCache); - __autoreleasing NSArray *propertyKeys = [objectClass FC_aggregatePropertyKeys]; - if (classIndex == NSNotFound) - { - classIndex = FCCacheWrittenObject(objectClass, coder->_classCache); - FCWriteType(FCTypeClassDefinition, coder->_output); - FCWriteString(NSStringFromClass(objectClass), coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[propertyKeys count], coder->_output); - for (__unsafe_unretained id value in propertyKeys) - { - FCWriteString(value, coder->_output); - } - } - - //write object - FCCacheWrittenObject(self, coder->_objectCache); - if (classIndex <= UINT8_MAX) - { - FCWriteType(FCTypeObject8, coder->_output); - FCWriteUInt8((uint8_t)classIndex, coder->_output); - } - else if (classIndex <= UINT16_MAX) - { - FCWriteType(FCTypeObject16, coder->_output); - FC_ALIGN_OUTPUT(uint16_t, coder->_output); - FCWriteUInt16((uint16_t)classIndex, coder->_output); - } - else - { - FCWriteType(FCTypeObject32, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)classIndex, coder->_output); - } - for (__unsafe_unretained NSString *key in propertyKeys) - { - FCWriteObject([self valueForKey:key], coder); - } -} - -@end - - -@implementation NSString (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if ([self classForCoder] == [NSMutableString class]) - { - if (FCWriteObjectAlias(self, coder)) return; - FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(FCTypeMutableString, coder->_output); - } - else - { - if (FCWriteStringAlias(self, coder)) return; - FCCacheWrittenObject(self, coder->_stringCache); - FCWriteType(FCTypeString, coder->_output); - } - FCWriteString(self, coder->_output); -} - -@end - - -@implementation NSNumber (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - switch (CFNumberGetType((CFNumberRef)self)) - { - case kCFNumberFloat32Type: - case kCFNumberFloatType: - { - FCWriteType(FCTypeFloat32, coder->_output); - Float32 value = [self floatValue]; - FC_ALIGN_OUTPUT(Float32, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - case kCFNumberFloat64Type: - case kCFNumberDoubleType: - case kCFNumberCGFloatType: - { - FCWriteType(FCTypeFloat64, coder->_output); - Float64 value = [self doubleValue]; - FC_ALIGN_OUTPUT(Float64, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - case kCFNumberSInt64Type: - case kCFNumberLongLongType: - case kCFNumberNSIntegerType: - { - int64_t value = [self longLongValue]; - if (value > (int64_t)INT32_MAX || value < (int64_t)INT32_MIN) - { - FCWriteType(FCTypeInt64, coder->_output); - FC_ALIGN_OUTPUT(int64_t, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - //otherwise treat as 32-bit - } - case kCFNumberSInt32Type: - case kCFNumberIntType: - case kCFNumberLongType: - case kCFNumberCFIndexType: - { - int32_t value = (int32_t)[self intValue]; - if (value > (int32_t)INT16_MAX || value < (int32_t)INT16_MIN) - { - FCWriteType(FCTypeInt32, coder->_output); - FC_ALIGN_OUTPUT(int32_t, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - //otherwise treat as 16-bit - } - case kCFNumberSInt16Type: - case kCFNumberShortType: - { - int16_t value = (int16_t)[self intValue]; - if (value > (int16_t)INT8_MAX || value < (int16_t)INT8_MIN) - { - FCWriteType(FCTypeInt16, coder->_output); - FC_ALIGN_OUTPUT(int16_t, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - //otherwise treat as 8-bit - } - case kCFNumberSInt8Type: - case kCFNumberCharType: - { - int8_t value = (int8_t)[self intValue]; - if (value == 1) - { - FCWriteType((self == (id)kCFBooleanTrue)? FCTypeTrue: FCTypeOne, coder->_output); - } - else if (value == 0) - { - FCWriteType((self == (id)kCFBooleanFalse)? FCTypeFalse: FCTypeZero, coder->_output); - } - else - { - FCWriteType(FCTypeInt8, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - } - } - } -} - -@end - - -@implementation NSDecimalNumber (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - FCWriteType(FCTypeDecimalNumber, coder->_output); - NSDecimal decimal = [self decimalValue]; - FC_ALIGN_OUTPUT(NSDecimal, coder->_output); - [coder->_output appendBytes:&decimal length:sizeof(decimal)]; -} - -@end - - -@implementation NSDate (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(FCTypeDate, coder->_output); - NSTimeInterval value = [self timeIntervalSince1970]; - FC_ALIGN_OUTPUT(NSTimeInterval, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; -} - -@end - - -@implementation NSData (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(([self classForCoder] == [NSMutableData class])? FCTypeMutableData: FCTypeData, coder->_output); - uint32_t length = (uint32_t)[self length]; - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32(length, coder->_output); - [coder->_output appendData:self]; - coder->_output.length += (4 - ((length % 4) ?: 4)); -} - -@end - - -@implementation NSNull (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - FCWriteType(FCTypeNull, coder->_output); -} - -@end - - -@implementation NSDictionary (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - - //alias keypath - __autoreleasing NSString *aliasKeypath = self[@"$alias"]; - if ([self count] == 1 && aliasKeypath) - { - __autoreleasing id node = coder->_rootObject; - NSArray *parts = [aliasKeypath componentsSeparatedByString:@"."]; - for (__unsafe_unretained NSString *key in parts) - { - if ([node isKindOfClass:[NSArray class]]) - { - node = ((NSArray *)node)[(NSUInteger)[key integerValue]]; - } - else - { - node = [node valueForKey:key]; - } - } - FCWriteObject(node, coder); - return; - } - - //object bootstrapping - __autoreleasing NSString *className = self[@"$class"]; - if (className) - { - //get class definition - __autoreleasing NSArray *propertyKeys = [[self allKeys] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self != '$class'"]]; - __autoreleasing FCClassDefinition *definition = coder->_classesByName[className]; - if (definition) - { - //check that existing class definition contains all keys - __autoreleasing NSMutableArray *keys = nil; - for (__unsafe_unretained id key in propertyKeys) - { - if (![definition->_propertyKeys containsObject:key]) - { - keys = keys ?: [NSMutableArray array]; - [keys addObject:key]; - } - } - propertyKeys = definition->_propertyKeys; - if (keys) - { - //we need to create a new class definition that includes extra keys - propertyKeys = [propertyKeys arrayByAddingObjectsFromArray:keys]; - definition = nil; - } - } - if (!definition) - { - //create class definition - definition = FC_AUTORELEASE([[FCClassDefinition alloc] init]); - definition->_className = className; - definition->_propertyKeys = propertyKeys; - coder->_classesByName[className] = definition; - } - - //write class definition - NSUInteger classIndex = FCIndexOfCachedObject(definition, coder->_classCache); - if (classIndex == NSNotFound) - { - classIndex = FCCacheWrittenObject(definition, coder->_classCache); - FCWriteType(FCTypeClassDefinition, coder->_output); - FCWriteString(definition->_className, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[propertyKeys count], coder->_output); - for (__unsafe_unretained id key in propertyKeys) - { - //convert each to a string using -description, just in case - FCWriteString([key description], coder->_output); - } - } - - //write object - FCCacheWrittenObject(self, coder->_objectCache); - if (classIndex <= UINT8_MAX) - { - FCWriteType(FCTypeObject8, coder->_output); - FCWriteUInt8((uint8_t)classIndex, coder->_output); - } - else if (classIndex <= UINT16_MAX) - { - FCWriteType(FCTypeObject16, coder->_output); - FC_ALIGN_OUTPUT(uint16_t, coder->_output); - FCWriteUInt16((uint16_t)classIndex, coder->_output); - } - else - { - FCWriteType(FCTypeObject32, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)classIndex, coder->_output); - } - for (__unsafe_unretained NSString *key in propertyKeys) - { - FCWriteObject(self[key], coder); - } - return; - } - - //ordinary dictionary - BOOL mutable = ([self classForCoder] == [NSMutableDictionary class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(mutable? FCTypeMutableDictionary: FCTypeDictionary, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[self count], coder->_output); - __autoreleasing NSArray *values = [self allValues]; - __autoreleasing NSArray *keys = [self allKeys]; - NSUInteger index = 0; - for (__unsafe_unretained id value in values) - { - FCWriteObject(value, coder); - FCWriteObject(keys[index++], coder); - } - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - -@implementation NSArray (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - BOOL mutable = ([self classForCoder] == [NSMutableArray class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(mutable? FCTypeMutableArray: FCTypeArray, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[self count], coder->_output); - for (__unsafe_unretained id value in self) - { - FCWriteObject(value, coder); - } - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - - -@implementation NSSet (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - BOOL mutable = ([self classForCoder] == [NSMutableSet class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(mutable? FCTypeMutableSet: FCTypeSet, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[self count], coder->_output); - for (__unsafe_unretained id value in self) - { - FCWriteObject(value, coder); - } - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - -@implementation NSOrderedSet (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - BOOL mutable = ([self classForCoder] == [NSMutableOrderedSet class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(mutable? FCTypeMutableOrderedSet: FCTypeOrderedSet, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[self count], coder->_output); - for (__unsafe_unretained id value in self) - { - FCWriteObject(value, coder); - } - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - -@implementation NSIndexSet (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - - BOOL mutable = ([self classForCoder] == [NSMutableIndexSet class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - - uint32_t __block rangeCount = 0; // wish we could get this directly from NSIndexSet... - [self enumerateRangesUsingBlock:^(__unused NSRange range, __unused BOOL *stop) { - rangeCount ++; - }]; - - FCWriteType(mutable? FCTypeMutableIndexSet: FCTypeIndexSet, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32(rangeCount, coder->_output); - [self enumerateRangesUsingBlock:^(NSRange range, __unused BOOL *stop) { - FCWriteUInt32((uint32_t)range.location, coder->_output); - FCWriteUInt32((uint32_t)range.length, coder->_output); - }]; - - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - -@implementation NSURL (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteStringAlias(self, coder)) return; - FCWriteType(FCTypeURL, coder->_output); - FCWriteObject(self.relativeString, coder); - FCWriteObject(self.baseURL, coder); - FCCacheWrittenObject(self, coder->_stringCache); -} - -@end - - -@implementation NSValue (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - FCCacheWrittenObject(self, coder->_objectCache); - const char *type = [self objCType]; - if (strcmp(type, @encode(CGPoint)) == 0 OR_IF_MAC(strcmp(type, @encode(NSPoint)) == 0)) - { - CGFloat point[2]; - [self getValue:&point]; - FCWriteType(FCTypePoint, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - FCWriteDouble((Float64)point[0], coder->_output); - FCWriteDouble((Float64)point[1], coder->_output); - } - else if (strcmp(type, @encode(CGSize)) == 0 OR_IF_MAC(strcmp(type, @encode(NSSize)) == 0)) - { - CGFloat size[2]; - [self getValue:&size]; - FCWriteType(FCTypeSize, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - FCWriteDouble((Float64)size[0], coder->_output); - FCWriteDouble((Float64)size[1], coder->_output); - } - else if (strcmp(type, @encode(CGRect)) == 0 OR_IF_MAC(strcmp(type, @encode(NSRect)) == 0)) - { - CGFloat rect[4]; - [self getValue:&rect]; - FCWriteType(FCTypeRect, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - FCWriteDouble((Float64)rect[0], coder->_output); - FCWriteDouble((Float64)rect[1], coder->_output); - FCWriteDouble((Float64)rect[2], coder->_output); - FCWriteDouble((Float64)rect[3], coder->_output); - } - else if (strcmp(type, @encode(NSRange)) == 0) - { - NSUInteger range[2]; - [self getValue:&range]; - FCWriteType(FCTypeRange, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)range[0], coder->_output); - FCWriteUInt32((uint32_t)range[1], coder->_output); - } - else if (strcmp(type, @encode(CGVector)) == 0) - { - CGFloat vector[2]; - [self getValue:&vector]; - FCWriteType(FCTypeVector, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - FCWriteDouble((Float64)vector[0], coder->_output); - FCWriteDouble((Float64)vector[1], coder->_output); - } - else if (strcmp(type, @encode(CGAffineTransform)) == 0) - { - CGFloat transform[6]; - [self getValue:&transform]; - FCWriteType(FCTypeAffineTransform, coder->_output); - for (NSUInteger i = 0; i < 6; i++) - { - FCWriteDouble((Float64)transform[i], coder->_output); - } - } - else if ([@(type) hasPrefix:@"{CATransform3D"]) - { - CGFloat transform[16]; - [self getValue:&transform]; - FCWriteType(FCType3DTransform, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - for (NSUInteger i = 0; i < 16; i++) - { - FCWriteDouble((Float64)transform[i], coder->_output); - } - } - else - { - [NSException raise:FastCodingException format:@"Unable to encode NSValue data of type %@", @(type)]; - } -} - -@end - - -#pragma mark - -#pragma mark legacy decoding - - -static inline uint32_t FCReadRawUInt32_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint32_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline double FCReadRawDouble_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(Float64, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static id FCReadRawString_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSString *string = nil; - NSUInteger length = strlen(decoder->_input + *decoder->_offset) + 1; - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - if (length > 1) - { - string = CFBridgingRelease(CFStringCreateWithBytes(NULL, decoder->_input + *decoder->_offset, - (CFIndex)length - 1, kCFStringEncodingUTF8, false)); - } - else - { - string = @""; - } - *decoder->_offset += paddedLength; - return string; -} - -static id FCReadNull_2_3(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return [NSNull null]; -} - -static id FCReadAlias_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - return FCCachedObjectAtIndex(FCReadRawUInt32_2_3(decoder), decoder->_objectCache); -} - -static id FCReadString_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - NSString *string = FCReadRawString_2_3(decoder); - FCCacheParsedObject(string, decoder->_objectCache); - return string; -} - -static id FCReadMutableString_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSMutableString *string = nil; - NSUInteger length = strlen(decoder->_input + *decoder->_offset) + 1; - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - if (length > 1) - { - string = FC_AUTORELEASE([[NSMutableString alloc] initWithBytes:decoder->_input + *decoder->_offset length:length - 1 encoding:NSUTF8StringEncoding]); - } - else - { - string = [NSMutableString string]; - } - *decoder->_offset += paddedLength; - FCCacheParsedObject(string, decoder->_objectCache); - return string; -} - -static id FCReadDictionary_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSDictionary *dict = nil; - if (count) - { - __autoreleasing id *keys = (__autoreleasing id *)malloc(count * sizeof(id)); - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject_2_3(decoder); - keys[i] = FCReadObject_2_3(decoder); - } - - dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count]; - free(objects); - free(keys); - } - else - { - dict = @{}; - } - FCCacheParsedObject(dict, decoder->_objectCache); - return dict; -} - -static id FCReadMutableDictionary_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableDictionary *dict = CFBridgingRelease(CFDictionaryCreateMutable(NULL, (CFIndex)count, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); - FCCacheParsedObject(dict, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - __autoreleasing id object = FCReadObject_2_3(decoder); - __autoreleasing id key = FCReadObject_2_3(decoder); - CFDictionarySetValue((CFMutableDictionaryRef)dict, (const void *)key, (const void *)object); - } - return dict; -} - -static id FCReadArray_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSArray *array = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject_2_3(decoder); - } - array = [NSArray arrayWithObjects:objects count:count]; - free(objects); - } - else - { - array = @[]; - } - FCCacheParsedObject(array, decoder->_objectCache); - return array; -} - -static id FCReadMutableArray_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableArray *array = [NSMutableArray arrayWithCapacity:count]; - FCCacheParsedObject(array, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - CFArrayAppendValue((CFMutableArrayRef)array, (void *)FCReadObject_2_3(decoder)); - } - return array; -} - -static id FCReadSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSSet *set = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject_2_3(decoder); - } - set = [NSSet setWithObjects:objects count:count]; - free(objects); - } - else - { - set = [NSSet set]; - } - FCCacheParsedObject(set, decoder->_objectCache); - return set; -} - -static id FCReadMutableSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableSet *set = [NSMutableSet setWithCapacity:count]; - FCCacheParsedObject(set, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - [set addObject:FCReadObject_2_3(decoder)]; - } - return set; -} - -static id FCReadOrderedSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSOrderedSet *set = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject_2_3(decoder); - } - set = [NSOrderedSet orderedSetWithObjects:objects count:count]; - free(objects); - } - else - { - set = [NSOrderedSet orderedSet]; - } - FCCacheParsedObject(set, decoder->_objectCache); - return set; -} - -static id FCReadMutableOrderedSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableOrderedSet *set = [NSMutableOrderedSet orderedSetWithCapacity:count]; - FCCacheParsedObject(set, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - [set addObject:FCReadObject_2_3(decoder)]; - } - return set; -} - -static id FCReadTrue_2_3(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @YES; -} - -static id FCReadFalse_2_3(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @NO; -} - -static id FCReadInt32_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(int32_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - FCCacheParsedObject(number, decoder->_objectCache); - return number; -} - -static id FCReadInt64_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(int64_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - FCCacheParsedObject(number, decoder->_objectCache); - return number; -} - -static id FCReadFloat32_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(Float32, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - FCCacheParsedObject(number, decoder->_objectCache); - return number; -} - -static id FCReadFloat64_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(Float64, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - FCCacheParsedObject(number, decoder->_objectCache); - return number; -} - -static id FCReadData_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t length = FCReadRawUInt32_2_3(decoder); - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - __autoreleasing NSData *data = [NSData dataWithBytes:(decoder->_input + *decoder->_offset) length:length]; - *decoder->_offset += paddedLength; - FCCacheParsedObject(data, decoder->_objectCache); - return data; -} - -static id FCReadMutableData_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t length = FCReadRawUInt32_2_3(decoder); - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - __autoreleasing NSMutableData *data = [NSMutableData dataWithBytes:(decoder->_input + *decoder->_offset) length:length]; - *decoder->_offset += paddedLength; - FCCacheParsedObject(data, decoder->_objectCache); - return data; -} - -static id FCReadDate_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(NSTimeInterval, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSDate *date = [NSDate dateWithTimeIntervalSince1970:value]; - FCCacheParsedObject(date, decoder->_objectCache); - return date; -} - -static id FCReadClassDefinition_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing FCClassDefinition *definition = FC_AUTORELEASE([[FCClassDefinition alloc] init]); - FCCacheParsedObject(definition, decoder->_objectCache); - definition->_className = FCReadRawString_2_3(decoder); - uint32_t count = FCReadRawUInt32_2_3(decoder); - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadRawString_2_3(decoder); - } - __autoreleasing NSArray *propertyKeys = [NSArray arrayWithObjects:objects count:count]; - definition->_propertyKeys = propertyKeys; - free(objects); - } - - //now return the actual object instance - return FCReadObject_2_3(decoder); -} - -static id FCReadObjectInstance_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing FCClassDefinition *definition = FCCachedObjectAtIndex(FCReadRawUInt32_2_3(decoder), decoder->_objectCache); - __autoreleasing Class objectClass = NSClassFromString(definition->_className); - __autoreleasing id object = nil; - if (objectClass) - { - object = FC_AUTORELEASE([[objectClass alloc] init]); - } - else if (definition->_className) - { - object = [NSMutableDictionary dictionaryWithObject:definition->_className forKey:@"$class"]; - } - else if (object) - { - object = [NSMutableDictionary dictionary]; - } - NSUInteger cacheIndex = FCCacheParsedObject(object, decoder->_objectCache); - for (__unsafe_unretained NSString *key in definition->_propertyKeys) - { - [object setValue:FCReadObject_2_3(decoder) forKey:key]; - } - id newObject = [object awakeAfterFastCoding]; - if (newObject != object) - { - //TODO: this is only a partial solution, as any objects that referenced - //this object between when it was created and now will have received incorrect instance - FCReplaceCachedObject(cacheIndex, newObject, decoder->_objectCache); - } - return newObject; -} - -static id FCReadNil_2_3(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return nil; -} - -static id FCReadURL_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSURL *URL = [NSURL URLWithString:FCReadObject_2_3(decoder) relativeToURL:FCReadObject_2_3(decoder)]; - FCCacheParsedObject(URL, decoder->_objectCache); - return URL; -} - -static id FCReadPoint_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGPoint point = {(CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder)}; - NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(CGPoint)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadSize_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGSize size = {(CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder)}; - NSValue *value = [NSValue valueWithBytes:&size objCType:@encode(CGSize)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadRect_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGRect rect = - { - {(CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder)}, - {(CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder)} - }; - NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadRange_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - NSRange range = {FCReadRawUInt32_2_3(decoder), FCReadRawUInt32_2_3(decoder)}; - NSValue *value = [NSValue valueWithBytes:&range objCType:@encode(NSRange)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadAffineTransform_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGAffineTransform transform = - { - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder) - }; - NSValue *value = [NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCRead3DTransform_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGFloat transform[] = - { - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder) - }; - NSValue *value = [NSValue valueWithBytes:&transform objCType:@encode(CGFloat[16])]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadMutableIndexSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t rangeCount = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; - FCCacheParsedObject(indexSet, decoder->_objectCache); - for (uint32_t i = 0; i < rangeCount; i++) - { - NSRange range = {FCReadRawUInt32_2_3(decoder), FCReadRawUInt32_2_3(decoder)}; - [indexSet addIndexesInRange:range]; - } - return indexSet; -} - -static id FCReadIndexSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSIndexSet *indexSet; - uint32_t rangeCount = FCReadRawUInt32_2_3(decoder); - if (rangeCount == 1) - { - //common case optimisation - NSRange range = {FCReadRawUInt32_2_3(decoder), FCReadRawUInt32_2_3(decoder)}; - indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; - } - else - { - indexSet = [NSMutableIndexSet indexSet]; - for (uint32_t i = 0; i < rangeCount; i++) - { - NSRange range = {FCReadRawUInt32_2_3(decoder), FCReadRawUInt32_2_3(decoder)}; - [(NSMutableIndexSet *)indexSet addIndexesInRange:range]; - } - indexSet = [indexSet copy]; - - } - FCCacheParsedObject(indexSet, decoder->_objectCache); - return indexSet; -} - -static id FCReadNSCodedObject_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - NSString *className = FCReadObject_2_3(decoder); - NSMutableDictionary *oldProperties = decoder->_properties; - decoder->_properties = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); - while (true) - { - id object = FCReadObject_2_3(decoder); - if (!object) break; - NSString *key = FCReadObject_2_3(decoder); - decoder->_properties[key] = object; - } - id object = FC_AUTORELEASE([[NSClassFromString(className) alloc] initWithCoder:decoder]); - decoder->_properties = oldProperties; - FCCacheParsedObject(object, decoder->_objectCache); - return object; -} - -static id FCReadObject_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - static FCTypeConstructor *constructors[] = - { - FCReadNull_2_3, - FCReadAlias_2_3, - FCReadString_2_3, - FCReadDictionary_2_3, - FCReadArray_2_3, - FCReadSet_2_3, - FCReadOrderedSet_2_3, - FCReadTrue_2_3, - FCReadFalse_2_3, - FCReadInt32_2_3, - FCReadInt64_2_3, - FCReadFloat32_2_3, - FCReadFloat64_2_3, - FCReadData_2_3, - FCReadDate_2_3, - FCReadMutableString_2_3, - FCReadMutableDictionary_2_3, - FCReadMutableArray_2_3, - FCReadMutableSet_2_3, - FCReadMutableOrderedSet_2_3, - FCReadMutableData_2_3, - FCReadClassDefinition_2_3, - FCReadObjectInstance_2_3, - FCReadNil_2_3, - FCReadURL_2_3, - FCReadPoint_2_3, - FCReadSize_2_3, - FCReadRect_2_3, - FCReadRange_2_3, - FCReadAffineTransform_2_3, - FCRead3DTransform_2_3, - FCReadMutableIndexSet_2_3, - FCReadIndexSet_2_3, - FCReadNSCodedObject_2_3 - }; - - uint32_t type = FCReadRawUInt32_2_3(decoder); - if (type > sizeof(constructors)) - { - [NSException raise:FastCodingException format:@"FastCoding cannot decode object of type: %i", type]; - return nil; - } - return constructors[type](decoder); -} diff --git a/MetaWear/Pods/FastCoding/LICENCE.md b/MetaWear/Pods/FastCoding/LICENCE.md deleted file mode 100755 index dd3163d..0000000 --- a/MetaWear/Pods/FastCoding/LICENCE.md +++ /dev/null @@ -1,21 +0,0 @@ -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. \ No newline at end of file diff --git a/MetaWear/Pods/FastCoding/README.md b/MetaWear/Pods/FastCoding/README.md deleted file mode 100644 index 4393b90..0000000 --- a/MetaWear/Pods/FastCoding/README.md +++ /dev/null @@ -1,377 +0,0 @@ -[![Build Status](https://travis-ci.org/nicklockwood/FastCoding.svg)](https://travis-ci.org/nicklockwood/FastCoding) - - -Purpose --------------- - -FastCoder is a high-performance binary serialization format for Cocoa objects and object graphs. It is intended as a replacement for NSPropertyList, NSJSONSerializer, NSKeyedArchiver/Unarchiver and Core Data. - -The design goals of the FastCoder library are to be fast, flexible and secure. - -FastCoder is already faster (on average) for reading than any of the built-in serialization mechanisms in Cocoa, and is faster for writing than any mechanism except for JSON (which doesn't support arbitrary object types). File size is smaller than NSKeyedArchiver, and comparable to the other methods. - -FastCoder supports more data types than either JSON or Plist coding (including NSURL, NSValue, NSSet and NSOrderedSet), and allows all supported object types to be used as the keys in a dictionary, not just strings. - -FastCoder can also serialize your custom classes automatically using property inspection. For cases where this doesn't work automatically, you can easily implement your own serialization using the FastCoding or NSCoding protocols. - - -Supported OS & SDK Versions ------------------------------ - -* Supported build target - iOS 11.0 / Mac OS 10.12 (Xcode 9.0) -* Earliest supported deployment target - iOS 9.0 / Mac OS 10.10 -* Earliest compatible deployment target - iOS 4.0 / Mac OS 10.6 - -NOTE: 'Supported' means that the library has been tested with this version. 'Compatible' means that the library should work on this OS version (i.e. it doesn't rely on any unavailable SDK features) but is no longer being tested for compatibility and may require tweaking or bug fixes to run correctly. - - -ARC Compatibility ------------------- - -FastCoder is compatible with both ARC and non-ARC compile targets, however, performance is better when running with ARC disabled, and it is recommended that you apply the `-fno-objc-arc` compiler flag to the FastCoder.m class. To do this, go to the Build Phases tab in your target settings, open the Compile Sources group, double-click FastCoder.m in the list and type `-fno-objc-arc` into the popover. - - -Thread Safety --------------- - -It is safe to call the FastCoder encoding and decoding class methods concurrently from multiple threads. It should also be safe to encode the same object concurrently on multiple threads provided that you do not mutate the object while it is being encoded. - - -Installation --------------- - -To use FastCoder, just drag the FastCoder.h and .m files into your project. - - -Security --------------- - -The FastCoding parser checks for buffer overflow errors whilst parsing, and will throw an exception if the data instructs it to try to read past the end of the data file. This should prevent most kinds of code injection attack. - -Whilst it is not possible to use a FastCoded file to inject code, as with NSCoding, an attacker could use a modified FastCoded file to cause unexpected classes to be created in your object graph, which might present a potential attack risk (note that only classes that already exist in your code base or a built-in Cocoa Framework can be created this way). - -For the time being, it is best not to try to load arbitrary FastCoded files from an untrusted source (although it is fine to use them for saving data internally within your application's sandbox). If you want to exchange FastCoded files between apps or users, use only the explicitly supported class types (listed below) and load the file using `propertyListWithData:`, which only supports safe types and will refuse to load a file containing unknown classes. A future release of the FastCoding library will add more sophisticated whitelisting capabilities. - - -Supported Classes ------------------- - -FastCoding supports the following class types natively: - - NSNull - NSNumber - NSDecimalNumber - NSValue (only the following subtypes) - CGPoint/NSPoint - CGSize/NSSize - CGRect/NSRect - CGVector - NSRange - CGAffineTransform - CATransform3D - NSString - NSMutableString - NSArray - NSMutableArray - NSDictionary - NSMutableDictionary - NSSet - NSMutableSet - NSOrderedSet - NSMutableOrderedSet - NSIndexSet - NSMutableIndexSet - NSData - NSMutableData - NSDate - -FastCoding also automatically supports any class that complies with the NSCoding protocol, or any class whose properties are all KVC-compliant, or that explicity implements the FastCoding protocol. - - -FastCoder methods ------------------------------ - -FastCoder implements the following methods: - - + (id)objectWithData:(NSData *)data; - -Constructs an object tree from an FastCoded data object and returns it. FastCoder does not currently provide any mechanism for class validation or substitution, so this method should not be used for loading files with unknown provenance (i.e. where you can't guarantee where the file came from, or that the file hasn't been tampered with). For exchanging files between apps, or for user-accessible documents, it is recommended that you use the `propertyListWithData:` method for loading the file instead (although this does not support arbitrary classes). - -If an unknown class type is encountered in the file, it will be loaded as a dictionary of properties that can be converted back into a real class later (see 'Bootstrapping', below). Attempting to load a malformed or corrupt file will throw an exception (caught internally) and return nil. - - + (id)propertyListWithData:(NSData *)data; - -Like `objectWithData:`, but this method is limited to loading "safe" object types such as `NSString`, `NSNumber`, `NSArray`, etc. Despite the name, this method is not actually limited to objects supported by `NSPropertyList` - for example it supports `NSNull` and `NSURL` - however it is safe to use for loading files from untrusted sources. Also, unlike ordinary property list methods, this can handle circular references, aliased objects and mutable containers like `NSMutableArray`. Attempting to load a malformed or corrupt file, or one containing unsupported classes, will throw an exception (caught internally) and return nil. - - + (NSData *)dataWithRootObject:(id)object; - -Archives an object graph as a block of data, which can then be saved to a file or transmitted via a network. The file can be loaded again using `objectWithData:`, or `propertyListWithData:` (provided that it only contains supported class types). - - -The FastCoding Protocol ------------------------------ - -FastCoding supports encoding/decoding of arbitrary objects using the FastCoding protocol. The FastCoding protocol is an *informal* protocol, implemented as a category on NSObject. The protocol consists of the following methods: - - + (NSArray *)fastCodingKeys; - -This method returns a list of property names that should be encoded/decoded for an object. The default implementation automatically detects all of the non-virtual (i.e. ivar-backed) @properties (including private and read-only properties) of the object and returns them, so in most cases it is not necessary to override this method. **NOTE:** if you override `+fastCodingKeys`, you should only include property keys for the current class, not properties that are inherited from the superclass. - - - (id)awakeAfterFastCoding; - -This method is called after an object has been deserialized using the FastCoding protocol, and all of its properties have been set. The deserialized object will be replaced by the one returned by this method, so you can use this method to either modify or completely replace the object. The default implementation just returns `self`. **NOTE**: returning a different object from `-awakeAfterFastCoding` may lead to unexpected behaviour if the object being decoded (or any of its children) contains a reference to itself. - - - (Class)classForFastCoding; - -This method is used to supply an alternative class to use for coding/decoding an object. This works the same way as the `-classForCoder` method of NSCoding, and by default returns the same value. - - - (BOOL)preferFastCoding; - -Because FastCoding automatically supports NSCoding, any object that conforms to the NSCoding protocol (except for types that are explicitly supported by FastCoding) will be encoded using the NSCoding methods by default. This is better for compatibility purposes, but may be signficantly slower than using the FastCoding protocol. If your class supports both NSCoding and FastCoding, and you would prefer FastCoder to use the FastCoding protocol, override this method and return `YES` (the default value is `NO`). - - -Overriding Default FastCoding Behaviour -------------------------------------------- - -If you wish to exclude certain properties of your object from being encoded, you can do so in any of the following ways: - -* Only use an ivar, without declaring a matching `@property`. -* Change the name of the ivar to something that is not KVC compliant (i.e. not the same as the property, or the property name with an _ prefix). You can do this using the `@synthesize` directive, e.g. `@synthesize foo = unencodableFoo;` -* Override the +fastCodingKeys method - -If you wish to encode additional data that is not represented by an `@property`, override the `+fastCodingKeys` method and add the names of your virtual properties. You will need to implement suitable setter/getter methods for these properties, or the encoding/decoding process won't work. - -If you wish to substitute a different class for decoding, you can implement the `-classForFastCoding` method and FastCoding will encode the object as that class instead. If you wish to substitute a different object after decoding, use the `-awakeAfterFastCoding` method. - -If you have removed or renamed a property of a class, and want to provide backward compatibility for a previously saved FastCoder file, you should implement a private setter method for the old property, which you can then map to wherever it should go in the new object structure. E.g. if the old property was called foo, add a private `-setFoo:` method. Alternatively, override the `-setValue:forUndefinedKey:` method to gracefully handle any unknown property. - -If you want more precise control of the coding, such as using different names for keys, etc. then you can implement the NSCoding protocol. By default, if a class implements NSCoding, FastCoder will rely on the NSCoding methods to encode the object instead of automatically detecting the keys. - - -Bootstrapping ---------------------- - -Sometimes it is useful to be able to define an object graph by hand using a human-readable format such as JSON, but it's tedious and error-prone to write the recursive logic needed to convert the JSON dictionaries to the correct custom objects. - -FastCoder has a neat feature that allows you to *bootstrap* a carefully structured JSON or Plist file into a native object graph via the FastCoding format. To define an object of class Foo using JSON, you would use the following structure: - - { - "$class": "Foo", - "someProperty1": 1 - "someProperty2": "Hello World!" - } - -You could then load this as an ordinary `NSDictionary` using `NSJSONSerialization`. But when you then convert this to data using FastCoder, it will detect the $class key and save this using the custom object record format instead of as a dictionary. When the resultant FastCoded data is decoded again, this will be initialized as an object of type Foo instead of a dictionary. - -If you attempt to load the FastCoded file in an app that doesn't contain a class called Foo, the Foo object will just be loaded as an ordinary dictionary with a $class key, and then saved as a custom object again when the object is re-serialized. This means that it is possible to write applications and scripts that can process arbitrary FastCoded files without needing to know about or implement all of the classes used in the file (this is not possible using `NSCoding`, or at least would require a lot more work). - - -Aliases ---------------- - -Another limitation of ordinary Plist or JSON files versus an NSKeyedArchive or FastCoded file is that they don't support pointers or references. If you want multiple dictionary keys in a JSON file to point to the same object instance, there's no way to do that. FastCoding solves this problem using aliases. - -As with the $class syntax used for bootstrapping custom object types, FastCoding treats a key with the name $alias as an internal file reference. The $alias value is a keypath relative to the root object in the file, used to specify an existing object instance. For example, see the following JSON: - - { - "foo": { - "baz": { "text": "Hello World" }, - "someProperty1": 1 - }, - "bar": { - "baz": { "text": "Hello World" }, - "someProperty2": 2 - } - } - -Here, the objects foo and bar both contain an object baz. But if you want foo and bar to both reference the same baz instance, you would do that as follows: - - { - "foo": { - "baz": { "text": "Hello World" }, - "someProperty1": 1 - }, - "bar": { - "baz": { "$alias": "foo.baz" } - "someProperty2": 2 - } - } - -Note that the baz inside bar contains an alias to the baz inside foo. When saved as a FastCoded file and the loaded again, these will actually be the same object. It doesn't matter whether bar.baz aliases foo.baz or vice-versa; FastCoder aliasing supports forward references, and even circular references (where an object contains an alias to itself). The alias syntax works like a keypath, although, unlike regular keypaths, you can use numbers to represent array indices. For example, in the following code, foo points to the second object in the bar array, "Cruel": - - { - "foo": { "$alias": "bar.1" }, - "bar": [ "Goodbye", "Cruel", "World" ] - } - - -File structure ---------------------------- - -The FastArchive format is quite simple: - -There is a header consisting of a 32-bit identifier, followed by two 16-bit version numbers (major and minor). The header is followed by three 32-bit integers representing the total number of unique objects, classes and strings encoded in the file, respectively (this is not the same as the number of chunks). These values can be used to set the capacities of the object caches in advance, which provides some performance benefit. If the object counts are not set (have a value of zero), the cache will be grown dynamically. - -Following the header and object counts, there are a series of chunks. Each chunk consists of an 8-bit type identifier, followed by zero or more additional bytes of data, depending on the chunk type. - -Commonly used types and values are represented by their own chunk in order to reduce file size and processing overhead. Compound or variable-length types such as strings or collections are encoded in the sequence of bytes that follow the chunk. - - -Migration from version 3.0 ---------------------------- - -Unfortunately, version 3.0 files crashed on ARM7/ARM7s due to data alignment issues (this was fixed in version 3.0.1). If you saved data using that version and need to recover it, do the following: - -Find the following macro in the FastCoder.m file: - - #define FC_ALIGN_INPUT(type, offset) { \ - unsigned long align = offset % sizeof(type); \ - if (align) offset += sizeof(type) - align; } - -Modify it to this: - - #define FC_ALIGN_INPUT(type, offset) - -Load the file and save it again. Now change the macro back again. - - -Release notes ------------------- - -Version 3.2.2 - -- Fixed warnings on Xcode 9 -- Fixed corruption bug when writing NSCoded archives containing nil properties -- Added tvOS support to Podspec - -Version 3.2.1 - -- Fixed possible alignment issue with Float64 types on 32-bit processors - -Version 3.2 - -- Fixed subtle bug where @YES and @1 were unexpectedly being treated as different keys in a CFMutableDictionary on 32-bit devices -- NSNumber values of 1 and 0 are no longer encoded as booleans (related to the above fix) -- Fixed leak when reading NSCoded objects - -Version 3.1.1 - -- Fixed crash when encoding classes where encodeWithCoder: contains an enumeration block - -Version 3.1 - -- NSDecimalNumber is now supported (previously was encoded as NSNumber) -- Fixed bug with NSCoding support -- Fixed alignment issue when reading encoded NSDate objects (dates are hard, OK?) -- Fixed crash when using FastCoding with ARC (but you still shouldn't use ARC) - -Version 3.0.2 - -- Fixed bug when encoding NSDate objects, due to alignment error -- Fixed bug where class and string counts were set incorrectly (minor performance impact) - -Version 3.0.1 - -- Enabled data alignment to fix crash on ARM 32 devices -- Files created using version 3.0 cannot be loaded, there is a manual migration process if needed (see above) - -Version 3.0 - -- Brand new file format that is both smaller and faster to encode/decode than before -- Added +propertyListWithData method for safely loading files from untrusted sources -- Parsing exceptions are now caught internally - in the event of an error, methods will return nil -- Fully backwards compatible with version 2.x files -- Fixed floating point precision bug -- Added support for CGVector type - -Version 2.3 - -- FastCoding now includes compatibility for NSCoding, so any class that supports NSCoding will now be encoded by calling the NSCoding methods instead of using the FastCoding protocol (this is slightly slower, but more compatible) -- Fixed a bug in NSIndexSet decoding -- Fixed a minor memory leak in FCClassDefinition -- FastCoding 2.3 is fully backwards compatible (can read any version 2.x file). FastCoding 2.3 files can be read by a 2.2 implementation provided that they do not include NSCoded objects - -Version 2.2 - -- Encoding NSIndexSet and NSMutableIndexSet is now supported -- Mac benchmark no longer relies on hardcoded path to json file -- FastCoding 2.2 is fully backwards compatible (can read version 2.0 or 2.1 files). FastCoding 2.2 files can be read by a 2.0 or 2.1 implementation provided that they do not include any of the new data types - -Version 2.1.9 - -- Now imports CoreGraphics if not already included in .pch file -- Fixed some new warnings that cropped up in latest Xcode - -Version 2.1.8 - -- Fixed memory leak when writing data - -Version 2.1.7 - -- Fixed crash when saving - -Version 2.1.6 - -- Fixed some conversion warnings when using ARC - -Version 2.1.5 - -- Major speed improvements to object encoding (decoding speed is unaffected) -- FIxed some potential bugs cuased by empty strings or collections -- Fixed some minor memory leaks - -Version 2.1.4 - -- Fixed bug when encoding NSURLs. - -Version 2.1.3 - -- Fixed issue where properties from inherited classes would not be coded -- fastCodingKeys no longer includes properties with nonstandard ivar names (this brings the behaviour in line with the documentation) -- Fixed some compiler warnings - -Version 2.1.2 - -- Fixed crash when loading bootstrapped objects -- Added benchmark for coding custom objects - -Version 2.1.1 - -- Fixed a bug where multiple aliases to an object that returns a different instance from -awakeAfterFastCoding would not work correctly. This fix improves the common case, but there are still some caveats (see the documentation for the -awakeAfterFastCoding method for details). - -Version 2.1 - -- Encoding NSURL and NSValue is now supported -- Immutable arrays, dictionaries and sets are no longer converted to mutable variants when encoded -- Added -classForFastCoding method (to avoid conflicts with NSCoding) -- Fixed a bug in object bootrapping when a $class dictionary does not contain a value for every property of the class that it represents -- FastCoding 2.1 is fully backwards compatible (can read version 2.0 files). FastCoding 2.1 files can be read by a 2.0 implementation provided that they do not include any of the new data types - -Version 2.0.1 - -- Fixed bug in NSDate serialization - -Version 2.0 - -- FastCoding 2.0 is not forwards or backwards compatible with version 1.0 files -- Added ability to automatically encode any object type -- Mutability of NSString and NSData objects is now preserved -- Added bootstrapping mechanism for creating native objects from plist/json -- Improved decoding performance - -Version 1.1 - -- Improved security by throwing an exception if unexpected EOF is encountered -- Improved performance when using ARC (but don't use ARC) -- Refactored to use polymorphic style for serializing (cleaner code) -- Refactored to use function pointer array for parsing (slightly faster) -- Now complies with -Weverything warning level -- Addd Cocopods podspec file - -Version 1.0.1 - -- Fixed bug in the aliasing logic - -Version 1.0 - -- Initial release diff --git a/MetaWear/Pods/Local Podspecs/MetaWear.podspec.json b/MetaWear/Pods/Local Podspecs/MetaWear.podspec.json new file mode 100644 index 0000000..48727de --- /dev/null +++ b/MetaWear/Pods/Local Podspecs/MetaWear.podspec.json @@ -0,0 +1,85 @@ +{ + "name": "MetaWear", + "version": "3.0.0", + "license": { + "type": "Commercial", + "text": "See https://www.mbientlab.com/terms/", + "file": "LICENSE" + }, + "homepage": "https://mbientlab.com", + "summary": "iOS/macOS/tvOS/watchOS API and documentation for the MetaWear platform", + "description": "This library allows for simple interfacing with the MetaWear Bluetooth (BLE)\nsensor platform. Stream or log a variety of sensor data via simple API calls.\nContact us at hello@mbientlab.com if you need custom hardware or help with App development.\nSee www.mbientlab.com for details.", + "authors": { + "Stephen Schiffli": "stephen@mbientlab.com" + }, + "source": { + "git": "https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS.git", + "tag": "3.0.0", + "submodules": true + }, + "platforms": { + "ios": "10.0", + "osx": "10.13", + "tvos": "10.0", + "watchos": "4.0" + }, + "social_media_url": "https://twitter.com/mbientLab", + "documentation_url": "https://mbientlab.com/cppdocs/latest/", + "default_subspecs": "Core", + "subspecs": [ + { + "name": "Core", + "preserve_paths": "MetaWear/MetaWear-SDK-Cpp/src/**/*", + "source_files": [ + "MetaWear/Core/**/*", + "MetaWear/MetaWear-SDK-Cpp/src/metawear/**/*.cpp", + "MetaWear/MetaWear-SDK-Cpp/bindings/swift/**/*" + ], + "compiler_flags": [ + "-Wno-documentation", + "-Wno-comma" + ], + "pod_target_xcconfig": { + "SWIFT_VERSION": "4.0", + "HEADER_SEARCH_PATHS": "$(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src", + "SWIFT_INCLUDE_PATHS": "$(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src" + }, + "frameworks": "CoreBluetooth", + "dependencies": { + "Bolts-Swift": [ + "~> 1.3.0" + ] + } + }, + { + "name": "AsyncUtils", + "source_files": "MetaWear/AsyncUtils/**/*", + "dependencies": { + "MetaWear/Core": [ + + ] + } + }, + { + "name": "UI", + "source_files": "MetaWear/UI/**/*", + "dependencies": { + "MetaWear/Core": [ + + ], + "MetaWear/AsyncUtils": [ + + ] + } + }, + { + "name": "Mocks", + "source_files": "MetaWear/Mocks/**/*", + "dependencies": { + "MetaWear/Core": [ + + ] + } + } + ] +} diff --git a/MetaWear/Pods/Local Podspecs/MetaWearPrivate.podspec.json b/MetaWear/Pods/Local Podspecs/MetaWearPrivate.podspec.json deleted file mode 100644 index 4d77533..0000000 --- a/MetaWear/Pods/Local Podspecs/MetaWearPrivate.podspec.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "MetaWearPrivate", - "module_name": "MetaWear", - "header_dir": "MetaWear", - "version": "2.10.0", - "license": { - "type": "Commercial", - "text": "See https://www.mbientlab.com/terms/", - "file": "LICENSE" - }, - "homepage": "https://mbientlab.com", - "summary": "iOS/macOS/tvOS API and documentation for the MetaWear platform", - "description": "This library allows for simple interfacing with the MetaWear Bluetooth (BLE)\nsensor platform. Stream or log a variety of sensor data via simple API calls.\nContact us at hello@mbientlab.com if you need custom hardware or help with App development.\nSee www.mbientlab.com for details.", - "authors": { - "Stephen Schiffli": "stephen@mbientlab.com" - }, - "source": { - "git": "https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS.git", - "tag": "2.10.0" - }, - "platforms": { - "ios": "8.0", - "osx": "10.11", - "tvos": "10.0" - }, - "social_media_url": "https://twitter.com/mbientLab", - "documentation_url": "https://www.mbientlab.com/docs/metawear/ios/2.10.0/index.html", - "source_files": "MetaWear/{Assets,Classes,Internal}/**/*.{h,m}", - "frameworks": [ - "CoreData", - "CoreBluetooth" - ], - "dependencies": { - "Bolts/Tasks": [ - "~> 1.8.4" - ], - "FastCoding": [ - "~> 3.2.2" - ] - } -} diff --git a/MetaWear/Pods/Local Podspecs/Zip.podspec.json b/MetaWear/Pods/Local Podspecs/Zip.podspec.json deleted file mode 100644 index 587451c..0000000 --- a/MetaWear/Pods/Local Podspecs/Zip.podspec.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "Zip", - "version": "0.4.3", - "summary": "Zip and unzip files in Swift.", - "description": "A Swift framework for zipping and unzipping files. Simple and quick to use. Built on top of minizip.", - "homepage": "https://github.com/marmelroy/Zip", - "license": "MIT", - "authors": { - "Roy Marmelstein": "marmelroy@gmail.com" - }, - "source": { - "git": "https://github.com/marmelroy/Zip.git", - "tag": "0.4.3", - "submodules": true - }, - "social_media_url": "http://twitter.com/marmelroy", - "platforms": { - "ios": "8.0", - "tvos": "9.0", - "watchos": "2.0", - "osx": "10.9" - }, - "requires_arc": true, - "source_files": [ - "Zip/*.{swift,h}", - "Zip/minizip/*.{c,h}", - "Zip/minizip/aes/*.{c,h}" - ], - "public_header_files": "Zip/*.h", - "pod_target_xcconfig": { - "SWIFT_INCLUDE_PATHS": "$(SRCROOT)/Zip/Zip/minizip/**", - "LIBRARY_SEARCH_PATHS": "$(SRCROOT)/Zip/Zip/" - }, - "libraries": "z", - "preserve_paths": "Zip/minizip/module.modulemap" -} diff --git a/MetaWear/Pods/Manifest.lock b/MetaWear/Pods/Manifest.lock index 6769536..00574ea 100644 --- a/MetaWear/Pods/Manifest.lock +++ b/MetaWear/Pods/Manifest.lock @@ -1,28 +1,40 @@ PODS: - - Bolts/Tasks (1.8.4) - - FastCoding (3.2.2) - - iOSDFULibrary (4.1.0): + - Bolts-Swift (1.3.0) + - iOSDFULibrary (4.1.3): - Zip (~> 1.0) - - MetaWearPrivate (2.10.0): - - Bolts/Tasks (~> 1.8.4) - - FastCoding (~> 3.2.2) + - MetaWear/AsyncUtils (3.0.0): + - MetaWear/Core + - MetaWear/Core (3.0.0): + - Bolts-Swift (~> 1.3.0) + - MetaWear/Mocks (3.0.0): + - MetaWear/Core + - MetaWear/UI (3.0.0): + - MetaWear/AsyncUtils + - MetaWear/Core - Zip (1.1.0) DEPENDENCIES: - iOSDFULibrary - - MetaWearPrivate (from `../`) + - MetaWear/AsyncUtils (from `../`) + - MetaWear/Mocks (from `../`) + - MetaWear/UI (from `../`) + +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - Bolts-Swift + - iOSDFULibrary + - Zip EXTERNAL SOURCES: - MetaWearPrivate: - :path: ../ + MetaWear: + :path: "../" SPEC CHECKSUMS: - Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322 - FastCoding: f7b1b75a2ccb0dd6ef9c928e46339e20252d98d3 - iOSDFULibrary: e245240cc1096f3961f2e5ec53860f8fca1ff648 - MetaWearPrivate: f9cb466d358f6a4a5639f3cce393ddaf37c4def5 + Bolts-Swift: fa98d1b59fc1acea9b21a21306dcdca1c85e3737 + iOSDFULibrary: 921bc0e250ad204a68ffe0cc98a7cb6ac8b13b9f + MetaWear: db411d9e682ce4845a3e187a6de0b8cca16b726d Zip: 8877eede3dda76bcac281225c20e71c25270774c -PODFILE CHECKSUM: 3f1860c05419ce0c9f1c5e51d97b5df098184716 +PODFILE CHECKSUM: 0e8b329392a8a7e966662fa269e1ca5b0f680490 -COCOAPODS: 1.3.1 +COCOAPODS: 1.5.0 diff --git a/MetaWear/Pods/Pods.xcodeproj/project.pbxproj b/MetaWear/Pods/Pods.xcodeproj/project.pbxproj index 45fd510..7fc21ff 100644 --- a/MetaWear/Pods/Pods.xcodeproj/project.pbxproj +++ b/MetaWear/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1445 +7,590 @@ objects = { /* Begin PBXBuildFile section */ - 0071B214B6C8791EF614E7667A50F28C /* LoggerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FB716E5129E1AE665A5FE6F4DA938B /* LoggerDelegate.swift */; }; - 00C6D900C7849201DDF56DD4CE31DF30 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = DFD327E643DD1A34007F37CE8094CEE1 /* BFCancellationTokenRegistration.m */; }; - 00E95D6A95A3F727CFB0DFE0F95AD0CA /* MBLEulerFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E2876AE1BB6B2EC1B9E6DFFDB5C908 /* MBLEulerFormat.m */; }; - 010D2D7461DA9680646520AFFFDE44E0 /* MBLMetaWear.m in Sources */ = {isa = PBXBuildFile; fileRef = 4739499D51E870D85365C8346318C403 /* MBLMetaWear.m */; }; - 013C146186AFFEF6A7582C2F33AF6628 /* MBLFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 583A609E5ACE78382C84ED5EF0EDE7C8 /* MBLFormat.m */; }; - 01610BDDB03C8319345B0DA8E361AAF5 /* MBLMetaWearManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CD80956417A14D56D8D27D71A192F8DA /* MBLMetaWearManager+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01944C704586C51A1F5989F7A4DF327D /* MBLI2C.h in Headers */ = {isa = PBXBuildFile; fileRef = F618C9DF00DDF47D5EEEAAFDFC613948 /* MBLI2C.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 01A051F8BC7AAEA5BAF3118AE0453CFE /* MBLOnDieTemperature0.m in Sources */ = {isa = PBXBuildFile; fileRef = 041EC2A34089D29291A9815E11ACD8EC /* MBLOnDieTemperature0.m */; }; - 01B2CF1189F93E074AE5670B5EB90314 /* LegacyDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68ED4B0184AB99F750D04E9F54595CB /* LegacyDFUServiceInitiator.swift */; }; - 01DDBF1B4B65115869AAC6587ED6CD88 /* MBLGyroBMI160Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 611E0828D1D423282BC36D41D8659761 /* MBLGyroBMI160Format.m */; }; - 01E53568A8F39466BE38D01EF3FCC51F /* MBLSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 26128295AA0938AD6329B2E3407ED0C8 /* MBLSettings.m */; }; - 01F2E855D2CDB3461C9EBF8974351727 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 984CCC87F279AA94306E80AA33255F86 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 01FF7476D2FE72586115B470903C8524 /* MBLNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 328CC030B05EEF6E7D428A59949C6557 /* MBLNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02224752D0BEC566D0DCB9D6D647DF3F /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 76C91F3C8F5D04D087E0A9FA281193B5 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m */; }; - 0246A903472A4DEC4599E16CA8D56248 /* DFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C6DE6FF859CB07E8F2499FE22E774AA /* DFUServiceController.swift */; }; - 02485AEF70C74BDE815AD970B0291A88 /* MBLGPIOPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F1BC518C4E1FB3BC352030FB4FECD49 /* MBLGPIOPin.m */; }; - 026B0B970497CED9D47C8C918548BEF4 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EF3DD06DCF465CB6B9BF1E1C048270 /* MBLGyroBMI160PackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 02776DCCC3A363894CBB16E0CE8E23EA /* MBLAccelerometerBoschFlatData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 09BF9E44AFC699AC453CFBD3C548CC3B /* MBLAccelerometerBoschFlatData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 027F693630B82D5B8C891B51AD0AAFBB /* MBLAccelerometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = 116BB3AC97B4B082383621A9CB2549E4 /* MBLAccelerometerBosch.m */; }; - 029ADF46A4B53B6BEB31ACD9A345F7FD /* MBLDataProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B34BF91775BD5B5F16563879AAE89DE /* MBLDataProcessor.m */; }; - 029C4F0C0AB5BCF5469D9F74DF990EF4 /* MBLBarometerBMP280.h in Headers */ = {isa = PBXBuildFile; fileRef = 2813B6E415AA511D8A27433A7E7567D7 /* MBLBarometerBMP280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0306659B291A7C167BE888888BE89763 /* MBLRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = C78C6DCAA18927FE63D0D8C43B0CFF2F /* MBLRegister.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 031A141D6AA7B805CBB3640F6EC43D27 /* MBLCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = AD87D9452AD5DFA34EAE953736420189 /* MBLCommand.m */; }; - 031DEE7720E17279E13483835585971B /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5599DBB7CE6CAB36387851BD32B12CA /* CoreBluetooth.framework */; }; - 0365EF83607D1B78826296AD032CF08B /* MBLGPIOPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F1BC518C4E1FB3BC352030FB4FECD49 /* MBLGPIOPin.m */; }; - 03A750A200CC8C2378AD647B23D68843 /* bmi160.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8F783E140BB600631BF26096F6498C /* bmi160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 03B9A46B683B005457108D65056D39E4 /* MBLGPIOPinChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B3830A96734A10F95A0898A3AE3C2DA /* MBLGPIOPinChangeEvent.m */; }; - 03D701D43AAFF6CB616E4E74329A54E1 /* MBLAmbientLightLTR329.m in Sources */ = {isa = PBXBuildFile; fileRef = 46D823DA636B25C835ED3EAB68BE9151 /* MBLAmbientLightLTR329.m */; }; - 03FB72FD278F0443CA598807A950490F /* MBLNeopixel.h in Headers */ = {isa = PBXBuildFile; fileRef = 683E023C19814107E458986DB3C80721 /* MBLNeopixel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0427D8C94D40A18644BBE743912FBE24 /* MBLBluetoothPeripheralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = D71F96F841281B595282C44BF5FF857F /* MBLBluetoothPeripheralMock.m */; }; - 0459072D1D6EACE1455AEDA24EE776AE /* MBLConductance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C2075920A7BE1CF684C76F2F799ECBD /* MBLConductance.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 046CEBDD8D9326BC344D84A651071897 /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1D3BBE2E126BC29F81415209EF8F1A /* BFTask+Exceptions.m */; }; - 04FE5F6586B49FD1ACDD77A5A1981FFB /* MBLData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 79ACB3EAB67424B932181CC2ADD04624 /* MBLData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 050F5390C754F7B21ECD61ED32B95685 /* MBLRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = C78C6DCAA18927FE63D0D8C43B0CFF2F /* MBLRegister.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 05B279D20332CE57592872F685EDB50B /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 147815D574238CF6873A9031B245D10E /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 05BB584BCAF2A1E559D9D9DA44037C90 /* MBLHygrometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ACCF7CA22DE0EE99184FAFF40C4412D1 /* MBLHygrometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 05BD407A3B595105D47A2615EE011C67 /* MBLExternalThermistor1.m in Sources */ = {isa = PBXBuildFile; fileRef = 257DF6872E94837AC767B4782104D87E /* MBLExternalThermistor1.m */; }; - 062A9C0E02CBBBCAC6691E92F9656C34 /* MBLI2CData.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D0C4AE392CD54EE51E540B5D17D335 /* MBLI2CData.m */; }; - 065DAF8C7CC2167FE3B8ED7CB5A9D895 /* MetaWearPrivate-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F36840C4CAE22288200B199380FC8D63 /* MetaWearPrivate-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0665FEBFD7BFEB969F9B987F194D3352 /* MBLBarometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EA4B888A2C3618023DA6440BA48FD6D /* MBLBarometerBME280.m */; }; - 06D76A284D55BC3D5A3A0E4A243B4A98 /* MBLConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = 259124F1E7A1A8378E3FAC98644EE69A /* MBLConversion.m */; }; - 076594AF7AF79EBB836A96F5285FDA95 /* MBLAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 077DD2BC11F0A7ADDD507D7CFD5E9B3D /* MBLAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0789FE768CE1AA1805268A56370C0DD3 /* MBLTimerEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CECA256893645F935B5C13A5CBBED84 /* MBLTimerEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 083E49121D04667E310E9AE8487836B8 /* MBLANCS.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CC808F2321E7A48AAF53E821EB9FE8C /* MBLANCS.m */; }; - 0843A457E87AEFDDF142AB4D17E5CD7E /* MBLExternalThermistor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E3207AB2D85976BE06AECFA290AB0D4 /* MBLExternalThermistor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0878E6CE39F29B1CD032C4AA781EB498 /* MBLAccelerometerBMI160MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB89E36AEE3848001C95666AAB53B64 /* MBLAccelerometerBMI160MotionEvent.m */; }; - 08CCE55C0F1087086ABB380DC2492E7A /* MBLGyroData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2933BA5E21AEF0F56E04A4BD5C37AD29 /* MBLGyroData.m */; }; - 08DB423DCA30C6C3E2F44B7ED47C1FA9 /* MBLAnonymousEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AC77CDC011F6ABB4F5891B58CF47CB2 /* MBLAnonymousEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 090092A74DB2DA7A151900ED205E6528 /* MBLPhotometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 19CD19E40DAAF05256018C6B1F12F55D /* MBLPhotometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 091D09EC1FC3872EAB54CB2AD2D73A0D /* MBLHygrometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A9C61925C6320CAABE16A475F1F4E18 /* MBLHygrometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0925EE3826CFCB08BF273D9E4ECA514A /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C09A3AC008BF7FA56EEB4385A3C3DB /* MBLGyroBMI160PackedDataReadyEvent.m */; }; - 0972067B0940D8002401974EC2FC0A9D /* MBLBluetoothPeripheral.h in Headers */ = {isa = PBXBuildFile; fileRef = FE8969BAE4E23F3DFE16E1BD087E5A9D /* MBLBluetoothPeripheral.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0988220B7B2FA6BA5E04E8CFE3E0578B /* bmi160.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8F783E140BB600631BF26096F6498C /* bmi160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 098FE2D71B7F71737542BF5DFE597F83 /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8A748BF8ED64C13C94BBC174818A7A /* MBLAccelerometerMMA8452QRMSFormat.m */; }; - 09D2B706991EDD305986E56CA6BF4B21 /* MBLAmbientLightLTR329.h in Headers */ = {isa = PBXBuildFile; fileRef = 9030BAA310B1AD555332EC41BE83E228 /* MBLAmbientLightLTR329.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 09D9A1843E5F99C7E2A49AF2B1547F3C /* MBLANCSEventData.m in Sources */ = {isa = PBXBuildFile; fileRef = 78A46EE93080D885BFF6F8471DA8A012 /* MBLANCSEventData.m */; }; - 09E76BA1EE35B5E23F304AEBABC9E4D2 /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F12B911756D24E4437801B5DC7B003EC /* MBLAccelerometerBoschPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A7E2B71A330486F38B6790857A96278 /* DFUStreamHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C47A810D9F0D3F2E32CE75405F6AA0E /* DFUStreamHex.swift */; }; - 0AD73E1A6BCA484FDBB917205FA5F0A1 /* MBLAccelerometerDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 67C2F6BF2281EB44559A63F5ED570D37 /* MBLAccelerometerDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0AE2E60A7B25510D3C5CD4C0FF4289B1 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2660920FD069ED7B5ED13CE0B789A2C6 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B060733C1F26E993362CBDAC263857A /* MBLAmbientLightLTR329.m in Sources */ = {isa = PBXBuildFile; fileRef = 46D823DA636B25C835ED3EAB68BE9151 /* MBLAmbientLightLTR329.m */; }; - 0B698159F7B2C80C57CC9550405A3BD8 /* MBLGPIO+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C355EC8ACB217A38B8BEA29DB930D04 /* MBLGPIO+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0BBFA89A50E38F47607784D5823B5B2F /* MBLGyroData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2933BA5E21AEF0F56E04A4BD5C37AD29 /* MBLGyroData.m */; }; - 0BCE138A7C66BEF6489784558D125B89 /* Pods-MetaWearIntegrationTests-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1E28082BF970536C53DA5166708B1599 /* Pods-MetaWearIntegrationTests-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C032BE16A918BA09768AFA56BC0F826 /* MBLAccelerometerBoschOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F20F10D01757768F6504900F09E5B5 /* MBLAccelerometerBoschOrientationEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0C1A68D945C9D8373372E75DBACE96D1 /* MBLTemperature.m in Sources */ = {isa = PBXBuildFile; fileRef = 096F4405C3E714C672C9653B4875D76E /* MBLTemperature.m */; }; - 0C4610AE2C44EC97CB8409428A4389B8 /* MBLDataSample.m in Sources */ = {isa = PBXBuildFile; fileRef = 67AE1DA5CCAEC8045CA513254318D081 /* MBLDataSample.m */; }; - 0C8B166F4D31CF3AC3BBBDBD54372EE5 /* MBLEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8755BF1875A2CDF639F20DED1B9D0C2C /* MBLEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0CCAFC9EE4619B09B706E82FFD3A4611 /* MBLBarometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F28543D661599E174AF98EA4A3B6D58 /* MBLBarometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0CD543B135B451A3B87BE020B48EA2E3 /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8A748BF8ED64C13C94BBC174818A7A /* MBLAccelerometerMMA8452QRMSFormat.m */; }; - 0D178AB9C0254D0A81F1C0A69A73D167 /* MBLAccelerometerBoschOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AA27DD31D148E7D4FE4B088798FD73F /* MBLAccelerometerBoschOrientationFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0D18BD34EAE097AD49EB12B2FBDCADFA /* MBLMetaWearManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD17983083A051951D07F5F4B1A6301 /* MBLMetaWearManager.m */; }; - 0D7793CD8B5152C83B74AA17946C3464 /* SecureDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = E72170D3AC6D512DCC948B28D038E74F /* SecureDFUPeripheral.swift */; }; - 0DB3406A115381A4E82C04CD9CBE1C98 /* MBLNumericFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 04A4C08307A0807A13DF6337A194A7A9 /* MBLNumericFormatter.m */; }; - 0DE08D1C54AED150435FCBB60A688844 /* MBLGPIOData.h in Headers */ = {isa = PBXBuildFile; fileRef = AE70D8C3F080CAE5CD2BD059325B35B0 /* MBLGPIOData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E9DCF92DC22447BEBA6A6890862A8E7 /* MBLAccelerometerBMI160MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 082B67135724324C65933732754CC49D /* MBLAccelerometerBMI160MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F387D6C6316928B18C06FB8B547BB47 /* MBLMockUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 66BD7978E06A8765D037FC38B585C13E /* MBLMockUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F4BE94542C3A396CBE3D9DD35AD0435 /* MBLAccelerometerShakeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E95B4734AA96D0221CFDDE954406F997 /* MBLAccelerometerShakeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F82B9124E0F733FB076FC61CFDA508B /* BFTask+MBLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD0265FC80A962B97D528D2D555EE96 /* BFTask+MBLPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F939452145DCCC94EE24BE3CEF1F012 /* MBLAccelerometerOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BC673AC71BD95CD9BF86FDD6371BE59 /* MBLAccelerometerOrientationEvent.m */; }; - 0F97C8DA8BF768289B425606D786E844 /* MBLBarometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEE9DAF27B41AC971847EFB87011210 /* MBLBarometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F98E2BD8E1DA779C23A0AFAA9799A53 /* MBLAccelerometerBoschFlatEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 631DC4724CB7F5DB5E12D63CCAA9BE04 /* MBLAccelerometerBoschFlatEvent.m */; }; - 0FAD4578934C10A213537DD934981F5B /* MBLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 065B9A18331BB5E77686A1A37B93AB89 /* MBLFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0FB29EDD7DED2E5226A7DFF56AFB32DC /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */; }; - 0FE13EA63BC6A6B663892602C2AB58BE /* MBLAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 077DD2BC11F0A7ADDD507D7CFD5E9B3D /* MBLAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1001A6255073D35114CA1729A6B8CCFF /* MBLLED+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A343C0D07D72D5EED6731AA686094E0 /* MBLLED+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 102554E31E508392FC533E12806168BA /* MBLAccelerometerBoschFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3CE63F66ACC9ECA525B2C889395E9B /* MBLAccelerometerBoschFormat.m */; }; - 107ED71EE124C405956B71DB00E7602F /* MBLSerial+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D382C7ED86B3A4044E9BC7FE7B808E0C /* MBLSerial+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10EFDE86A1E0304C9E6F8A72F77A54AB /* MBLGPIOPin+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 866AB71DEA1B2D0ACB8F328AD343EF8C /* MBLGPIOPin+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1116BC72F7C510D17292B26F9C3EC330 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */; }; - 1158F65F25939E9A499EE805104A3854 /* DFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C6DE6FF859CB07E8F2499FE22E774AA /* DFUServiceController.swift */; }; - 1184263517FF2266110029BA64E841E1 /* MBLGyroBMI160DataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8125897E48631184953DBC6BF9970D41 /* MBLGyroBMI160DataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 119474CFBBE15FDF3E6C116AF852E3C3 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF73187F3F6E0F4E6FC6E5710081DBA4 /* Foundation.framework */; }; - 11E8718BF58612707E521A18354DF47F /* MBLAccelerometerMMA8452Q.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D409E9AC30BA95DADFD8640807D6AC9 /* MBLAccelerometerMMA8452Q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 120C7DF54F2057BE9527E4B08CCB4C0C /* MBLMovingAverage.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DFA861A03763BE92BA107951F76F0A0 /* MBLMovingAverage.m */; }; - 123318087DFF43DD84816B04B0C1A920 /* DFUPeripheralSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DE87BDF106FEBCFABBF465A01773EE /* DFUPeripheralSelector.swift */; }; - 1262EA356711EDA0EFB66088D8AB690B /* MBLGyroBMI160DataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8125897E48631184953DBC6BF9970D41 /* MBLGyroBMI160DataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12AE15F529E49D640848CB041F498F17 /* MBLCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 77004055E8B046B2F94C36501CA986B0 /* MBLCategoryLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 12BF37F126A661EA7AEBA301EE2C8BB0 /* SecureDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A92D831CC3AF37DF68739AC2D56E036 /* SecureDFUExecutor.swift */; }; - 12C98448ED36D8E01ABA5A99BA057467 /* MBLNeopixelStrand.m in Sources */ = {isa = PBXBuildFile; fileRef = AE1010EE66D1FDA5F86AD0D8493B7D87 /* MBLNeopixelStrand.m */; }; - 134805D3015851E11E075DC536091006 /* MBLMagnetometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E4EE35E05B06402DE0951FDFC4AF4A9C /* MBLMagnetometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 137F583C04F5F863C5690C0629DF4904 /* DFUStarterPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B574039288B136D02D4D4AA7A41748 /* DFUStarterPeripheral.swift */; }; - 1381FD8B26BAADADAB33BCC8802F5810 /* MBLQuaternionData.m in Sources */ = {isa = PBXBuildFile; fileRef = D09F8208C59945BF9BCA2E29C547665D /* MBLQuaternionData.m */; }; - 13BA1CAF79098EC4601A5DF1E5436115 /* MBLGyro+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 85CE3C145F9D23BF8E0DB8462C048C88 /* MBLGyro+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 13E1012BADFA093E5798AE26371392A8 /* MBLGPIO.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D540DE91D9349411A42CBFA9E1817D2 /* MBLGPIO.m */; }; - 13E552B52E46D3C1E2BFB178C1AE7844 /* MBLAccelerometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 11DD487EEB31D0A2E1939F4FC9874AE8 /* MBLAccelerometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 140C43845A7A6F3D14E10FAAF47D0E9D /* MBLANCSEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = 510DD17398465B0992EB321F5ADC3AE1 /* MBLANCSEventData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 140F4D2D29D35D72391950A6D1D7A737 /* MBLMagnetometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF938D304C25C4D90A26EE7E13BFE15 /* MBLMagnetometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 147EDD67EC8602B39E7F9F018E722240 /* MBLAccelerometerBoschOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F906C88D677F6440EA3F1A5FA691E7D4 /* MBLAccelerometerBoschOrientationFormat.m */; }; - 14CE47C572D6502DAD608755F2AE0895 /* MBLBarometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F28543D661599E174AF98EA4A3B6D58 /* MBLBarometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 158CFCD1BFE2BFE26322EE441D9864EC /* MBLBluetoothPeripheralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 2622409A6E1318E8A16282456B61FAAA /* MBLBluetoothPeripheralMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 15B979CB422A4CB0C9020C6283B85F2E /* MBLFirmwareUpdateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 22074BEB840408CE90EAF720DD456558 /* MBLFirmwareUpdateInfo.m */; }; - 15BA44CD8D62339293C917F6B53E6258 /* MBLProximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F5479EAA668064130D02812F59E306C /* MBLProximity.m */; }; - 16473FD01DD043105BD5D7874879D257 /* MBLMacAddressFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = D7CEF79F64A30505A4E517BC428854FA /* MBLMacAddressFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 165C529F52DF4F141BB30AD7709D8267 /* ZipArchive.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9946177777926628D585F20B3365C41 /* ZipArchive.swift */; }; - 167025E4096F91F650AD4C98DDAE2BA3 /* MBLAccelerometerAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DC7D0B2E65A380068EC3FEF2957C2A44 /* MBLAccelerometerAxisReadyEvent.m */; }; - 1683391C78CECB036D6BD9FCA3721881 /* MBLGyro.h in Headers */ = {isa = PBXBuildFile; fileRef = 4602EBBBCBFC4B0BDD1112C6F156FAC2 /* MBLGyro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1684550709B8476C873C91BA669F50DC /* MBLLED.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A41ECB56B5DFC8D755819D80040E78 /* MBLLED.m */; }; - 16C8840358D63CF86A627CED2711D3B8 /* MBLHygrometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A9C61925C6320CAABE16A475F1F4E18 /* MBLHygrometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 175089188FFFB3FD718B5CA3F751E9F8 /* MBLLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 71C9148C30A9AEBF8DA33E34D3D71D0A /* MBLLogging.m */; }; - 180856A896791171217AB77D63298CFA /* MBLMechanicalSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B45978E147332C2D7DCE27CFB3A99DC /* MBLMechanicalSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 180E45BA7619CD4CD0E7C633732F735A /* MBLProximity.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF908A6021CBB2D0312C0A243052E7A /* MBLProximity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 182F0B1B306709011D50699E12DEA962 /* MBLGPIOData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6488DE19FA291681E79AFB6D915611 /* MBLGPIOData.m */; }; - 1894ED975938F7BACE3E833BB28488D7 /* MBLAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 31C2F98E33F89A641DBCE8A3F3C9D81F /* MBLAccelerometer.m */; }; - 18E58CCF51C445F6D604A2F382431C01 /* MBLHygrometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A9C61925C6320CAABE16A475F1F4E18 /* MBLHygrometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 19250B8192BD5C2AF5A703FFB8BCD86A /* MBLEntityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A498490BEAA8E5C25A3B8A636D898BA /* MBLEntityEvent.m */; }; - 1957DFE221A73F3C7D94CCD95DB27302 /* MBLSerial.m in Sources */ = {isa = PBXBuildFile; fileRef = 04CBB3EAF42BB1BE4A3C1BCF71A83A84 /* MBLSerial.m */; }; - 19EA68AB0F7F5CCF2692FF2178F3FB39 /* MBLBluetoothCentralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = B661370B50F2E66A283AEFD0060A25D5 /* MBLBluetoothCentralMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A504214DAE805E03BCEC2570A8E873C /* MBLPhotometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 315DE6DF9415ACA45A996357360A6099 /* MBLPhotometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A6DE56CB1F6FE1A9C9916994ABCB2E1 /* MBLTimerEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 01A67B1A530D3D12F82B2B6F354568D5 /* MBLTimerEvent.m */; }; - 1A8A3A5C6373B9A5558316C9A199F6E3 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = C6DE6A5AC0A49A3E487037A11D03F9E0 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1AD69B65FD1381BB905A315C0136AE6B /* MBLMagnetometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = D015AFF3E32DB592E65FF30976F85E80 /* MBLMagnetometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1AE62FD730379B30F5B6A41D87E29A8C /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 792344F36306444FD588737F547C1CBD /* MBLAccelerometerBoschLowOrHighGEvent.m */; }; - 1BADD91AF5D463D8241AFFF452492483 /* MBLMetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ECB3EBED1AD5F9DFE05147E317A42A8 /* MBLMetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1BEDF982990E948740D7E54AA63056B4 /* MBLRMSAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89508313CD903B64125F4A956E656897 /* MBLRMSAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1C6AC360C5131A3687663A2714951DAC /* MBLOrientationData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE1FB0DD41BD31701FDA36D7A577E33 /* MBLOrientationData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1CF0CA7ED555E952EE679F1BDD14AEB8 /* MBLAccelerometerBoschFlatEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C06DE03D80A35DF40079D0DC1D26480 /* MBLAccelerometerBoschFlatEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D1F8AD049EFA1947029D72F648307D2 /* MBLRGBData.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B693A9204E409123726821605F41F4 /* MBLRGBData.m */; }; - 1D43682BF227D3BB636DAC82A8F4987B /* MBLConductanceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 39406C785E452FAF5B389D4F86949543 /* MBLConductanceData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1D60045865690C8078A721A36C0EF396 /* MBLLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 71C9148C30A9AEBF8DA33E34D3D71D0A /* MBLLogging.m */; }; - 1E7A069D2DAFADB5A5E6AC82E4BA6BAD /* MBLHygrometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 46546F45369A541754827BBFAD119C43 /* MBLHygrometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1E898C023F1487158423D73250A1B016 /* MBLPhotometerTCS3472Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F0D1110D45FA365DBC5367085D1E83A /* MBLPhotometerTCS3472Format.m */; }; - 1EA98007A14C7083FEB8CF804E32755D /* MBLFirmwareBuild.m in Sources */ = {isa = PBXBuildFile; fileRef = F1950DB31EFF9511CAAD020DE490A290 /* MBLFirmwareBuild.m */; }; - 1EC244B467EE3549A5C5E27A6CFC5358 /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 792344F36306444FD588737F547C1CBD /* MBLAccelerometerBoschLowOrHighGEvent.m */; }; - 1EDF498579F01D17226D1373A1AF521E /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = B49F585CCFF6430654E83FD8277557F7 /* BFTask.m */; }; - 1EF1EBA0DA9F25147BBC021B861A89B1 /* DFUServiceSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB5582120CF0EA27230E08D94D529650 /* DFUServiceSelector.swift */; }; - 1EF75BF178B422C22089520BA4F10F3B /* MBLGyroBMI160Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AA750E66901ECE028D826B3D8DA9552 /* MBLGyroBMI160Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F109BFFBA8A44FD7B485A2E1065C6CB /* MBLDeviceLookup.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1EDADCFE8155984972FD1A2B4CFD4F /* MBLDeviceLookup.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1F7BCB4665E653EEB51A1B9EFC92E7CA /* MBLAccelerometerShakeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 781A18BA1418D9C811A289311EBFC8F9 /* MBLAccelerometerShakeEvent.m */; }; - 1FA198AA2A33383DE7195080B96CAAE2 /* MBLiBeacon.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B5A2DB9C21AB3E46343707203DB8703 /* MBLiBeacon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FB7080E5214641764BE238088E4BDDA /* MBLAccelerometerOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E1EAD5716B33481AA8D4749144206A /* MBLAccelerometerOrientationEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FD59BC51D175ED916C9D1C20BA7C4C4 /* MBLModule.m in Sources */ = {isa = PBXBuildFile; fileRef = FBB66D000CC25B48165954C2C99799DF /* MBLModule.m */; }; - 1FE2AE1BBB3885975710BD38E7C87367 /* DFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF6C7C2B5B872E4AF65C6CF01BEBE459 /* DFUControlPoint.swift */; }; - 201E01C88C4E32D4337494801FC5F56E /* SecureDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2A92D831CC3AF37DF68739AC2D56E036 /* SecureDFUExecutor.swift */; }; - 20463089658D0757787E6E4CB871AE86 /* MBLAccelerometerBoschTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FFFD05307348ED7C574EF3859B422B0B /* MBLAccelerometerBoschTapEvent.m */; }; - 204D6551DC96734DF3FD9F628D2C803F /* MBLAccelerometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A486169E0D6D95BE461814DD68D9500 /* MBLAccelerometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21066BA978CEC0B5298D95B5D40A1828 /* DFUFirmware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D9D6C530728DC18D1A2775D58338E76 /* DFUFirmware.swift */; }; - 2167766CB06CA4DC13E62687EB8CA1CC /* MBLBarometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EA4B888A2C3618023DA6440BA48FD6D /* MBLBarometerBME280.m */; }; - 21687508C74BCF72651DEC49E9707E2F /* MetaWearPrivate-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 56BF9B3D5859CBEA51D1EFF6538F58D4 /* MetaWearPrivate-iOS-dummy.m */; }; - 216A698CEB7E1CF25FAA87C7597AC578 /* MBLSPIData.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8E5506693A8AD4210AFC4F04630DB5 /* MBLSPIData.m */; }; - 21AC2BDFBA8EFA5303DC19122EFF83C1 /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2FDEE37CF41DE80256A00DFCF4163C /* MBLHygrometerBME280PeriodicHumidityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21D069A34CE504D64F7DFD0792C0E72D /* MBLI2C.h in Headers */ = {isa = PBXBuildFile; fileRef = F618C9DF00DDF47D5EEEAAFDFC613948 /* MBLI2C.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21EBD8F91205F2E1C28F1904E9C52299 /* MBLMacro.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D144E6E435DBDDDD0D91240069800D3 /* MBLMacro.m */; }; - 21EEADA1E1F78C3246FAA830A0D9E14E /* MBLGyro.h in Headers */ = {isa = PBXBuildFile; fileRef = 4602EBBBCBFC4B0BDD1112C6F156FAC2 /* MBLGyro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 21F1BA15E385E0C4D11300AABD8F7E45 /* MBLAccelerometerPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 568C305A82820552CFE0C4605EBA0459 /* MBLAccelerometerPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2248DF9B1D989A770F3218DD434EDA57 /* MBLGravityFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 632E08C3C1F3C2B3600407429F114413 /* MBLGravityFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 229805FABF8921235249952699929F78 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 5B916B04CDA309B8322D3494A89A559E /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 22A287A2A3F970296063735E3347462C /* MBLLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD8C04DD86664C2713B747FE190C751 /* MBLLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 231005264C330ADF0EB2F6A25ADDB710 /* MBLBarometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = C5038CCCAD9C3B1597C329422A04A10F /* MBLBarometerBosch.m */; }; - 23655434C50F9F105B93AEA10066FFAF /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D21B9BC43910E2ED423AABB150A5815 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */; }; - 23B359CF89FBE74517006A68C4745A86 /* MBLGyroBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 342B40755E2FFB37E7739C0F867B357B /* MBLGyroBMI160.m */; }; - 2404D14D2F246A434EE0C1A5B84D6DDE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */; }; - 244864B8B34E1D2D9145D844B34EDCB8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF73187F3F6E0F4E6FC6E5710081DBA4 /* Foundation.framework */; }; - 24617B2B1A5439D6D035FC2D16EB7E65 /* MBLAccelerometerAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D97DC608F174F938F952EB74C98E824 /* MBLAccelerometerAxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2476A7983704E02BA968CCA713214D22 /* MBLMagnetometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = D015AFF3E32DB592E65FF30976F85E80 /* MBLMagnetometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 24805C1302D51C481D9CEE207D3371BF /* MBLAccelerometerBMI160MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB89E36AEE3848001C95666AAB53B64 /* MBLAccelerometerBMI160MotionEvent.m */; }; - 248857308EE11039B7069E4A7186F103 /* MBLAccelerometerMMA8452QFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9447C9E2EE7B1F292D335549BCE3E09E /* MBLAccelerometerMMA8452QFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 249456F0F9D20E7472D56F7BB08D346A /* MBLLED.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0D8515949C9861487F28B146EEA3C0 /* MBLLED.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 24F8555214BB47ABA040C765CEBF9F52 /* ButtonlessDFU.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3A1010153F1DDFAD7D18AAAB73FE5EF /* ButtonlessDFU.swift */; }; - 250D1C1DDC61FDD79BE73C3944A24FB1 /* MBLANCSEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = 510DD17398465B0992EB321F5ADC3AE1 /* MBLANCSEventData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 25438E9EE2B4EDC394BB5DBAFD50B679 /* FastCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 868950A0C4FCD94559DEF6B5FBF4AAEB /* FastCoder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 254CCE6F46947D196F937F326C3B132D /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = A9567FF1928DF11AEA825E0A436250C7 /* Bolts.m */; }; - 25F62F8178A201B00363B21C98DAC2AB /* MBLBluetoothCentralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 32E5E18A48C5398D932D406B8D506A1F /* MBLBluetoothCentralMock.m */; }; - 261525530404D580B222F3ED2D2FB167 /* MBLConductance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C2075920A7BE1CF684C76F2F799ECBD /* MBLConductance.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2737331D77F5C90731409E9B1C13B642 /* MBLProximity+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 49DCC21B1CC2D91B3B63A59EB7E2B099 /* MBLProximity+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 276617FF9447B853F283E5E3F7AAF894 /* MBLAccelerometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C1EDCB210888571A4674E8E85C415DAC /* MBLAccelerometerBosch+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 27A50FE0994708EAE5A8B06A72C9A4D8 /* MBLAccelerometerBoschOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F20F10D01757768F6504900F09E5B5 /* MBLAccelerometerBoschOrientationEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 27BE5572CC2B6E841CA0283B5A3A2FA4 /* MBLTriggeredRead.h in Headers */ = {isa = PBXBuildFile; fileRef = 80522ABAB30A84102A4A1F9F6171D7F8 /* MBLTriggeredRead.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 27D6D0D205B6D2E13E1D3C4E7E016DDA /* iOSDFULibrary-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B6E223E489B7EAE8996BDDE53C67E45F /* iOSDFULibrary-macOS-dummy.m */; }; - 28132611E3E7DED4CA6B1E9F18B89FD8 /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE796D43C89FDC00CA2F72795FB07D9D /* Zip.framework */; }; - 283CE05CDBBFD853ADC82810E11A1101 /* MBLAccelerometerBMA255MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BB70CAC175503B0836D3D7EF3C1AE8 /* MBLAccelerometerBMA255MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2871826B8A412983A2B99E09B0AC587E /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AA7C4FBEBD67275B31A22D418F5BAFF /* ZipUtilities.swift */; }; - 289B683B68CD8EEDD13F7A5E2AC3E466 /* MBLDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B90E3A5C2959459174C720292B111ACD /* MBLDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29408C09F08ECC7C4FA6CBAA842A3A2D /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DEDDD7C2FAFC76A2A87E225422005C5 /* BFExecutor.m */; }; - 295059F84F2D08CE19FCE2885255BBC0 /* MBLGyroBMI160Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AA750E66901ECE028D826B3D8DA9552 /* MBLGyroBMI160Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 297861152CF3D84CE92DAC49186E7D99 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D04BC1738D891A89974B9F55A4A084C /* MBLAccelerometerBMA255MotionEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 299DB432DC1B24388C1A604313210BC5 /* MBLGyroBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = 876E22D020687C840F45B60CBE75C97A /* MBLGyroBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29BFBDA37A895188A982B694020E67BE /* MBLBluetoothCentralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 32E5E18A48C5398D932D406B8D506A1F /* MBLBluetoothCentralMock.m */; }; - 2A1E0D3315E492726B6EEA09BDAE7AFF /* MBLSerial+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D382C7ED86B3A4044E9BC7FE7B808E0C /* MBLSerial+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A3BB6DA5B49890C98A2DA84B2A70DEF /* MBLMovingAverage.h in Headers */ = {isa = PBXBuildFile; fileRef = 79D6876CB5FB9E0B295970DD856F7D37 /* MBLMovingAverage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2AAB37268EDAD801FE49EDA4AB30A4A3 /* MBLAccelerometerBoschFlatData.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D59E1FEA99D19C2D5F3179B85FAE8 /* MBLAccelerometerBoschFlatData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2ABB9CF1327FF579D838739204244CB6 /* MBLAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 31C2F98E33F89A641DBCE8A3F3C9D81F /* MBLAccelerometer.m */; }; - 2AF17D3A589EDBF268898D937B9B39E2 /* MBLAccelerometerBoschOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE5B9B41483C36E8C622F930C9310BB /* MBLAccelerometerBoschOrientationEvent.m */; }; - 2AF74970CA44795EDE79D80CBFF7A6C2 /* MBLNonVolatileState.h in Headers */ = {isa = PBXBuildFile; fileRef = B61904FA69F262DCB1BBB472F3910237 /* MBLNonVolatileState.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B2BAA31F98A784F40610CF9F680FDCB /* MBLTimerEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CECA256893645F935B5C13A5CBBED84 /* MBLTimerEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B57FBC1AC201EDF8176AD9F7A9FED89 /* MBLEulerAngleData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ADE0C1303FA4B9E8EA06EAB9FBA1986 /* MBLEulerAngleData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2BA909ACDC6029FBEE0CD1B9C5283FCF /* MBLLoggingV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 2712F6503B63708AD7766394B4BFAB8B /* MBLLoggingV1.m */; }; - 2BD9FAA853719523852DC93963109292 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */; }; - 2C56272A727044FD450C44B4CFD6E31D /* MBLDeviceLookup.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F35860B6ADC7900C6DAFDBEB2B0EDDA /* MBLDeviceLookup.m */; }; - 2D13206CBA015B83228992898F301F98 /* MBLRGBData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 54781085AAAF8C81138D0EABE060B960 /* MBLRGBData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D6024136109CFEC51B690606B41D2A0 /* MBLEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 78621B24EBE86A94377658DA1B69BA7E /* MBLEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D76A1221232FC1C13752505482001C8 /* MBLAccelerometerMMA8452QFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9447C9E2EE7B1F292D335549BCE3E09E /* MBLAccelerometerMMA8452QFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D786E9E294F18EBFB7E926CA452A32A /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 30C55F887936A2253979D9148E618465 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2DF3B595B35C21809E216F8A5BD5C3EF /* MBLConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 684ACAB6B74CA94DDD2CBE56FD8D20B5 /* MBLConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E06591277088423EB01CD803F82820A /* MBLModuleInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F874621735C718745BB4247927DBB372 /* MBLModuleInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E11CDDB9458D1002B5AE914AB6F7504 /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F12B911756D24E4437801B5DC7B003EC /* MBLAccelerometerBoschPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2ED9394B0EF117357E73E4428564C571 /* MBLFirmwareUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FB44E2B89CF240B81C4538959705A14 /* MBLFirmwareUpdateManager.m */; }; - 2F5FDCCC683B47DCFBCFAD55132C873C /* MBLBarometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F6D3364746F3DED3DE07DF2BE018E314 /* MBLBarometerBosch+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2F8F8F81494C4DAA377E56F01DB26EA3 /* MBLSensorFusion.m in Sources */ = {isa = PBXBuildFile; fileRef = F611D503A35A2C29A17EFE78CFEA593D /* MBLSensorFusion.m */; }; - 300BEC4D01EC1ED2C6438002269557F4 /* MBLFirmwareUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F41F0F37DF9DF332219AE7B2AA6890 /* MBLFirmwareUpdateManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 301B448CE2DB68438B749B2D9299419C /* MBLConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 14EF7A0FCCB0842B76635115328356DD /* MBLConstants.m */; }; - 3038B5C601ACB4DB125544496CAD5EC8 /* MBLAccelerometerBMI160StepEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C00606375314EB5180797E7794603591 /* MBLAccelerometerBMI160StepEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 30AE7A867D997F1A18B44D048BDAA795 /* MBLFirmwareBuild.m in Sources */ = {isa = PBXBuildFile; fileRef = F1950DB31EFF9511CAAD020DE490A290 /* MBLFirmwareBuild.m */; }; - 30D372ECEC42530F63D4FC0B784F92E2 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09635D2337086E6408781D878687120E /* Data.swift */; }; - 30E28F33BE050951F318DC1C14103A32 /* MBLHapticBuzzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 06442DAAFF21721B0E2C64C15BC6F28E /* MBLHapticBuzzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3151AB37F606B27CA8E8105AD5E72D59 /* MBLStringData.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0992D5084797FE10F678A4D2FE31D2 /* MBLStringData.m */; }; - 32012E54E9EA31F14B1208053DCAC6E7 /* MBLConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 684ACAB6B74CA94DDD2CBE56FD8D20B5 /* MBLConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3203FE481FBCDF31CE4088B6B344DB08 /* MBLOrientationData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE1FB0DD41BD31701FDA36D7A577E33 /* MBLOrientationData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3228B5870F2984AD74D67847C80F8489 /* MBLQuaternionData.h in Headers */ = {isa = PBXBuildFile; fileRef = BD464CA835615E18659BEB5C94E2000D /* MBLQuaternionData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 325670BA2946A78BB53CAEB457CB9B51 /* MBLBluetoothPeripheral.h in Headers */ = {isa = PBXBuildFile; fileRef = FE8969BAE4E23F3DFE16E1BD087E5A9D /* MBLBluetoothPeripheral.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3277D686CC7EF4998BED13D9642F5AD4 /* SecureDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 424A4930726684F45E9938539092257A /* SecureDFUServiceInitiator.swift */; }; - 3295CB5DD5B9647B9DFBD6825A8E2762 /* MBLSerial.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC3430CE59F55B7ECCD181718DED63F /* MBLSerial.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32BE2B3071281E702784EC6F4DBACDFB /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = C6DE6A5AC0A49A3E487037A11D03F9E0 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32D6492998D7C315581DF6DA9EFE1DE9 /* MBLAccelerometerDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C227AA6932602ED1E3B2AFC30A1D10 /* MBLAccelerometerDataReadyEvent.m */; }; - 32DD6340EF3C8520F8706E6953F2F7C5 /* MBLConductanceData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8683A0E500A656B29F04A8F167263386 /* MBLConductanceData.m */; }; - 33037EBC309103226127A3AE4D297FE8 /* FastCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB225B11C55D8185DACB2639597735A /* FastCoding.framework */; }; - 331B6E2C1515CAD5BE00565964D67707 /* MBLRGBData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 54781085AAAF8C81138D0EABE060B960 /* MBLRGBData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 33633CDDDCCE239DAAF319C38F64CCFD /* MBLLoggingV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 2712F6503B63708AD7766394B4BFAB8B /* MBLLoggingV1.m */; }; - 33F264326BB21B1CFF6FFA36ED465E7B /* MBLI2CData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C9D693443D18F04CD16EC8D21B3265B7 /* MBLI2CData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 341322EAA2D644525D42DC02ECD5BFC5 /* MBLHygrometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ACCF7CA22DE0EE99184FAFF40C4412D1 /* MBLHygrometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3446E8A12B7CA9FFCBFAA2A9D47835C4 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5DC3572BFE19B2936387A0FACF2149 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34725B88BA7E6A91B4D00AE6F862EA2B /* MBLSensorFusion.m in Sources */ = {isa = PBXBuildFile; fileRef = F611D503A35A2C29A17EFE78CFEA593D /* MBLSensorFusion.m */; }; - 34A0ABFCB6BB71C31DC2767EB332D519 /* MBLBarometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C9014BE27A2ABDE098632CD6B8F846F /* MBLBarometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34CFEDCDD205EB4A4858553BD1B3B475 /* MBLAccelerometerBoschFlatData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E467C7C82562087AC08D2E87E1D227E /* MBLAccelerometerBoschFlatData.m */; }; - 34E2618A02FE72E3877B20CEADE0ABF5 /* MBLAccelerometerMMA8452Q.m in Sources */ = {isa = PBXBuildFile; fileRef = 683A646CE59BF06ACE557B9DC63F37BD /* MBLAccelerometerMMA8452Q.m */; }; - 3505581238C34E15F79445D1CCB8B539 /* MBLProximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F5479EAA668064130D02812F59E306C /* MBLProximity.m */; }; - 35171965FE37195D75BCDD9A87040098 /* MBLAccelerometerBoschRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 988D40BB92611BCE21D54846268F245A /* MBLAccelerometerBoschRMSFormat.m */; }; - 35204A3B536478C24996F573A51DA433 /* MBLNeopixelStrand+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F452562548AA032277EDAF36A3C1F4EA /* MBLNeopixelStrand+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 354140987171CA6E324A1EAEBF83BF66 /* BFTask+MBLExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6A182159DB824EC701C4F5CECF3593 /* BFTask+MBLExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35467432BCBF7B98F325B38248F75EC6 /* MBLAccelerometerOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BC673AC71BD95CD9BF86FDD6371BE59 /* MBLAccelerometerOrientationEvent.m */; }; - 355A78C4B57FD0C9843139098B47550F /* MBLDispatchQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A51D4DCDE886B0384051CC90D92067B /* MBLDispatchQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 35648EE4738EC31BDC8233C38A070A4D /* MBLStringData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 30380F8CC34F2968DCC11BFA184B2CE8 /* MBLStringData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 358A49E154F5971143FEAB66FB5A8C12 /* BFTask+MBLExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6A182159DB824EC701C4F5CECF3593 /* BFTask+MBLExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 359CDFFF5DA0746C091CFCAAA3390920 /* MBLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9676FFAADD54AD787A3022BA543B95D /* MBLFilter.m */; }; - 35A46DF66F128E1CE84D978F06265C12 /* MBLMetaWearManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD17983083A051951D07F5F4B1A6301 /* MBLMetaWearManager.m */; }; - 35C3C6327A65448295F86F961C881675 /* DFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08850145862683CD96C0CD00D9C712D3 /* DFUExecutor.swift */; }; - 35D252364276E3EDD274739128F03D35 /* MBLRMSAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 52CC46DA65DB0259683868D5E443E82B /* MBLRMSAccelerometerData.m */; }; - 360F295B67DE2B9743E84A7C81DB9761 /* MBLAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C045425809353C9AC26BC4A22FCF39F /* MBLAnalytics.m */; }; - 3682C829A785BC1BBD85DF997D5A815E /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = B49F585CCFF6430654E83FD8277557F7 /* BFTask.m */; }; - 37BFFBA0FA63401569C68041C296B6DB /* MBLNonVolatileState.h in Headers */ = {isa = PBXBuildFile; fileRef = B61904FA69F262DCB1BBB472F3910237 /* MBLNonVolatileState.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37E17D45A7E99D6C8DC0243F84B8D64B /* MBLFirmwareBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D36A4050ABE4AE245A52AA00EB0277F /* MBLFirmwareBuild.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37E8CE41A0BF01FD782859DE00759072 /* MBLQuaternionData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C64D19BB3F9AEC401E0F2DF80FAD225 /* MBLQuaternionData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 37EF8D673127405DBCB8B18D5AA37CE7 /* Double.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1355EBD6FF6202F9F89D9888F4BC95EA /* Double.swift */; }; - 37F10ED71A7CC7800849F54C08882802 /* MBLDataProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8956DD984CD12941D9C8124A4C9C11 /* MBLDataProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 385FBC5E7C288602A2420EEAA8468F15 /* MBLConstants+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 728A14598DFA2E0ADAC364544A685C3C /* MBLConstants+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3866AB500837CC210CAC556A03C68897 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */; }; - 38815D9D7428EE3B14FDB82D664C23C8 /* MBLOnDieTemperature0.m in Sources */ = {isa = PBXBuildFile; fileRef = 041EC2A34089D29291A9815E11ACD8EC /* MBLOnDieTemperature0.m */; }; - 38E1FA12B5018FFE078B419A1D0D6657 /* MBLAccelerometerBoschRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA10E6994425E3176CC4206DFB8741C /* MBLAccelerometerBoschRMSFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3909DAE84EF5D73D9055A6440F8AB37A /* mma8452q.h in Headers */ = {isa = PBXBuildFile; fileRef = A2F0E57E1990CED91D153D6BCA97B4B8 /* mma8452q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 391423C22528199356B6937FE79AD088 /* MBLAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2807A744BD66EC2FC25F34F06ABD06A3 /* MBLAccelerometerData.m */; }; - 3923E278CAA277ADA86ED5FA8508A2F1 /* MBLDispatchQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A51D4DCDE886B0384051CC90D92067B /* MBLDispatchQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3928F38C9D6AE7FD63A97FFB96F6F127 /* SecureDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AFDC40CD0763752F8F369BB3B81D787 /* SecureDFUService.swift */; }; - 39AAA893F0F83B4CF8CFAD4AAB8F4A24 /* DFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF6C7C2B5B872E4AF65C6CF01BEBE459 /* DFUControlPoint.swift */; }; - 39BD3AEB623AE4D8429F671AB241E133 /* MBLLoggingV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FE8137EC2AD26C62D15D585531C0FA4 /* MBLLoggingV2.m */; }; - 39D73C2B2318C88A7E845799F0F71A86 /* MBLDataSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CB82133272E40D5FE88AAFEE0E3AA14 /* MBLDataSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39EB65EE97E31C8CABCCC2CDBA6B1A54 /* MBLStringData.h in Headers */ = {isa = PBXBuildFile; fileRef = 768A2B5331EA1D222EB6A73E262ED8E0 /* MBLStringData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39F61D91B784185929A10EEEE5631F61 /* FastCoding-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 34A642826D000F75A8AEFAEABBD9F854 /* FastCoding-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A5B4F903FC658A7B91CB2CBB3243097 /* MBLSerial.m in Sources */ = {isa = PBXBuildFile; fileRef = 04CBB3EAF42BB1BE4A3C1BCF71A83A84 /* MBLSerial.m */; }; - 3A9A1173F26434352A087A3AFD56063B /* MBLSettings+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EFC64ABBE5E34175B525CC0AF9B7AD46 /* MBLSettings+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3ACC1A4721E0420C37FE3A129551B71F /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = B170794DD226B26CAD7042834F2EE58A /* BFTaskCompletionSource.m */; }; - 3ACF2E9DC506EFA081284453AA10258D /* MBLGPIO+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C355EC8ACB217A38B8BEA29DB930D04 /* MBLGPIO+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3B1DC8B9646BFDF1A083D515E2B4B636 /* LegacyDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D78E38F964F3EDDA0C7B1B3EF2DA0E /* LegacyDFUExecutor.swift */; }; - 3B382B4ACBD4F454E3F00371E7DF82B4 /* LegacyDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C265937209DAD09BC393AA51F15236E /* LegacyDFUPeripheral.swift */; }; - 3B6B255369B60A9F7D90C461F93071F7 /* MBLDownloadOnlyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 61DA23203D750582CEBB4DDB7B099285 /* MBLDownloadOnlyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C1FCE915BDEDF53846D2A62C14ED4F8 /* MBLQuaternionData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C64D19BB3F9AEC401E0F2DF80FAD225 /* MBLQuaternionData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C305D2DD179F9313C76326D4C2930BA /* MBLBluetoothPeripheralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = D71F96F841281B595282C44BF5FF857F /* MBLBluetoothPeripheralMock.m */; }; - 3C32A01273D7135EBD313E1E777C79BD /* MBLAccelerometerBoschFlatFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FCA26FF093F156E325A7B83CC6F09F3 /* MBLAccelerometerBoschFlatFormat.m */; }; - 3C344344225E7F91931562969A7735C3 /* MBLExternalThermistor.m in Sources */ = {isa = PBXBuildFile; fileRef = EDA1A8E4F627CEA9CA9B633568C2F524 /* MBLExternalThermistor.m */; }; - 3C4D76F15572AE02D248A7E3B2E83210 /* MBLLoggingV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF7B457DCC8E360D49A842F6BB6699D /* MBLLoggingV2.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C6B681E2B2C6FA1CB58CCDCE1BAA920 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EF3DD06DCF465CB6B9BF1E1C048270 /* MBLGyroBMI160PackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3C738F7463EF0BDB185CBFC13270B5C9 /* MBLDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B90E3A5C2959459174C720292B111ACD /* MBLDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CB11C3C7542B507C4CB159B4AEFB9EE /* MBLPhotometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 315DE6DF9415ACA45A996357360A6099 /* MBLPhotometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CB6E44B235C276C288837E314D2670F /* MBLAccelerometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DF122BCA44DEBD8F20F96652F7A2EA94 /* MBLAccelerometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CC1E3D22D39B6BE61BCC18FFD164B04 /* MBLMagnetometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E4EE35E05B06402DE0951FDFC4AF4A9C /* MBLMagnetometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D44955717F59F973A912AE3458C121D /* MBLMacAddressFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE8BBAE5CCB97867FB931B9D024F2B /* MBLMacAddressFormat.m */; }; - 3D90D5563D21E9B943B581FF89C8DE17 /* MBLAccelerometerMMA8452Q.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D409E9AC30BA95DADFD8640807D6AC9 /* MBLAccelerometerMMA8452Q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D9EA9E17FCC9C40DB1D4622EF4B1135 /* MBLPhotometer.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D6598CDDBF33488FC69B5DFF58C57C /* MBLPhotometer.m */; }; - 3DA3B2ABE79A9F4D88784317891ADE24 /* MBLEulerFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E2876AE1BB6B2EC1B9E6DFFDB5C908 /* MBLEulerFormat.m */; }; - 3DA4AB0B88022723D8A4AECF07909FA4 /* MBLAccelerometerBoschFlatFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FCA26FF093F156E325A7B83CC6F09F3 /* MBLAccelerometerBoschFlatFormat.m */; }; - 3DCCB929EF3A458A8E52E988E290B7F4 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = A9567FF1928DF11AEA825E0A436250C7 /* Bolts.m */; }; - 3DD4F574B55FF68291E0D30DC402C2A1 /* MBLCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 269F0FBB246D90F6DFB2F2AD18A04252 /* MBLCategoryLoader.m */; }; - 3DDEEF612D0AC411650754D4BF6AF921 /* MBLEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FECFBC4F9F95E5A09CC21E2F8A80B38E /* MBLEvent.m */; }; - 3E5B6B44EF068328A1C9C89D304A143F /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 767039DE8BE4128CD2C1F16858847D69 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EA8EB2B48CBA070BD1830F422490231 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5771483BE42EC3D5F131B912DD7DF2 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EBA977E3213DAE23873F3AAC7D4FA65 /* MBLEulerAngleData.m in Sources */ = {isa = PBXBuildFile; fileRef = DE30062ABD960E8C08676300ACD20D29 /* MBLEulerAngleData.m */; }; - 3ED9040C3BEEBA0BB044481ADF88F30F /* MBLNumericData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C9247E893E625B829FE942FD1F6FF3 /* MBLNumericData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EE198D4E3A19667C413F0A3AE82D4A2 /* MBLEulerAngleData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ADE0C1303FA4B9E8EA06EAB9FBA1986 /* MBLEulerAngleData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EF7B7A47A819CE32190906DC31D05A8 /* MBLSPIData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A11D978BD98802C632FA253271B5EF2 /* MBLSPIData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F184ACBDEEEE2B18DBB72B9B6A3400A /* MBLDependentData.m in Sources */ = {isa = PBXBuildFile; fileRef = E83EF69901AB4A54B1F0F417FF13BF56 /* MBLDependentData.m */; }; - 3F391AA8DBEC23012DD7F395B9851176 /* MBLI2C.m in Sources */ = {isa = PBXBuildFile; fileRef = 108D19978FED2D6CCDA0F6BB617FF38A /* MBLI2C.m */; }; - 3F476A5BF8B4027D43964FE23AA93FD0 /* MBLNonVolatileState.m in Sources */ = {isa = PBXBuildFile; fileRef = A0DAFCFCA37D81B01944B09B50BD2EF8 /* MBLNonVolatileState.m */; }; - 3F51D8E53A829C3B58997C60717C7213 /* MBLAccelerometerBoschFlatData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E467C7C82562087AC08D2E87E1D227E /* MBLAccelerometerBoschFlatData.m */; }; - 3F62F9D0AF72A7FEE2B5499770D88474 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 63510854684E86EDFB5F03E8D52A35BD /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F698F627954585F9740F5F944E9BF45 /* MBLGyroData.h in Headers */ = {isa = PBXBuildFile; fileRef = C830F6C50185B585F4EB59E43DC8DD8F /* MBLGyroData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3F9530C621F26664FDDFB9DEA0448968 /* MBLGravityFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 84636ADEBFC31D02D2AA9BB00F220C37 /* MBLGravityFormat.m */; }; - 3FCD1809EF0B39DA112B5141E008E612 /* Bolts-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B3D32733DD3667BACBED5F51D5805DC /* Bolts-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3FE1D60563D69EC6A0878B4D19877336 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = DFD327E643DD1A34007F37CE8094CEE1 /* BFCancellationTokenRegistration.m */; }; - 4063ECFE8B092C0B0CDC9FA37EC54B5D /* MBLModuleMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EADF7AF343005056845D551D588501 /* MBLModuleMock.m */; }; - 407370941E5F275EA0C55268E4F0824C /* MBLEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 78621B24EBE86A94377658DA1B69BA7E /* MBLEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 408FE85F34A330E0F22B22C4F95442E0 /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DF8E3C12A71CB3E4174655FDA95A0093 /* MBLBarometerBoschPeriodicPressureEvent.m */; }; - 40A4B1F6E1E18B58B4C2C82F26C22E03 /* MBLGyroBMI160AxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 101622E47D549B802652C0917F0CC84D /* MBLGyroBMI160AxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40E19ACA6666634200C488DD5A2F589D /* MBLTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1836DBE60406D35990AF938F41D465F2 /* MBLTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 411E1B8FE70E4C6F3ADC024D26C1FECC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */; }; - 41620C071BD385E872D92566600BD803 /* MBLBarometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 55B5F56299B15AFD2D2404B34E225E67 /* MBLBarometer.m */; }; - 41827A5EAD41F4C71865044AA56EA656 /* MBLI2C.m in Sources */ = {isa = PBXBuildFile; fileRef = 108D19978FED2D6CCDA0F6BB617FF38A /* MBLI2C.m */; }; - 4187227654E36F23C878DF2DE8944025 /* MBLNeopixelStrand.h in Headers */ = {isa = PBXBuildFile; fileRef = E65129647907D6602565EDEA64B50EC5 /* MBLNeopixelStrand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41B24972028EAFCD6E48DCE04255D2FF /* MBLTemperature+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BF37B13956F515D176ED1150BBA2BF23 /* MBLTemperature+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41C14148AF2029CEC265B780984A8219 /* MBLMagnetometerBMM150Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D87C98E48F326672E237838FDE0B1F3 /* MBLMagnetometerBMM150Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41C99359D3C8AF0C3654762B8B65128C /* MBLMockPeripheralFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9582ADFE04E59FB00FC2EB1B9CDF781A /* MBLMockPeripheralFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4224BB35387E7B21EF95CC9DB35191BD /* Pods-MetaWearIntegrationTests-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 6F89ABEB7CA98ACDE9FFA0DED841DC6B /* Pods-MetaWearIntegrationTests-iOS-dummy.m */; }; - 422ED314D1CF8F458F5AB18BCA0D4989 /* MBLAccelerometerBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD999AF844115DA8A50A968030408C1 /* MBLAccelerometerBMI160+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 426A04E414354DBD1A53A2B08DF48AE7 /* DFUPeripheralSelectorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5591E2801FF88CEE1F9D45AC91B0D6D9 /* DFUPeripheralSelectorDelegate.swift */; }; - 42A56642ABE3D48C5CB1E55BDC780D1D /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 09132298C652A6E4AAC6E0D0A627FAB0 /* MBLBarometerBoschPeriodicAltitudeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 42BF43CA953519C0A9B21BAFD07C1BE1 /* MBLAccelerometerMMA8452Q+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5DE43A24BC32E8EE90C94105AF19F80 /* MBLAccelerometerMMA8452Q+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 42CD65E91A904CA525ACDEF008F93C89 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 45AB536C269B0B8B040B53A4DF58541F /* ioapi.c */; }; - 42DF40B3E5A5882928B71659BFA7BED0 /* MBLAccelerometerOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E1EAD5716B33481AA8D4749144206A /* MBLAccelerometerOrientationEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 42E2E77DF8F92ACF0B10C30FDB6CF5A3 /* MBLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9676FFAADD54AD787A3022BA543B95D /* MBLFilter.m */; }; - 432523F07DC86C182F1251F99124AF0C /* MBLAccelerometerPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 568C305A82820552CFE0C4605EBA0459 /* MBLAccelerometerPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4370CD0B95BEB03E99408A7638E2A19E /* MBLNeopixel.h in Headers */ = {isa = PBXBuildFile; fileRef = 683E023C19814107E458986DB3C80721 /* MBLNeopixel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 439A9E2CC277C41CA2168DB7D4CB1E67 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C23EE3F1FACF9A4C1ACF113B7106D470 /* MBLAccelerometerMMA8452QOrientationFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43BC817D78BF0BC575EBF4102875E2F0 /* MBLPhotometerTCS3472.h in Headers */ = {isa = PBXBuildFile; fileRef = 70692F88DC3B085CFA67F4801CC091A8 /* MBLPhotometerTCS3472.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 43C570E0B62FFD53F2B5FE888DFF9ED8 /* MBLiBeacon.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E0D65D220AC16FD37B5C370498E1556 /* MBLiBeacon.m */; }; - 43FE1F2998AFAB5A84204F673D5E96C3 /* MBLQuaternionFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = EB0F3127CA80D2F446D1A1CAAF111A24 /* MBLQuaternionFormat.m */; }; - 443FDC19DC630E09F6F60BEE4EA26E0A /* MBLDataSample+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D0FED9CA66384F76DECF70F875B7267B /* MBLDataSample+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4440C712DC28D1332E3DA7F41A1D07CF /* MBLAccelerometerOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 5BC673AC71BD95CD9BF86FDD6371BE59 /* MBLAccelerometerOrientationEvent.m */; }; - 445A30CAC813012D9510FFFB26786D17 /* MBLCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AB4B55BD141F864F663A2BE6B25969E0 /* MBLCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 44634A831ACE492B2E194F84AAF3929B /* MBLNeopixelStrand+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F452562548AA032277EDAF36A3C1F4EA /* MBLNeopixelStrand+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 44A1BDFBC564743E38C0B883B790C846 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8FD5C90587A6F6E2E3A0062618829499 /* unzip.c */; }; - 44BD2FF1764D9ACBE6042F81C910CED9 /* MBLStringData.h in Headers */ = {isa = PBXBuildFile; fileRef = 768A2B5331EA1D222EB6A73E262ED8E0 /* MBLStringData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45749417A514C569BC8F71F3FCECEEA6 /* MBLGPIOPinChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1D49F95D43D02E56017B6BC3737041 /* MBLGPIOPinChangeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 458FA2EE735136541A814530C6695140 /* MBLHygrometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AB376E87546F5C959DF1E7882959E6A /* MBLHygrometerBME280.m */; }; - 45A3E50B9F54E5E818979A9D4A967689 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8FD5C90587A6F6E2E3A0062618829499 /* unzip.c */; }; - 45E8F0066BD99162D73EB6F2322600BA /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BC22E4E093926AE2FD93BAFE2E5B2B /* MBLAccelerometerBoschLowOrHighGEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 45ECCB790E92F5C701F8373A6E4D3943 /* MBLNeopixel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EC059FAD710FE43BC68B1CE0F8D860A /* MBLNeopixel.m */; }; - 463045525D437F0877E2F8C7F7BF4F8F /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E4CFCB7B9A81296DDC19BE717B547395 /* MBLAccelerometerBMI160MotionEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 465AADBB25C335ABC60DC9D38D00277C /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE796D43C89FDC00CA2F72795FB07D9D /* Zip.framework */; }; - 4684D349B95A172D53207BE85001F5AE /* MBLLoggingV0.m in Sources */ = {isa = PBXBuildFile; fileRef = C44502A1C3E2BDFC2E9944376182C74D /* MBLLoggingV0.m */; }; - 468CA4F1FC4D1F9694979DF814616432 /* MBLGPIOPinChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1D49F95D43D02E56017B6BC3737041 /* MBLGPIOPinChangeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 46D5B99EE422E4F19B6630549BB14BC4 /* MBLMacAddressFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE8BBAE5CCB97867FB931B9D024F2B /* MBLMacAddressFormat.m */; }; - 46DB14F2C577B8EEA82FCE66BA5947BA /* MBLAccelerometerShakeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 781A18BA1418D9C811A289311EBFC8F9 /* MBLAccelerometerShakeEvent.m */; }; - 46FC70A31BB53ECA439980DE61D71581 /* IntelHex2BinConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = D7EAC0BC994FB7611A298DE937C3E8BF /* IntelHex2BinConverter.m */; }; - 471F5C746388F6EBA3ECF773C1A0C0FF /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E636B03D39B8D1267925102A2AFFAFC9 /* CoreData.framework */; }; - 47330067F40C836E2A104B55A10130AB /* MBLGyroData.h in Headers */ = {isa = PBXBuildFile; fileRef = C830F6C50185B585F4EB59E43DC8DD8F /* MBLGyroData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 476657FD7C8BDCF9977DB8539A990440 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C23EE3F1FACF9A4C1ACF113B7106D470 /* MBLAccelerometerMMA8452QOrientationFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47C16B28D6BA9EE4CE10F1971038EE0B /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 9951ED4CE84E530835A1BBE12C8A58BB /* MBLMagnetometerBMM150.m */; }; - 47C8B8DEC4F64C6041D91DFF5D4A0BFE /* MBLGPIOData.h in Headers */ = {isa = PBXBuildFile; fileRef = AE70D8C3F080CAE5CD2BD059325B35B0 /* MBLGPIOData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47DBBEC119589E8A8D89E67F4FBF2929 /* MBLAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9B5368DD40A1D0D01B94023D7EC72B /* MBLAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 47FC808B2E54B10D0BBE986EA71DB1B3 /* DFUController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10BF4E9DB1C681605A1E1DE7A7352D47 /* DFUController.swift */; }; - 4837343AA7944DFEC04E8BDCBF82F852 /* MBLAccelerometerBoschOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 05F20F10D01757768F6504900F09E5B5 /* MBLAccelerometerBoschOrientationEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4841A2394939D84CB51B85707A792E07 /* MBLTestDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BEBDF15B99A76AB465BBDA0C0529628 /* MBLTestDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4876F0A5D1AB45D29C22937D2A2695E3 /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DF8E3C12A71CB3E4174655FDA95A0093 /* MBLBarometerBoschPeriodicPressureEvent.m */; }; - 48D062702910356322EDE7530E217B8C /* MBLCorrectedFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE5F82F8AF57D1593408A9D6695260F /* MBLCorrectedFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 48ED7AA742934E5C9A04762A80894D5F /* MBLBarometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = C5038CCCAD9C3B1597C329422A04A10F /* MBLBarometerBosch.m */; }; - 48FCA58F05A74F5C09F7CFF8697FDCA9 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 42C630E413E950FD8E86077705094243 /* MBLAccelerometerMMA8452QOrientationFormat.m */; }; - 491066573656A6CA4B80D9BFBEF6A746 /* MBLMagnetometer.h in Headers */ = {isa = PBXBuildFile; fileRef = B3636860C28B508BB1F56D19BCC6574A /* MBLMagnetometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4914E6DE97D09933E5D33DAAA61FBDCF /* MBLMetaWear+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AAFD4E4609EAE8A3637DD8B1CBB0C77 /* MBLMetaWear+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4923DBB74F89A94B61430B84E71A0F9C /* MBLSensorFusion+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7055C022657B2629DA9C9F0AA2C463 /* MBLSensorFusion+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 493D6E322F169BB2EEBD055D6B7D22BC /* MBLBluetoothCentral.h in Headers */ = {isa = PBXBuildFile; fileRef = B1B786E36962E36D6B767C3324078E7D /* MBLBluetoothCentral.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 49508460B4FB2BCF55797A864440F14B /* MBLMetaWear.m in Sources */ = {isa = PBXBuildFile; fileRef = 4739499D51E870D85365C8346318C403 /* MBLMetaWear.m */; }; - 496D500D0A179729AE24C1FB53E1FD9B /* MBLI2CData.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D0C4AE392CD54EE51E540B5D17D335 /* MBLI2CData.m */; }; - 497BF38E3AF8F59838D1D0781EE94422 /* MBLTemperatureV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 13DC5F50967878257628BE72601421B3 /* MBLTemperatureV1.m */; }; - 49E9B3720D178088DFC80223782D0795 /* MBLGyroBMI160DataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CB01AD35839796CD59C88F332642A29 /* MBLGyroBMI160DataReadyEvent.m */; }; - 4A18CD9DBBF54F7805395A486D3F9B61 /* MBLAccelerometerBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F27D4B0C8EECC6EBF7D90305D31230 /* MBLAccelerometerBMI160.m */; }; - 4A544AA8B40C3569AB6916AF38D1AA90 /* MBLAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2807A744BD66EC2FC25F34F06ABD06A3 /* MBLAccelerometerData.m */; }; - 4AAE1AF55D86BB5A18BB1493324DCCB1 /* MBLGPIOPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F0E221620B947BDDB6ED38CF1DFC44C /* MBLGPIOPin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4AF4CDBDB8BD3C33E169E5FAF5090F50 /* MBLProximityTSL2671.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A04EC0A77D40BFA9A26340EBD99D8C /* MBLProximityTSL2671.m */; }; - 4B8A7066614A77C43434A90803C701E5 /* SoftdeviceBootloaderInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099E89D6E6F44D0B586225B775348D90 /* SoftdeviceBootloaderInfo.swift */; }; - 4B97249F7B9C19423E1F3084BADFFCFA /* MBLDataSample.m in Sources */ = {isa = PBXBuildFile; fileRef = 67AE1DA5CCAEC8045CA513254318D081 /* MBLDataSample.m */; }; - 4BD858AD72EEBCD99D1C7FAF30173929 /* MBLBarometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEE9DAF27B41AC971847EFB87011210 /* MBLBarometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4BDCEB07B922342D10BFA07A2BAB2D16 /* MBLMockUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B3A0F41A9C9F3D4A6BAEE5B16DA8E124 /* MBLMockUtils.m */; }; - 4BE06CE37FAC4FA638AC9053EED121EA /* MBLMovingAverage.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DFA861A03763BE92BA107951F76F0A0 /* MBLMovingAverage.m */; }; - 4C01B51DCDEB882AC5DBBBDE9C3CE005 /* BFTask+MBLPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = F9243C73A502B4C0654BF88F02CF9732 /* BFTask+MBLPrivate.m */; }; - 4CB47FBFAEE5704AEE54DBD8E9629A11 /* MBLMovingAverage.h in Headers */ = {isa = PBXBuildFile; fileRef = 79D6876CB5FB9E0B295970DD856F7D37 /* MBLMovingAverage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D36DEC6880FF309EC19BE96743C2DE6 /* MBLEulerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 85795CBE32C64342DEFEA3F17C5EF7C4 /* MBLEulerFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4D5C677E9C6F263ABE2D8363D6C7E8DF /* MBLMagnetometerBMM150Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C7487AB0B47CAD2A314F1EA2960160F /* MBLMagnetometerBMM150Format.m */; }; - 4D96E419C113B7325F0B3854C602D4B6 /* Pods-MetaWearIntegrationTests-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 807664938D5F50F865A9545BCD2FE1BA /* Pods-MetaWearIntegrationTests-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DC8F6FAD1E20AD073D91D8D52546A79 /* MBLBluetoothCentral.h in Headers */ = {isa = PBXBuildFile; fileRef = B1B786E36962E36D6B767C3324078E7D /* MBLBluetoothCentral.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DF4A41E58C17D5A0B37A0B34C4B77ED /* MBLiBeacon.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E0D65D220AC16FD37B5C370498E1556 /* MBLiBeacon.m */; }; - 4DFCADA87C2EB59701C98043CF52C328 /* MBLSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 26128295AA0938AD6329B2E3407ED0C8 /* MBLSettings.m */; }; - 4E0B24AE510E398DFA54F911FF43D486 /* MBLGPIOPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F1BC518C4E1FB3BC352030FB4FECD49 /* MBLGPIOPin.m */; }; - 4E10585FFDE73A5A32F26F74246BC412 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 466F4CBD1227EE55915A7031EC4B452F /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m */; }; - 4E25747D9E54DD5323B11FB1E294E4CA /* MBLTimer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 533D2377CF75F400D378A7FB2C5A8B80 /* MBLTimer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E428FC0899F74DA776F12C50BF8C255 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D21B9BC43910E2ED423AABB150A5815 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */; }; - 4E79C61CF30D954954EEFA22DF95196B /* MBLMetaWearManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CD80956417A14D56D8D27D71A192F8DA /* MBLMetaWearManager+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E7B502118272090A8700CBB4B6DAD70 /* MBLMagnetometerBMM150+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DEE68012FEE0F602A240B3ECA976F27 /* MBLMagnetometerBMM150+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4E83D82F7CCAAF6A6E02A5E8B4FEEAC3 /* MBLOrientationData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7486D6C559F423D347EF546001BF1A71 /* MBLOrientationData.m */; }; - 4F333B2510362DA70B4025A391B3523F /* MBLBitmaskEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E16579A392E68FDA1887AE338EF23A3A /* MBLBitmaskEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4F3E5F13CF0C865BB45BF1133D526216 /* MBLMockUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 66BD7978E06A8765D037FC38B585C13E /* MBLMockUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4FA5913D498543A16F5D752B50E198DF /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */; }; - 4FA6401BFE1D576FD5637639F4EFE4CB /* MBLTimer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 533D2377CF75F400D378A7FB2C5A8B80 /* MBLTimer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 502B2795643D22D7E7CE9C56A5F9D656 /* MBLConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = 259124F1E7A1A8378E3FAC98644EE69A /* MBLConversion.m */; }; - 50E3843DAF3DC8DA1F85FA2954E5F892 /* MBLLED.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0D8515949C9861487F28B146EEA3C0 /* MBLLED.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 511095590DF1931FD73FC9D4B9C21B8A /* LoggerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B73BFFFDB3046740A4D7A599A06F846 /* LoggerHelper.swift */; }; - 511FABA386AA9BC13AD30A9BF737C0FE /* MBLANCS.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CC808F2321E7A48AAF53E821EB9FE8C /* MBLANCS.m */; }; - 512FAF2AC6358B6B02DBD6244DD44D95 /* MBLTemperature.h in Headers */ = {isa = PBXBuildFile; fileRef = B4C74EF9EB41D6A6C9BFF4EF7F64F663 /* MBLTemperature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51B35CE0F9F722A5B62D571551B35C8C /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E4CFCB7B9A81296DDC19BE717B547395 /* MBLAccelerometerBMI160MotionEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52443BC6AEA8A70CF41377B28314CA87 /* MBLGPIOData.h in Headers */ = {isa = PBXBuildFile; fileRef = AE70D8C3F080CAE5CD2BD059325B35B0 /* MBLGPIOData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52773DCA224EFFE58738D9FAD0AC08BB /* MBLOrientationData.h in Headers */ = {isa = PBXBuildFile; fileRef = 297339BB993DE15AD32362BF537FCF93 /* MBLOrientationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 529AB1D79AC838B98665EC2427CE9FB5 /* MBLStringData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 30380F8CC34F2968DCC11BFA184B2CE8 /* MBLStringData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 52D7A86E4480DFCCB37620CD31AAD85B /* MBLAccelerometerMMA8452QFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = BBA69F3B3472ABC188162666FEA7E552 /* MBLAccelerometerMMA8452QFormat.m */; }; - 530804B6BDF76B2E5714B21F37782B83 /* MBLDataProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B34BF91775BD5B5F16563879AAE89DE /* MBLDataProcessor.m */; }; - 5332AD78E25057431A8DCC8500F25C52 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D04BC1738D891A89974B9F55A4A084C /* MBLAccelerometerBMA255MotionEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5344364A953BD76D567B5983AB1F4D9E /* MBLAccelerometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 11DD487EEB31D0A2E1939F4FC9874AE8 /* MBLAccelerometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5365D530008115AAF9C20AE2394C32CF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */; }; - 53800C465F6CDEA6B5BCEB9958151E2F /* MBLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = E33E51117A7906AD725BC5896DAF7AB9 /* MBLLogger.m */; }; - 541B07F48697A09890F46D343056532A /* DFUPeripheralSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32DE87BDF106FEBCFABBF465A01773EE /* DFUPeripheralSelector.swift */; }; - 5444800DF0C956F4F432F20860297563 /* Zip-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = C4D3E8D3552BF4D21F94B06673BDD0F3 /* Zip-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5466835F96ACCB738F4799F906FEC98F /* FastCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 868950A0C4FCD94559DEF6B5FBF4AAEB /* FastCoder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 54C97A3025C63FC5C07250289B54662D /* MBLAmbientLight.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CA104EEA8E4AEA2C3540CC3CE284922 /* MBLAmbientLight.m */; }; - 54CCE8419E0CE08308E1EDB9D739C5E1 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A24E34E7C4C5E621D62C5156E3F752 /* MBLAccelerometerBoschFlatEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 550CFC2F0BE92B4D6CEC021693C7A8D1 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 63510854684E86EDFB5F03E8D52A35BD /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 55213E21B9D50110ECFEC08A97C0DF81 /* MBLOrientationData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7486D6C559F423D347EF546001BF1A71 /* MBLOrientationData.m */; }; - 558F836E1A1B61D8CF4DC2FEFEFB869A /* MBLAccelerometerAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D97DC608F174F938F952EB74C98E824 /* MBLAccelerometerAxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 55B9DF414CE8B0E290B73BDF6DB2C0A9 /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F3A760FF1FEA0F393837CFA254115DA /* Bolts.framework */; }; - 55E233C769CAA964A40E3968B0808074 /* MBLSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 92516A30E70293A900BBF8AB90EB0500 /* MBLSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5610CB8EEA802AC636F77F245599761E /* MBLHapticBuzzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 06442DAAFF21721B0E2C64C15BC6F28E /* MBLHapticBuzzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 563AACA761BA9910780CC56C7F192FD4 /* FastCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = 868950A0C4FCD94559DEF6B5FBF4AAEB /* FastCoder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 56418FB54A7A9BBF663C6EAA71F58609 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */; }; - 565F2215E2745C6D03B01484DF65D395 /* MBLFirmwareBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D36A4050ABE4AE245A52AA00EB0277F /* MBLFirmwareBuild.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 56D6E537FEA6CB1E056AC63454AC02D0 /* MBLAccelerometerBoschOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE5B9B41483C36E8C622F930C9310BB /* MBLAccelerometerBoschOrientationEvent.m */; }; - 5725EC4F4E138A5C3BF815D9A08BB227 /* MBLConductance.m in Sources */ = {isa = PBXBuildFile; fileRef = 66B6BA83C3C4F23C8DBF08F46B6DEDF9 /* MBLConductance.m */; }; - 575EA37A4962A6DFF7609BDBD34B51F7 /* MBLSettings+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EFC64ABBE5E34175B525CC0AF9B7AD46 /* MBLSettings+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57C11BE620A7FD244399C8B37512E9E3 /* MBLNeopixelStrand.m in Sources */ = {isa = PBXBuildFile; fileRef = AE1010EE66D1FDA5F86AD0D8493B7D87 /* MBLNeopixelStrand.m */; }; - 57CBDB0B040F65271A051B8ACBAD91DD /* MBLMagnetometer.h in Headers */ = {isa = PBXBuildFile; fileRef = B3636860C28B508BB1F56D19BCC6574A /* MBLMagnetometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 57CC8EE19034A3A572764B1021505B85 /* MBLBitmaskEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 44178045C194F6874F39F04A97D1FEF7 /* MBLBitmaskEvent.m */; }; - 57DBB042C0B120C5D38CEA3B27E2EA22 /* MBLSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 92516A30E70293A900BBF8AB90EB0500 /* MBLSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5802006569428525920CA8DD80677C83 /* MBLTriggeredRead.h in Headers */ = {isa = PBXBuildFile; fileRef = 80522ABAB30A84102A4A1F9F6171D7F8 /* MBLTriggeredRead.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 580C1F6942D95724B25854C54D6967BF /* MBLCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 77004055E8B046B2F94C36501CA986B0 /* MBLCategoryLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5839838A93E2880F635156923BF5B05E /* MBLAccelerometerBoschFlatData.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D59E1FEA99D19C2D5F3179B85FAE8 /* MBLAccelerometerBoschFlatData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5842DFE5FFEA5939BA59A8DA5D3B699A /* MBLCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 269F0FBB246D90F6DFB2F2AD18A04252 /* MBLCategoryLoader.m */; }; - 584604A6BAD050EFE572F411764D4E41 /* MBLTemperatureV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 13DC5F50967878257628BE72601421B3 /* MBLTemperatureV1.m */; }; - 585858B0C87310D782BD50A9CA7660B2 /* DFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60072837B568D0B289C73D735FBE994A /* DFUPeripheralDelegate.swift */; }; - 58686C419A863C8BBBC1FE223826C8D5 /* Manifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6132FA286854C673503A7644B14E6C43 /* Manifest.swift */; }; - 58741CC862117C93BB81C999DC806239 /* MBLFilter+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AA829F30CBE3BF2C3B818F7939EB917B /* MBLFilter+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58815845DFC3716764B42DABE20AC105 /* MBLBarometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5FEE9DAF27B41AC971847EFB87011210 /* MBLBarometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58CD8405BBFBFD132DA52E092459D021 /* MBLRMSAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89508313CD903B64125F4A956E656897 /* MBLRMSAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 58CE763D472BF41451442CEEC7641230 /* MBLANCSEventData.m in Sources */ = {isa = PBXBuildFile; fileRef = 78A46EE93080D885BFF6F8471DA8A012 /* MBLANCSEventData.m */; }; - 58DBD04F0055F59EA7C30B0E86BFF547 /* MBLGyroBMI160DataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CB01AD35839796CD59C88F332642A29 /* MBLGyroBMI160DataReadyEvent.m */; }; - 5912B57541DFA685C0161A66C5A90FBC /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 984CCC87F279AA94306E80AA33255F86 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 592391D31238DDF1C1CB995717D5C52C /* MBLAccelerometerBMI160MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 082B67135724324C65933732754CC49D /* MBLAccelerometerBMI160MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 596E42A9A145D515CBADE87977622CB5 /* MBLConductance.m in Sources */ = {isa = PBXBuildFile; fileRef = 66B6BA83C3C4F23C8DBF08F46B6DEDF9 /* MBLConductance.m */; }; - 59AA4B6E8240240FE0CA4CE3654C5090 /* crc32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B13B87AB35725CA9A0FE740B4294A70 /* crc32.swift */; }; - 59B87AEAABB25A8B975F2B6CBE799AD8 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D21B9BC43910E2ED423AABB150A5815 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */; }; - 59EA2F226EFF94ED20099F759B7F81E8 /* MBLEntityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A498490BEAA8E5C25A3B8A636D898BA /* MBLEntityEvent.m */; }; - 5A4AE79F23C5E4A08F5EA4A06EF26ABC /* MBLGyroData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C76EB125E555C3CEEAECE10EB48F4C5 /* MBLGyroData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A5C7D8EACBB3DA34175E03FE5742D7E /* MBLDataSample.h in Headers */ = {isa = PBXBuildFile; fileRef = E122F691BE8C2320CFFA602948F9C652 /* MBLDataSample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A82AFB9CA79602DCCDC61DE324BBA24 /* MBLTemperature.h in Headers */ = {isa = PBXBuildFile; fileRef = B4C74EF9EB41D6A6C9BFF4EF7F64F663 /* MBLTemperature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5AC990C4E5FAD4DB522DF9BEBD2473C8 /* SecureDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC9E4509349DDAC2824D4440B9875E /* SecureDFUPeripheralDelegate.swift */; }; - 5AE31BA40B2C7541A11D817110CD90FA /* MBLModuleInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E67CA86BA4A4BD60EEBB7E3325B212 /* MBLModuleInfo.m */; }; - 5B03D69153457159D62D184A936E08AF /* MBLGyroBMI160Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 611E0828D1D423282BC36D41D8659761 /* MBLGyroBMI160Format.m */; }; - 5B26278E4C33DA300DCA4AE70B95063A /* FastCoding-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C0EFF565875ED8594A6CA0453C6B76FF /* FastCoding-macOS-dummy.m */; }; - 5B72266A2871D0406B48C1EEBF9A7E32 /* FastCoding-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F82E3B681C52C4896CAF8BD58F4FE3E /* FastCoding-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B7F141179BC92F21556FAFD827E0C81 /* MBLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = E927F7FE18500C742246D5144E4869AD /* MBLConversion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B9B64CFF2D3D2C1015F7E0D91FA4670 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 125C400C3639412117CC73ADC6B68B26 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m */; }; - 5BA14C990FBECA5929BDC7B694B4E43D /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = A9567FF1928DF11AEA825E0A436250C7 /* Bolts.m */; }; - 5BCE35191B656F94155C35BF61862775 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 763090C3CF598BCAF7A406BCC657053B /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5C2D140343DD5C5FEE6243E1EE90D45A /* MBLRMSAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89508313CD903B64125F4A956E656897 /* MBLRMSAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CE727E79E5F55A3604720D884E0E5DD /* MBLMacAddressFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = D7CEF79F64A30505A4E517BC428854FA /* MBLMacAddressFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5D34FB1C1C2FC7DDE285A3F7298C5ECE /* MBLMagnetometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF938D304C25C4D90A26EE7E13BFE15 /* MBLMagnetometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DCC43EA26B765E9F5D45AD4FA810609 /* MBLAmbientLight+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6712272425BFA706A80ED17C721D2468 /* MBLAmbientLight+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DF03A51B7B21C0CBF80ECD686DF2244 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 147815D574238CF6873A9031B245D10E /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 5E0E91B6058775A657CEC3ABCDC0ED8C /* MBLMagnetometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2B309AECBFE6D4E1FAC166D236C338 /* MBLMagnetometerData.m */; }; - 5E1D2B966E5BC552324FE676AED5BBE6 /* MBLDeviceLookup.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1EDADCFE8155984972FD1A2B4CFD4F /* MBLDeviceLookup.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E437BE89B382A3406D06BABB66806E6 /* MBLMagnetometer.h in Headers */ = {isa = PBXBuildFile; fileRef = B3636860C28B508BB1F56D19BCC6574A /* MBLMagnetometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5ED5AE88E4A0917B39CC0EE9A4BE4CB9 /* MBLMacAddressFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = D7CEF79F64A30505A4E517BC428854FA /* MBLMacAddressFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5F01769F183332681000E7FAFE502C69 /* MBLiBeacon.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E0D65D220AC16FD37B5C370498E1556 /* MBLiBeacon.m */; }; - 5FA3B931780D76D189A85424B602DF61 /* MBLGyro.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A3C94A2D4474A8DC16FF570AEE192F7 /* MBLGyro.m */; }; - 600974FC7156164850CD59272F2EE9CA /* MBLEntityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFAD1F294B51CDE156111410C25AD9E /* MBLEntityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6016702C9F9C35AEEEF3E260BFC6BCF2 /* MBLNeopixel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B96BB66E32A76C37714BD32108877E8 /* MBLNeopixel+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6034F2B5AFE2214155CC1E20FA7D89D8 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = AF442C42590A7C1759F86A2C54EE7027 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 605F108436F036023D1EC7DC7B27E4D4 /* MBLQuaternionData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C64D19BB3F9AEC401E0F2DF80FAD225 /* MBLQuaternionData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6083387D83C6533A2C348AD1897664C9 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09635D2337086E6408781D878687120E /* Data.swift */; }; - 6084AD6C166F4B71E908E4BA3B70D548 /* MBLTimerEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CECA256893645F935B5C13A5CBBED84 /* MBLTimerEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60AD2288AB79011F18C35D0DBB9852D6 /* MBLLoggingV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D6CB41C23090423F8ED51F5A3FB6572 /* MBLLoggingV0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60D854E867B80E9AFA441D795B0B8CA7 /* MBLFilter+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AA829F30CBE3BF2C3B818F7939EB917B /* MBLFilter+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61035AD11FBDE2555E95109C306B8D81 /* MBLAccelerometerDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 67C2F6BF2281EB44559A63F5ED570D37 /* MBLAccelerometerDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 614F7708585FFF0832C688D811D0D7CE /* MBLPhotometerTCS3472.h in Headers */ = {isa = PBXBuildFile; fileRef = 70692F88DC3B085CFA67F4801CC091A8 /* MBLPhotometerTCS3472.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6161CCFEB0EF5CAE13EE33BED12D0D6E /* MBLAccelerometerBMA255.m in Sources */ = {isa = PBXBuildFile; fileRef = 60078A5252316CA448069CA15B7675C3 /* MBLAccelerometerBMA255.m */; }; - 619AC5402628D47BA4B4EE810F9F4E1E /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = AF442C42590A7C1759F86A2C54EE7027 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61FBDA686B2674236F00C55054CD322B /* BFTask+Exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E178F0FC9498EFBD62A485883B8232F /* BFTask+Exceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61FD0F9E6332285767FDCC71ACC042FD /* MBLDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 429D35B0DC4CBE2F675FD0E381BBA5A4 /* MBLDeviceInfo.m */; }; - 632F453B57DC5156F9144C1D2C37ED29 /* MBLBitmaskEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 44178045C194F6874F39F04A97D1FEF7 /* MBLBitmaskEvent.m */; }; - 63361295ACF50647FD7EAF141A003EF5 /* MetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 09A2B8795827FF822C2667CBDAE25456 /* MetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 633C4AC3A52F589EB6ABD614D7E51BFD /* MBLBarometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 55B5F56299B15AFD2D2404B34E225E67 /* MBLBarometer.m */; }; - 6351840A4032DBA7A630BEF36623A5E4 /* MBLGPIOPin+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 866AB71DEA1B2D0ACB8F328AD343EF8C /* MBLGPIOPin+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 635B4E2C958C2AAA078DE0FD5A406BF2 /* MBLDataSample+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D0FED9CA66384F76DECF70F875B7267B /* MBLDataSample+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 636FF53E16F624F32D507239D1E2EB4F /* MBLLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD8C04DD86664C2713B747FE190C751 /* MBLLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 637996777DE2D8D921DFBD1211B58FC1 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = B49F585CCFF6430654E83FD8277557F7 /* BFTask.m */; }; - 63EB43E998517245F3584EAF3D9F3D71 /* MBLConstants+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 728A14598DFA2E0ADAC364544A685C3C /* MBLConstants+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 644617EA2D72961B6BA2CB516F79392B /* MBLTemperatureV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E22D2D8EB43615D73111F496F74BD7F /* MBLTemperatureV0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 644E35C7A6166A5CBDB2089E4BEE23CB /* MBLAccelerometerBMA255.m in Sources */ = {isa = PBXBuildFile; fileRef = 60078A5252316CA448069CA15B7675C3 /* MBLAccelerometerBMA255.m */; }; - 647F5A8E393821B58E62C863985C0B80 /* MBLAccelerometerBoschFlatFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 32E8CABE3E44CDFE2329BE40AAC4FFB6 /* MBLAccelerometerBoschFlatFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 649780B6A40E67CEC06542608071DB97 /* MBLAccelerometerBoschTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F37BD6E8C1B5B209223A4403C6820B /* MBLAccelerometerBoschTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 650965B06B701AC676FFB31E93D57DFA /* MBLAccelerometerBoschOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AA27DD31D148E7D4FE4B088798FD73F /* MBLAccelerometerBoschOrientationFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6532167C4BC760E2FFA178A7F2F844F6 /* MBLAmbientLight+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6712272425BFA706A80ED17C721D2468 /* MBLAmbientLight+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6533E0A99FDE81DD1B6748011075A6DC /* MBLLED.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A41ECB56B5DFC8D755819D80040E78 /* MBLLED.m */; }; - 653A1DA9D3589527059196E672457E39 /* MBLBluetoothCentralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = B661370B50F2E66A283AEFD0060A25D5 /* MBLBluetoothCentralMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 655BFC88528E2E667F9ADC279064D110 /* mma8452q.h in Headers */ = {isa = PBXBuildFile; fileRef = A2F0E57E1990CED91D153D6BCA97B4B8 /* mma8452q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 658CF0C3B3A9FA60392C2CEFC025E4D6 /* MBLNeopixel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B96BB66E32A76C37714BD32108877E8 /* MBLNeopixel+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 65BEC9F9B5941683E2072582933300FC /* MBLFirmwareUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F41F0F37DF9DF332219AE7B2AA6890 /* MBLFirmwareUpdateManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66660A2B602CC552E7F0E47458142814 /* MBLExternalThermistor.m in Sources */ = {isa = PBXBuildFile; fileRef = EDA1A8E4F627CEA9CA9B633568C2F524 /* MBLExternalThermistor.m */; }; - 66B6CD3B5D5401756BC548584ED6DDC9 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 455CD07BA2C9B12A7455F13B169B7133 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - 66C7FED6F15DF4C78C21FACE24DA0947 /* MBLQuaternionFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0861EF75CEE3811500BBCE28BDAB4BBD /* MBLQuaternionFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6701284D5C0B47457965778DB5625E7D /* BFTask+MBLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD0265FC80A962B97D528D2D555EE96 /* BFTask+MBLPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 671E5CA52E8A3627447FC70AF8DCFA7B /* MBLRGBData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FEFC752FCC73CDD4669A2B67A313F16 /* MBLRGBData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6722A06F5DC3CAF3D6DD69A2F61F1F77 /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1D3BBE2E126BC29F81415209EF8F1A /* BFTask+Exceptions.m */; }; - 6787D5713BCEF6B6E108A7E851FDD632 /* MBLStringData.h in Headers */ = {isa = PBXBuildFile; fileRef = 768A2B5331EA1D222EB6A73E262ED8E0 /* MBLStringData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 67C1F884E9A0B47171EF55A7DC1A3D78 /* MBLMagnetometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2B309AECBFE6D4E1FAC166D236C338 /* MBLMagnetometerData.m */; }; - 67EA81F5683048C76E6603A6C55B8EE1 /* MBLAccelerometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C1EDCB210888571A4674E8E85C415DAC /* MBLAccelerometerBosch+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 68291928EA2AEC8228EFFB58BF45E2CE /* MBLAccelerometerBMA255MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 446871FDEF6BE23071F1C4D30C83656D /* MBLAccelerometerBMA255MotionEvent.m */; }; - 685FB97EFEC7FC123CFA3A81AEAAB96C /* MBLMagnetometerBMM150.h in Headers */ = {isa = PBXBuildFile; fileRef = E4EDFCEE5B72864E7DA91A1762E564CD /* MBLMagnetometerBMM150.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 687FEB18BBF376246E45DC63D6E6433F /* MBLPhotometerTCS3472Format.h in Headers */ = {isa = PBXBuildFile; fileRef = E4682D51E341672CE83B830F1F7E405E /* MBLPhotometerTCS3472Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69200395FDD58D5F2B0C8A4A147C1979 /* MBLI2CData.h in Headers */ = {isa = PBXBuildFile; fileRef = C31C3C37A5B28C48919E378674655A95 /* MBLI2CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6925DDD9A42F7A47E133ED69191AEB0C /* MBLData.m in Sources */ = {isa = PBXBuildFile; fileRef = C3FF22CA55CEDA7F854443FF7BDB86C8 /* MBLData.m */; }; - 69282CB7517D6F1C0C3D023D4837271C /* MBLFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F99EA3788B5E9782EFAD09BB202F11 /* MBLFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 692C8BC0C65B5E19601CE9308B384A63 /* MBLTemperatureV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E22D2D8EB43615D73111F496F74BD7F /* MBLTemperatureV0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6944E56933A54C2B9645949AFB8E34B7 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D2182E483FD05DCE8941DE26DA14FE7A /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */; }; - 695C1A915E2F025D994433A8DE1E502B /* MBLMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = DBCEE7FBDB19D37FCD244D897C836B59 /* MBLMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69C068460451B04C5E868E0EE4A3B2A7 /* Zip-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BFC36007D603EB397A8D9F35CABC6E62 /* Zip-iOS-dummy.m */; }; - 69CCC1F65E8B1B87A538CA73EB6783C2 /* MetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 09A2B8795827FF822C2667CBDAE25456 /* MetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6ABDC2ED898035D4F6C8A419CA18C0EF /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FF9248A7A554724FAC13E872F93100C /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6ACD99A08BCCED2296EC071102FBFF8D /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BC22E4E093926AE2FD93BAFE2E5B2B /* MBLAccelerometerBoschLowOrHighGEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6AED71A0948BA7FA800F0FC0FDCA2D2B /* MBLModuleMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EADF7AF343005056845D551D588501 /* MBLModuleMock.m */; }; - 6B1501665375205609A6289E9F60E35F /* MBLPhotometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 315DE6DF9415ACA45A996357360A6099 /* MBLPhotometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B17AE8BA8FD78446B9731847988F4F3 /* MBLMechanicalSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B45978E147332C2D7DCE27CFB3A99DC /* MBLMechanicalSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B2D7E0C3BC17AFD01B72A241926ADAD /* MBLEntityModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 102772752E49EDB7667052D7350EB2E3 /* MBLEntityModule.m */; }; - 6BCF045739985E71F3884AC5FC92EAA2 /* MBLAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 31C2F98E33F89A641DBCE8A3F3C9D81F /* MBLAccelerometer.m */; }; - 6BF068320C289877EA083580CE6FEE35 /* MBLAccelerometerBoschFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3CE63F66ACC9ECA525B2C889395E9B /* MBLAccelerometerBoschFormat.m */; }; - 6BF5E5BFC225D570D7F9A1B704583F20 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2660920FD069ED7B5ED13CE0B789A2C6 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6C231374436E8BE887B5EFF9BE2C8841 /* MBLTemperatureV0.m in Sources */ = {isa = PBXBuildFile; fileRef = 0120B86E2AE95D793C101E04748002AF /* MBLTemperatureV0.m */; }; - 6C45A96A34D9635177DB30F5A25E1D7F /* MBLANCSEventData.m in Sources */ = {isa = PBXBuildFile; fileRef = 78A46EE93080D885BFF6F8471DA8A012 /* MBLANCSEventData.m */; }; - 6CB91461A2EFCA9E8E04D6DC9774C562 /* MBLAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C045425809353C9AC26BC4A22FCF39F /* MBLAnalytics.m */; }; - 6CC0A4C142BF5AC31090F9EA8E0EF24B /* MBLBarometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E17C60212960E5BD204BBD874B9C3A1 /* MBLBarometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6CF8B9ECB5B630AFA176E9B7C871655A /* MBLExternalThermistor1.m in Sources */ = {isa = PBXBuildFile; fileRef = 257DF6872E94837AC767B4782104D87E /* MBLExternalThermistor1.m */; }; - 6D210884BB35AF67732D0001AA60E63B /* DFUPeripheralSelectorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5591E2801FF88CEE1F9D45AC91B0D6D9 /* DFUPeripheralSelectorDelegate.swift */; }; - 6DD7A6FF143032267FB712C8839D067E /* BFTask+MBLExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = AD6A182159DB824EC701C4F5CECF3593 /* BFTask+MBLExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6E2809E7D9B30B01598BD457F02AD3C6 /* ManifestFirmwareInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B702BC7B58A912AAF4251270635CF62A /* ManifestFirmwareInfo.swift */; }; - 6E371F5443D7BCE00695B2B0B52AF275 /* MBLPhotometerTCS3472.m in Sources */ = {isa = PBXBuildFile; fileRef = ABF694E5002B9296413AA84DDC5B0D02 /* MBLPhotometerTCS3472.m */; }; - 6E49D4102EB1BC9BF4C03D3455A6FA76 /* MBLSerial.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC3430CE59F55B7ECCD181718DED63F /* MBLSerial.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6E5DBAE43D669E97EE0EA81ADC8A6D61 /* MBLEulerAngleData.h in Headers */ = {isa = PBXBuildFile; fileRef = E3AD1BAB629ECA814247A5E73B8CD685 /* MBLEulerAngleData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6F1177D618563F11B1B20C606BB63311 /* MBLGyroBMI160DataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8125897E48631184953DBC6BF9970D41 /* MBLGyroBMI160DataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6FF3E102D30E2A0ADCB22C3DDA3F4A34 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8BE1DCE7543EB7D737BBBEBC88EA25 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70537376BAC4A19209FF6BE04373BE86 /* FastCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = A613E6BF9606CBB4CD455C470297B98A /* FastCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7056A39C17470AA9103E72F8418A80BB /* MBLAccelerometerBMA255.m in Sources */ = {isa = PBXBuildFile; fileRef = 60078A5252316CA448069CA15B7675C3 /* MBLAccelerometerBMA255.m */; }; - 705E3D63B9FD8A0D1848C1142B6ACB40 /* MBLData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF82D0130B914E4BC8C5197562A63F4 /* MBLData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 71184E995D94EADB165F1C2D3473627A /* MBLAccelerometerBoschFlatEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C06DE03D80A35DF40079D0DC1D26480 /* MBLAccelerometerBoschFlatEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 711D894AABEE1E1511E1B7227E9BD9B7 /* MBLConductance.m in Sources */ = {isa = PBXBuildFile; fileRef = 66B6BA83C3C4F23C8DBF08F46B6DEDF9 /* MBLConductance.m */; }; - 7131A3DFC54FB6426718778452B4787F /* MBLRMSAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 52CC46DA65DB0259683868D5E443E82B /* MBLRMSAccelerometerData.m */; }; - 717B4E2A9F151A3966FE50ECC2D4CA53 /* MBLDeviceLookup.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F35860B6ADC7900C6DAFDBEB2B0EDDA /* MBLDeviceLookup.m */; }; - 71EA337BD7291FD9E68FD16EC6EA7863 /* MBLMetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ECB3EBED1AD5F9DFE05147E317A42A8 /* MBLMetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7229A4002503339032D2B0B553E401A6 /* Zip-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 261C4F1650F015205EAFB18BA1619FA8 /* Zip-macOS-dummy.m */; }; - 724D72366156727F7ECA0423761CAC62 /* MBLRMSAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B0F1458E563F8F2E0E9D3B15038D133 /* MBLRMSAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 725A06B7948CDA459A35A0025453BF5C /* MBLModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 87F19309204F07BA1A90389E5292BAA1 /* MBLModule+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 72E6627715762203FB4942ED0C05AAD6 /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = A942A8CCFF9CC397055244A0615C421B /* QuickZip.swift */; }; - 730EF494CA9732461D7E8FE21AECD5A3 /* MBLHygrometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 46546F45369A541754827BBFAD119C43 /* MBLHygrometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7383D76ACA81BE971A786B58B93E5533 /* MBLSerial.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EC3430CE59F55B7ECCD181718DED63F /* MBLSerial.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7398844F2AB4459EA2801EA67B3AC532 /* MBLFirmwareUpdateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CF11CDDD171CAD8715AD95DFF1BF1992 /* MBLFirmwareUpdateInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746F350BD877C479524710577F52C5A5 /* DFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 107D89EB1146D20431D9DA30A2F00976 /* DFUPacket.swift */; }; - 748FF78F59DD3BBCC0A4D2E99F85A836 /* MBLLoggingV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 2712F6503B63708AD7766394B4BFAB8B /* MBLLoggingV1.m */; }; - 749D43AA71072F3A0F45E7072C8D39AF /* MBLAccelerometerFreeFallEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AD8EF5FF275DB50EA6F98F6CE294C071 /* MBLAccelerometerFreeFallEvent.m */; }; - 74A28EAFC989BEF5312C8E2A136BC0CA /* MBLAccelerometerBoschFlatFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 32E8CABE3E44CDFE2329BE40AAC4FFB6 /* MBLAccelerometerBoschFlatFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74A64A1226D7CE1A77D6E70B4C094C24 /* MBLEulerAngleData.m in Sources */ = {isa = PBXBuildFile; fileRef = DE30062ABD960E8C08676300ACD20D29 /* MBLEulerAngleData.m */; }; - 74BD97BC347BC6D0AFB881936C18CCA2 /* MBLExternalThermistor1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8425869ABD5EB8DBC51E5631741F1E52 /* MBLExternalThermistor1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74C30818FE1278D8AB2542D8ADEA554E /* MBLMagnetometerBMM150.h in Headers */ = {isa = PBXBuildFile; fileRef = E4EDFCEE5B72864E7DA91A1762E564CD /* MBLMagnetometerBMM150.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74EFFA3664B2A8FD3D2505E3C9A0C611 /* MBLAccelerometerBoschOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AA27DD31D148E7D4FE4B088798FD73F /* MBLAccelerometerBoschOrientationFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74F51E83688258904BA271532A7C9630 /* MBLData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF82D0130B914E4BC8C5197562A63F4 /* MBLData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 755B4CB1A68DA93432525DEF6412F246 /* MBLRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = A487D9615078F8F70198C070FAF0058C /* MBLRegister.m */; }; - 75760E16B7B3D9C2958ADFBD1C5DA9A3 /* MBLTestDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BEBDF15B99A76AB465BBDA0C0529628 /* MBLTestDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 757AA542EF772C7C137CCBB75BC976FD /* MBLMagnetometerBMM150+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DEE68012FEE0F602A240B3ECA976F27 /* MBLMagnetometerBMM150+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75882F4BDF54E00341F3477995994797 /* MBLNeopixel.h in Headers */ = {isa = PBXBuildFile; fileRef = 683E023C19814107E458986DB3C80721 /* MBLNeopixel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7589B0630274A553474CE93D9171F070 /* MBLModuleMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 94E08C3E838F46065D9A579E08D26F1F /* MBLModuleMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 75B70A8C6173BCEC6ADE370C45FCFA5A /* MBLTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE37A784C87668D3E890C6704A31321 /* MBLTimer.m */; }; - 75D6EE5C49FC4CA231E61A35E0F05B26 /* MBLModuleInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F874621735C718745BB4247927DBB372 /* MBLModuleInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76079A2943369454D7765952AA604B87 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = DF37D3E8E70A2D9EE860B2877A1F368D /* BFCancellationToken.m */; }; - 77248DAC188E17D223441688070646D2 /* MBLMacro.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D144E6E435DBDDDD0D91240069800D3 /* MBLMacro.m */; }; - 775B95D539735CD35D3FA65588D4EE13 /* MBLGyroBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = 876E22D020687C840F45B60CBE75C97A /* MBLGyroBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7763526F1A9C4C195ED569CB2128955C /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D2182E483FD05DCE8941DE26DA14FE7A /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */; }; - 7786BB8CDF96401B1E8662CA4C35F70C /* MBLCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AB4B55BD141F864F663A2BE6B25969E0 /* MBLCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 77BA229F197537BBD6CCE575896B3DD8 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B7936CE338860DFA286D2DF6F83BB0E4 /* CoreBluetooth.framework */; }; - 77C8AB0CD5566740C588D2860EF2CB4B /* MBLNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 328CC030B05EEF6E7D428A59949C6557 /* MBLNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 783EFE5E3889A5F0DC462EED5077C34B /* MBLFilter+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AA829F30CBE3BF2C3B818F7939EB917B /* MBLFilter+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78665A3E0D158F37937B4B70D92EB850 /* MBLRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = A487D9615078F8F70198C070FAF0058C /* MBLRegister.m */; }; - 789058669500F04AC6B89F5459986534 /* MBLMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = DBCEE7FBDB19D37FCD244D897C836B59 /* MBLMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 78906AA83C0388A3979940B14D628E88 /* Pods-MetaWearIntegrationTests-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0122E791DE37E81ECB642809DD4C9BD2 /* Pods-MetaWearIntegrationTests-macOS-dummy.m */; }; - 78913813A0934F595F9250D0EE01F52C /* Bolts-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 19C1F5C20F826AA3EF1A212875392724 /* Bolts-tvOS-dummy.m */; }; - 791298E46DEE4EDA2510D841F78C864A /* MBLDataSample.m in Sources */ = {isa = PBXBuildFile; fileRef = 67AE1DA5CCAEC8045CA513254318D081 /* MBLDataSample.m */; }; - 792D9332B64329C479C048ED880E4F6B /* MBLEntityEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 18DDDD5E1E2ADE29C7D340B61A72DAD1 /* MBLEntityEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 794ED4C2AFEBF60FD930F858DC008A7E /* MBLGPIO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FB11F20516E10D5392A8FD9A19FCAF4 /* MBLGPIO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 795E38FD958844633992E59B3EB12005 /* MBLQuaternionData.m in Sources */ = {isa = PBXBuildFile; fileRef = D09F8208C59945BF9BCA2E29C547665D /* MBLQuaternionData.m */; }; - 7975DC55A055E36C2B35CB2BC3768AB3 /* MBLAccelerometerBoschFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 494205A39329FF5AE2B079EE3125B617 /* MBLAccelerometerBoschFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 79792E4020C88A9D680462BEA77965FA /* MBLANCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EE8DF0E51109F6D1252C1F61309AA51 /* MBLANCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 797DCA3C161FB5A98DAB13AF2B66FFF2 /* MBLGyro.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A3C94A2D4474A8DC16FF570AEE192F7 /* MBLGyro.m */; }; - 79F183D03D2385836A943E7A36835504 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 2CC7D57A6FD40E665301FA579F5AB1BB /* zip.c */; }; - 7A0CA6A2D0AABC44E317269069D0E6A4 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 63510854684E86EDFB5F03E8D52A35BD /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A5CB4A07C502023FE88DB1B1827849A /* MBLAccelerometerBoschFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = BC3CE63F66ACC9ECA525B2C889395E9B /* MBLAccelerometerBoschFormat.m */; }; - 7A809A16DF1DB98AFE32A634CDBDB488 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AF439C209114525130FC395432345CF /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A96B770BEA35125FC7DC8A278E4303C /* MBLANCSEventData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BFE41FD08D80647E835161681D60921A /* MBLANCSEventData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A9E189F7F86928C5E6DE3FC3D3D4BF1 /* DFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645FFFBA525FE54E01512233CD96C235 /* DFUPeripheral.swift */; }; - 7AA1E06DED45EF78CABBB4A35F5B69F6 /* MBLOnDieTemperature0.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7EC23F7DA1F1EF030CBD0B82701411 /* MBLOnDieTemperature0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7AD43602307C1B0E6A954243F2108F2A /* MetaWearPrivate-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 748435E6E0217484100FE5221050840B /* MetaWearPrivate-macOS-dummy.m */; }; - 7ADB1A7DB3F2863551AC8A2B5463A3B1 /* SoftdeviceBootloaderInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 099E89D6E6F44D0B586225B775348D90 /* SoftdeviceBootloaderInfo.swift */; }; - 7AE8CDA0452E9684E696CD726C06FED4 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D04BC1738D891A89974B9F55A4A084C /* MBLAccelerometerBMA255MotionEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7B1AAF027C188F40575415D7D5426EFA /* MBLNonVolatileState.m in Sources */ = {isa = PBXBuildFile; fileRef = A0DAFCFCA37D81B01944B09B50BD2EF8 /* MBLNonVolatileState.m */; }; - 7B48AFC2768DFCE0FA06598132921F0E /* MBLMagnetometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = CA2B309AECBFE6D4E1FAC166D236C338 /* MBLMagnetometerData.m */; }; - 7BA9537BA1F552CCDC77DB0D9ABD4812 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 93EAE20DC31EBE286C11FBC0F8E11117 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m */; }; - 7BBF4485A15DB03968DCDAE05FFD2E20 /* MBLANCSEventData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BFE41FD08D80647E835161681D60921A /* MBLANCSEventData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C41F029C96A9C00C45B69DD5D7A6732 /* MBLGravityFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 632E08C3C1F3C2B3600407429F114413 /* MBLGravityFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C56B017F68D95DE3094E8401E8907FB /* MBLDependentData.m in Sources */ = {isa = PBXBuildFile; fileRef = E83EF69901AB4A54B1F0F417FF13BF56 /* MBLDependentData.m */; }; - 7C712BBAA044CD8363A2B1C3C25AFCA5 /* MBLFirmwareUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F41F0F37DF9DF332219AE7B2AA6890 /* MBLFirmwareUpdateManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7CD3F6C935F8236CCBD095D5FF17E954 /* MBLMagnetometerBMM150Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D87C98E48F326672E237838FDE0B1F3 /* MBLMagnetometerBMM150Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D105FE9BCC556C79B6BDABED77B48E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */; }; - 7D1E9B9561DF6E193C14700F192AC0A7 /* MBLExternalThermistor1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8425869ABD5EB8DBC51E5631741F1E52 /* MBLExternalThermistor1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D849049029E0C695BAFD7614CFF074A /* MBLAccelerometerTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 80BF935A14C1AE875BBF10E6B3505F06 /* MBLAccelerometerTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D9439F052F04EF58EC7783D575EB858 /* MBLGPIOPin+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 866AB71DEA1B2D0ACB8F328AD343EF8C /* MBLGPIOPin+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA898928F935BEB02B4E73045D979D0 /* MBLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = E927F7FE18500C742246D5144E4869AD /* MBLConversion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DC58DCF6420BDB7342D75B1829A6234 /* DFUFirmware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D9D6C530728DC18D1A2775D58338E76 /* DFUFirmware.swift */; }; - 7DCD36C42B3968054579C426C0495D90 /* MBLEulerAngleData.h in Headers */ = {isa = PBXBuildFile; fileRef = E3AD1BAB629ECA814247A5E73B8CD685 /* MBLEulerAngleData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E0D4FE0138F716E5A28B871F920AFC6 /* MBLPhotometerTCS3472.h in Headers */ = {isa = PBXBuildFile; fileRef = 70692F88DC3B085CFA67F4801CC091A8 /* MBLPhotometerTCS3472.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E3943D1AFA070D4134AAD5A943D6BFA /* MBLHygrometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 46546F45369A541754827BBFAD119C43 /* MBLHygrometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E817E0AC9B6CB1C357092387C7E637B /* MBLAccelerometerBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD999AF844115DA8A50A968030408C1 /* MBLAccelerometerBMI160+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7ED311EDC521A5F8033337049AB450E4 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D6827276563ECF82E9652599FDA2563 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7EE2243D9411E496A9F23230F9C5F2B7 /* MBLBarometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 55B5F56299B15AFD2D2404B34E225E67 /* MBLBarometer.m */; }; - 7F1FC9D7D2D975BF065B342F86C898B4 /* MBLTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1836DBE60406D35990AF938F41D465F2 /* MBLTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F46A384FFD9E63159EA428EDABEFE1D /* MBLNeopixel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EC059FAD710FE43BC68B1CE0F8D860A /* MBLNeopixel.m */; }; - 7F8FD4E7CBBEB70EF1B0F8F48D65ABA7 /* MBLAccelerometerMMA8452Q.m in Sources */ = {isa = PBXBuildFile; fileRef = 683A646CE59BF06ACE557B9DC63F37BD /* MBLAccelerometerMMA8452Q.m */; }; - 7FDBF382501DAB11C9EA93E8B62B1FAF /* BFTask+MBLExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B316769B25CA5CFF1037BB6E6C5DFA /* BFTask+MBLExtensions.m */; }; - 802EBC5D253A24882AB9D986F74C001B /* MBLTemperature+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BF37B13956F515D176ED1150BBA2BF23 /* MBLTemperature+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 808838ABC1B862BE8FD91E22C1CB040F /* MBLAccelerometerBoschTapEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5898A42A321FD0618A921C0E77E8A4 /* MBLAccelerometerBoschTapEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80AC74E69003B3E0DEFF1CC86831977F /* MBLAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD1DF3FEB5553DD83EB3595CEC0F84F /* MBLAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 815DEAC0590F3E615548559652E36F6E /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F3A760FF1FEA0F393837CFA254115DA /* Bolts.framework */; }; - 81657463B6EEA141962995E993BDB0D9 /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 14F97140194A6FFAF4887995AC14BDBE /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 81B7C57BE31414E8055C36F2B30B7F74 /* MBLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = E33E51117A7906AD725BC5896DAF7AB9 /* MBLLogger.m */; }; - 81DDCFCD5EC85DC5263E7367B05DDA13 /* MBLAccelerometerShakeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E95B4734AA96D0221CFDDE954406F997 /* MBLAccelerometerShakeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8221FF31CDB5A3B79E3723DAEFF596B3 /* MBLTemperature.h in Headers */ = {isa = PBXBuildFile; fileRef = B4C74EF9EB41D6A6C9BFF4EF7F64F663 /* MBLTemperature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8240E1F06432929974B19DEAE113B74F /* MBLQuaternionData.h in Headers */ = {isa = PBXBuildFile; fileRef = BD464CA835615E18659BEB5C94E2000D /* MBLQuaternionData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 82669BFB8E6C6BB98E273C0AB75BA8C3 /* MBLAnonymousEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AC77CDC011F6ABB4F5891B58CF47CB2 /* MBLAnonymousEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 828C2DDD22536D392E153DBFA768ACBE /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5DC3572BFE19B2936387A0FACF2149 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 82BEA19A580B579F59A77336B3066DC1 /* MBLAccelerometerBoschRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 988D40BB92611BCE21D54846268F245A /* MBLAccelerometerBoschRMSFormat.m */; }; - 82CF6934626DB60BCE05756D56F93FB1 /* MBLDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 429D35B0DC4CBE2F675FD0E381BBA5A4 /* MBLDeviceInfo.m */; }; - 82D30C0CA777F705B0E9E6F69C5A8D16 /* MBLMetaWearManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CD80956417A14D56D8D27D71A192F8DA /* MBLMetaWearManager+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 82EDE1F4730D6D6BC8DF91F8579600A5 /* MBLBarometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F6D3364746F3DED3DE07DF2BE018E314 /* MBLBarometerBosch+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 833562FEE9D37CCF04F286DC293037E5 /* DFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F950DFDB30AD3DFE41EBB7542B85C70A /* DFUService.swift */; }; - 83BC2AB35A2FADBB1B07FA95DACCC72E /* MBLAccelerometerBoschTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F37BD6E8C1B5B209223A4403C6820B /* MBLAccelerometerBoschTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83CD02C2CAD636DAA655F44A282BEE43 /* MBLNumericFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = CD82AD8A7C657338F4987435E20EB388 /* MBLNumericFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 83D0A018235D0FEE9663C9D00CF2045E /* MBLMagnetometerBMM150Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D87C98E48F326672E237838FDE0B1F3 /* MBLMagnetometerBMM150Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 84468A1362883CC539648B41A27E3CE5 /* MBLAccelerometerFreeFallEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 841ACC84A92CFE5A492E2328EDB8410E /* MBLAccelerometerFreeFallEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8464DA8A5C1B144C4B6DDFFC19EDF9D4 /* MBLMockPeripheralFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9582ADFE04E59FB00FC2EB1B9CDF781A /* MBLMockPeripheralFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8527E2C99A59A4BAAB9DA93D2B459A0F /* MBLSerial+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D382C7ED86B3A4044E9BC7FE7B808E0C /* MBLSerial+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 854055918F398BFAE2A39330AB0DBBF2 /* MBLMockUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B3A0F41A9C9F3D4A6BAEE5B16DA8E124 /* MBLMockUtils.m */; }; - 855D6F1918815A96D2B36FD5D1867A51 /* MBLiBeacon.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B5A2DB9C21AB3E46343707203DB8703 /* MBLiBeacon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 856482C9BBD5D4C169B7B9B29B42C5B7 /* MBLOrientationData.h in Headers */ = {isa = PBXBuildFile; fileRef = 297339BB993DE15AD32362BF537FCF93 /* MBLOrientationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 85C53E3EFA0A2A194F8194A7D4A44BCC /* MBLProximity.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF908A6021CBB2D0312C0A243052E7A /* MBLProximity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8622CC4F749B6C9D83882726E64B5F8D /* MBLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = E927F7FE18500C742246D5144E4869AD /* MBLConversion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8631826E94B22067947F31CED32594C0 /* MBLAccelerometerBoschFlatEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 631DC4724CB7F5DB5E12D63CCAA9BE04 /* MBLAccelerometerBoschFlatEvent.m */; }; - 86352CCA8F4D4CD2FE902379E1255B73 /* MBLData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 79ACB3EAB67424B932181CC2ADD04624 /* MBLData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 863953AC35973E77EDFAE2A3C2014D83 /* MBLTestDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = 58D92C0D8A331C0153DC2D7E2E1A110E /* MBLTestDebug.m */; }; - 864A00FD264C748AEFF1A9352A980D3D /* MBLAccelerometerBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = BBD2CD5AC9C224EF7A5EC8606ACED6BE /* MBLAccelerometerBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 867153AE5D4007AC5FEB80BA449D8A28 /* MBLModuleInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E67CA86BA4A4BD60EEBB7E3325B212 /* MBLModuleInfo.m */; }; - 86C8414F4D0FD2B50200479547231E5D /* DFUVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3322753074CE7A5BC2F0A5131563F267 /* DFUVersion.swift */; }; - 86CD907F1575EFF316DDB9FBA452B479 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2706954377653812FD06C3E316EE5232 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86DAF0135601516CAE9CF45DDD412F10 /* MBLTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE37A784C87668D3E890C6704A31321 /* MBLTimer.m */; }; - 871349E7E2FBED34DB2B82A4C4D0765F /* MBLiBeacon.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B5A2DB9C21AB3E46343707203DB8703 /* MBLiBeacon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 872C45BD0EAF8834ED51195B41825E20 /* MBLAccelerometerBMI160StepEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BBFA2A124C5CF5541408059671A33F65 /* MBLAccelerometerBMI160StepEvent.m */; }; - 87523EFDAB8A747D936B8A2C2BEA2E83 /* MBLDownloadOnlyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 33264FC0B93C70A504D49AC7A66C41FF /* MBLDownloadOnlyEvent.m */; }; - 8786531AB1A849299D6B5AED9004A337 /* MBLHapticBuzzer.m in Sources */ = {isa = PBXBuildFile; fileRef = D57BE345C3B103A8511DD25E291757E4 /* MBLHapticBuzzer.m */; }; - 8788C3923B875465B6E45E3D50D4038B /* MBLBarometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E17C60212960E5BD204BBD874B9C3A1 /* MBLBarometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 87EBA77F723E75F2BD4B9683BE952DEA /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8A748BF8ED64C13C94BBC174818A7A /* MBLAccelerometerMMA8452QRMSFormat.m */; }; - 880D0BE89683E4F6B7850D2392C40241 /* MBLDispatchQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D7A2BBD6DD7144921CBFA24FE2770E9C /* MBLDispatchQueue.m */; }; - 881B0C1F0A84BD85F3D4464900547E55 /* MBLGravityFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 84636ADEBFC31D02D2AA9BB00F220C37 /* MBLGravityFormat.m */; }; - 885A1FB4993279E7EC126558D1F34BE0 /* ButtonlessDFU.swift in Sources */ = {isa = PBXBuildFile; fileRef = F3A1010153F1DDFAD7D18AAAB73FE5EF /* ButtonlessDFU.swift */; }; - 88B6D35BAA115CC5B306AEF70EE07A1F /* MBLSPIData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A11D978BD98802C632FA253271B5EF2 /* MBLSPIData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 88C2FCAB92AE9286551A0F295C29C2BA /* MBLAccelerometerBoschFlatData.h in Headers */ = {isa = PBXBuildFile; fileRef = 656D59E1FEA99D19C2D5F3179B85FAE8 /* MBLAccelerometerBoschFlatData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 88E11044BE0941ACD27AD74B4055D746 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A24E34E7C4C5E621D62C5156E3F752 /* MBLAccelerometerBoschFlatEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8959B91B9BE354C649A33D957362F431 /* MBLSPIData.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8E5506693A8AD4210AFC4F04630DB5 /* MBLSPIData.m */; }; - 89890FA8314D4F0F4DFE319B21A00D27 /* MBLBluetoothCentralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = B661370B50F2E66A283AEFD0060A25D5 /* MBLBluetoothCentralMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8993748639DE4BA3EE4AC1E5B316BC54 /* MBLRegister+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FC6612B69C9D0CE8EE2D7A066A56C221 /* MBLRegister+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89C70F298C63EDF7DBB6AAB87B7B17C1 /* MBLTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 1836DBE60406D35990AF938F41D465F2 /* MBLTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89EA8BFEB66543E209763BFDDC332017 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E4CFCB7B9A81296DDC19BE717B547395 /* MBLAccelerometerBMI160MotionEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A6D5490D285B256CACFD25D814E57E6 /* MBLAccelerometerPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EAAE3E2C5294FB4D702F158809A0913D /* MBLAccelerometerPackedDataReadyEvent.m */; }; - 8A82B7C4DF292DD2DC781D5C59D2D9DA /* MBLModuleMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 94E08C3E838F46065D9A579E08D26F1F /* MBLModuleMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A99A6CAE39A0E09E58E8EFAD96A8E76 /* MBLTimerEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 01A67B1A530D3D12F82B2B6F354568D5 /* MBLTimerEvent.m */; }; - 8AE40B5E3CFFF75823090E9232D1DB4F /* MBLGyroBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 098C7FF3BE168997AB33405D503F5A2C /* MBLGyroBMI160+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8AEB17FE9A13F1EF1B118583AD231299 /* MBLAccelerometerBMI160MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CB89E36AEE3848001C95666AAB53B64 /* MBLAccelerometerBMI160MotionEvent.m */; }; - 8B0FA842D8BF53EF30AC88B3F1F7B05F /* MBLBarometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 3EA4B888A2C3618023DA6440BA48FD6D /* MBLBarometerBME280.m */; }; - 8B8D376EC741830C78527FBC48212B33 /* MBLAccelerometerAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D97DC608F174F938F952EB74C98E824 /* MBLAccelerometerAxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8BEC3171F367E7C92175C8CBB951F3AB /* MBLPhotometerTCS3472Format.h in Headers */ = {isa = PBXBuildFile; fileRef = E4682D51E341672CE83B830F1F7E405E /* MBLPhotometerTCS3472Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C55A222A79E2C310C4ACEAA0B521967 /* MBLGPIO.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D540DE91D9349411A42CBFA9E1817D2 /* MBLGPIO.m */; }; - 8C60B49888799CA2A1AAB67EB9B980A1 /* MBLAccelerometerBoschFlatFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FCA26FF093F156E325A7B83CC6F09F3 /* MBLAccelerometerBoschFlatFormat.m */; }; - 8C6FB25A0A26C9C54B0CD4140D0E64BA /* MBLDataProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B34BF91775BD5B5F16563879AAE89DE /* MBLDataProcessor.m */; }; - 8C811296D477800F5825BC7EE8C568FB /* MBLMetaWearManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AC54B32E4666B6C1892004CAB3F5F4F7 /* MBLMetaWearManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8CDE4282C692157994E4C978ED1B1651 /* MBLAccelerometerBMA255MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BB70CAC175503B0836D3D7EF3C1AE8 /* MBLAccelerometerBMA255MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8CF8DB57BD3856F63787DEDF89EF0066 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D6827276563ECF82E9652599FDA2563 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D3B7CAC7DA8669C3DC514E06DC24188 /* MBLSPIData.m in Sources */ = {isa = PBXBuildFile; fileRef = BC8E5506693A8AD4210AFC4F04630DB5 /* MBLSPIData.m */; }; - 8D4009669BE2C81AB8FCB87F0B40AA3D /* MBLAccelerometerMMA8452Q+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5DE43A24BC32E8EE90C94105AF19F80 /* MBLAccelerometerMMA8452Q+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D5CD8F6990D2A28C76B883E988E19A0 /* MBLAccelerometerBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BAD999AF844115DA8A50A968030408C1 /* MBLAccelerometerBMI160+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D5EE8C586601DD60ACABD903CBC458C /* MBLAccelerometerAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DC7D0B2E65A380068EC3FEF2957C2A44 /* MBLAccelerometerAxisReadyEvent.m */; }; - 8D6CE9A8DCC5595B21C88E9182A4126E /* MBLFirmwareUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FB44E2B89CF240B81C4538959705A14 /* MBLFirmwareUpdateManager.m */; }; - 8DC0ECC3755642244D9A8A1133058DB5 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2173E09EFD7D86F6C58907D0B83C31AF /* MBLAccelerometerBoschAxisReadyEvent.m */; }; - 8DC70A659643ED2CC1FEDEB1D28F1860 /* mma8452q.h in Headers */ = {isa = PBXBuildFile; fileRef = A2F0E57E1990CED91D153D6BCA97B4B8 /* mma8452q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8DCB6644145A250AE8E7E6D4B487A59B /* MBLModule.m in Sources */ = {isa = PBXBuildFile; fileRef = FBB66D000CC25B48165954C2C99799DF /* MBLModule.m */; }; - 8F01CF08386DD8D5699A97AFF4D9BCC2 /* MBLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9676FFAADD54AD787A3022BA543B95D /* MBLFilter.m */; }; - 8F8047A84F6509715F51D32548A6FB0E /* MBLAnonymousEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F352EEA80E24C897DFE65410ECEBAF80 /* MBLAnonymousEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F842B44C8BE2B69C7F96E99486B0AAC /* MBLFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F99EA3788B5E9782EFAD09BB202F11 /* MBLFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FA022A3CBB1F06E0E339A0A48C94A42 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5771483BE42EC3D5F131B912DD7DF2 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FB84C036392D49D3605BE777760DB3B /* MBLDataProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8956DD984CD12941D9C8124A4C9C11 /* MBLDataProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FC6AC26736361D5A0A3C2057C548C13 /* MBLTestDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 9BEBDF15B99A76AB465BBDA0C0529628 /* MBLTestDebug.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8FD3F26C393AC48460D3C898A44E0DC3 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 42C630E413E950FD8E86077705094243 /* MBLAccelerometerMMA8452QOrientationFormat.m */; }; - 90408E1DDC09A4DE4657FD2E7308EDCA /* iOSDFULibrary-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6FA81A82BCC1EAF9DFAE8911FB00826D /* iOSDFULibrary-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 904E62D9F04106B7A8D01ACD39DB906A /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 30C55F887936A2253979D9148E618465 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 905EEF9EFDA9B35E5927F041C677EA93 /* MBLConductanceData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8683A0E500A656B29F04A8F167263386 /* MBLConductanceData.m */; }; - 9085C3FC007F075BB3BA75352FC689FD /* MBLTriggeredRead.m in Sources */ = {isa = PBXBuildFile; fileRef = 2775F63A5885A6560DF256662375885D /* MBLTriggeredRead.m */; }; - 90A057A1041C0CF1D4D92E7A4235DDD9 /* MBLNeopixelStrand.h in Headers */ = {isa = PBXBuildFile; fileRef = E65129647907D6602565EDEA64B50EC5 /* MBLNeopixelStrand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 90A0ABA7C6412371B571F1B843F97249 /* MBLAccelerometerBoschFlatData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 09BF9E44AFC699AC453CFBD3C548CC3B /* MBLAccelerometerBoschFlatData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91299C5A7C6D42030DF7CC0132A5EE60 /* Bolts-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 6D4514B8DCAD84689076972E7C5FD8ED /* Bolts-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91644C657F33AA0BAC2AF8C8DC67E859 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 30C55F887936A2253979D9148E618465 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 916920330A90BCE303B37635D889EEFA /* MBLMockPeripheralFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 9582ADFE04E59FB00FC2EB1B9CDF781A /* MBLMockPeripheralFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 919676BEF85738E3F7E053478B1111D5 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = C6DE6A5AC0A49A3E487037A11D03F9E0 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91AA978DD338A89518DC88680EF46EBF /* MBLMetaWearManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AC54B32E4666B6C1892004CAB3F5F4F7 /* MBLMetaWearManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 922688049F9CB1327FC3CA9EF0A1F5EA /* MBLTestDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = 58D92C0D8A331C0153DC2D7E2E1A110E /* MBLTestDebug.m */; }; - 924ECC72916CC6314C4B9E26BA630687 /* MBLAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2807A744BD66EC2FC25F34F06ABD06A3 /* MBLAccelerometerData.m */; }; - 9288EE814743E31F45A5B321C2B9EFCC /* MBLProximity+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 49DCC21B1CC2D91B3B63A59EB7E2B099 /* MBLProximity+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92BB5036FF27D19CC743496634B1742A /* MBLTriggeredRead.m in Sources */ = {isa = PBXBuildFile; fileRef = 2775F63A5885A6560DF256662375885D /* MBLTriggeredRead.m */; }; - 92CE8AD1659D6551DC694A59280846AC /* MBLPhotometerTCS3472Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F0D1110D45FA365DBC5367085D1E83A /* MBLPhotometerTCS3472Format.m */; }; - 92D1AD9752BF1FF0E6365946F895244F /* DFUServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6856DDDF597277881E66C7EAE1488594 /* DFUServiceDelegate.swift */; }; - 933D54DB37E2D66FEEF7EA3948FAC7A7 /* MBLMockPeripheralFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = A9A428AC43F78AE9A82E6B2E060F3494 /* MBLMockPeripheralFactory.m */; }; - 934593FA52F6D348B60D5FD788BCBC30 /* MBLAnonymousEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E16E857553131544D16A9490053C5F07 /* MBLAnonymousEvent.m */; }; - 938A431516122F4F0A2A9D38C1C598B3 /* MBLBitmaskEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E16579A392E68FDA1887AE338EF23A3A /* MBLBitmaskEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 93B50CA8A6FB2A6A7A1F82653FEDFC10 /* MBLMagnetometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 39A93D8D844389570DDA7A68F02881BF /* MBLMagnetometer.m */; }; - 949EE599CD9C7BE37E23269CEA7E8811 /* MBLLoggingV1.h in Headers */ = {isa = PBXBuildFile; fileRef = DABD5D15B57D8F075CA743D1528D890E /* MBLLoggingV1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 950B0F7AB7B682A48E494D0B7C99CCB8 /* MBLSensorFusion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C3629650A5E90D12D7E8D34CB7524F6 /* MBLSensorFusion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9575055E8C8C8E2A85E187368B31C18D /* MBLExternalThermistor0.m in Sources */ = {isa = PBXBuildFile; fileRef = 103B453C78582AB73039AF2ACD28091E /* MBLExternalThermistor0.m */; }; - 95B1829645EFEBFDA97B65F8E51DF21E /* MBLAnonymousEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E16E857553131544D16A9490053C5F07 /* MBLAnonymousEvent.m */; }; - 95BE099F051DB5F2D57FEDE09C92C95D /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 9951ED4CE84E530835A1BBE12C8A58BB /* MBLMagnetometerBMM150.m */; }; - 95FB91B6686C89201D3612BF9352D27D /* MBLEntityModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 851B1F784539DC188479DDCA5FEC1F8D /* MBLEntityModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 95FE9C5554D47B65BE3F1FA9A3EBAF3C /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 42C630E413E950FD8E86077705094243 /* MBLAccelerometerMMA8452QOrientationFormat.m */; }; - 964A2378F3E5716E6DED3522EFA6DD98 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E1A24E34E7C4C5E621D62C5156E3F752 /* MBLAccelerometerBoschFlatEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96A123A17AE064702CDEDE31B3BC0B3A /* MBLDeviceLookup.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F35860B6ADC7900C6DAFDBEB2B0EDDA /* MBLDeviceLookup.m */; }; - 96BE86E254B287AF2511D3C6F9D428E4 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C23EE3F1FACF9A4C1ACF113B7106D470 /* MBLAccelerometerMMA8452QOrientationFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96C4C4F1BBCEC6CE5AEC4CB0F081BB1D /* MBLQuaternionFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = EB0F3127CA80D2F446D1A1CAAF111A24 /* MBLQuaternionFormat.m */; }; - 96ED995530CD721A7D814E48CC152762 /* MBLFirmwareUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 0FB44E2B89CF240B81C4538959705A14 /* MBLFirmwareUpdateManager.m */; }; - 9719C11191F434DED171CB117DBC042D /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 154C63619035D967672EFF5169B9350C /* MBLBarometerBoschPeriodicAltitudeEvent.m */; }; - 9752A267102DB34049F8EADCEBF8F367 /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AA7C4FBEBD67275B31A22D418F5BAFF /* ZipUtilities.swift */; }; - 97ACF9D755336E2B41134E83E38D5EF7 /* MBLHygrometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 352E1631A56726C30EAE50929ED999C6 /* MBLHygrometer.m */; }; - 97AE1A4631D93899AD4EF8BA65C67DB4 /* MBLAccelerometerBoschFlatData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 09BF9E44AFC699AC453CFBD3C548CC3B /* MBLAccelerometerBoschFlatData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98138D45BEB796A5544F67AE3D4626BC /* MBLAccelerometerBoschFlatFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 32E8CABE3E44CDFE2329BE40AAC4FFB6 /* MBLAccelerometerBoschFlatFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 98519ED0856E32CAC03E2DC2081CA586 /* MBLCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = AD87D9452AD5DFA34EAE953736420189 /* MBLCommand.m */; }; - 9864C846F5D5C1A838F6B2609AD4B785 /* MBLAccelerometerDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 67C2F6BF2281EB44559A63F5ED570D37 /* MBLAccelerometerDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 987FF80CEDE4FDFDADFE2DA7A3618FA5 /* MBLSPIData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A11D978BD98802C632FA253271B5EF2 /* MBLSPIData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 99AEC2BE2CA23EA6E7AA5BF1F4206DE7 /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2FDEE37CF41DE80256A00DFCF4163C /* MBLHygrometerBME280PeriodicHumidityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A27EE4279414A7D28D999977259CFD2 /* MBLANCSEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = 510DD17398465B0992EB321F5ADC3AE1 /* MBLANCSEventData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A34B2F95C36617D1663ADBB58AD2D78 /* MBLDependentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F00482E0E8C8ADE2E784192F4043661 /* MBLDependentData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A611C9B87F72E8FE4279ECB999E5DC7 /* Bolts-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2FF11580259AE06E27E42B5D697B1F91 /* Bolts-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A6CFBDE273E587E6A5F13464CD6A38A /* MBLConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = 259124F1E7A1A8378E3FAC98644EE69A /* MBLConversion.m */; }; - 9A99C63AC2A0AC43DBD00255BF7B691C /* MBLTimerEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 01A67B1A530D3D12F82B2B6F354568D5 /* MBLTimerEvent.m */; }; - 9AEBCE883BBA944B442CC7C69389184B /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 09132298C652A6E4AAC6E0D0A627FAB0 /* MBLBarometerBoschPeriodicAltitudeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9AF696DA6B10C24DAAC674ECE17E7A2D /* SecureDFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0054890AF2606207216F2072858B5AE /* SecureDFUPacket.swift */; }; - 9AF696FFEDA8703A3B8337D7225A60FD /* MBLBarometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F6D3364746F3DED3DE07DF2BE018E314 /* MBLBarometerBosch+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B0CB4A39BB4FF8619519A6218C4A3FC /* MBLAccelerometerDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C227AA6932602ED1E3B2AFC30A1D10 /* MBLAccelerometerDataReadyEvent.m */; }; - 9B0EDE0A419A66C3ED79CEEE9A3760D4 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DEDDD7C2FAFC76A2A87E225422005C5 /* BFExecutor.m */; }; - 9B43055CDCFB5562E4B6E90772F4FB9B /* MBLAccelerometerBMA255+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AC165D8BECA691BFCA6C6045C8C5762C /* MBLAccelerometerBMA255+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B4B66D85B3E028671649595767353C5 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 2CC7D57A6FD40E665301FA579F5AB1BB /* zip.c */; }; - 9B758184F6C5CF29E6BA196CA0F13116 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = D0942491B7067C7470A15A264D186D4D /* BFCancellationTokenSource.m */; }; - 9B8998CF2ECC81B46C0DA4905766FC9D /* MBLMockPeripheralFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = A9A428AC43F78AE9A82E6B2E060F3494 /* MBLMockPeripheralFactory.m */; }; - 9C45496F8DE1C75D431DD74BFBC14E1E /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = FD0678238589E8C13FE790345E57C574 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m */; }; - 9C4B0EB9E3769D083E1A8F572E7AC862 /* ZipArchive.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9946177777926628D585F20B3365C41 /* ZipArchive.swift */; }; - 9C6767DCDAFB042B17DA39028DCD6222 /* MBLLoggingV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D6CB41C23090423F8ED51F5A3FB6572 /* MBLLoggingV0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C9A9F369CB3E895FFE279A8E8F4BAFC /* MBLTimer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 533D2377CF75F400D378A7FB2C5A8B80 /* MBLTimer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9CB18EB11A75024E7E85B719B846693C /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = B170794DD226B26CAD7042834F2EE58A /* BFTaskCompletionSource.m */; }; - 9CFE1CE90B58CB04D88F6DCAE8BB0798 /* MBLProximityTSL2671.h in Headers */ = {isa = PBXBuildFile; fileRef = EEE2C38FE1144B7A77E1150FCC48FF3A /* MBLProximityTSL2671.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9CFF0F60961234C29CFED38519E40785 /* MBLAccelerometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A486169E0D6D95BE461814DD68D9500 /* MBLAccelerometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E2088F339BF0292521E09A412631D8F /* MBLMetaWear+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AAFD4E4609EAE8A3637DD8B1CBB0C77 /* MBLMetaWear+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E66A017A3091A7BF664C25BEB23ED9E /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 73BC22E4E093926AE2FD93BAFE2E5B2B /* MBLAccelerometerBoschLowOrHighGEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9E6AF024B83807A8F9162DA3E1FD342C /* MBLDataSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = BB3630C4C23448737131CCDFA574952F /* MBLDataSwitch.m */; }; - 9F2BAA44B5A00E2EBD17970F853FC66A /* MBLNumericFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = CD82AD8A7C657338F4987435E20EB388 /* MBLNumericFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F43D108C2F2DC0823D3A97CF5705F7A /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DA6E5CE6CE505DF838D77C452AD13B6F /* MBLAccelerometerBoschPackedDataReadyEvent.m */; }; - 9F56549DCFD8F2307E3D82BDBB7C03E2 /* MBLGyroBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 342B40755E2FFB37E7739C0F867B357B /* MBLGyroBMI160.m */; }; - 9F6E287A8259E95BF1A60C716C1E3C9F /* MBLMockPeripheralFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = A9A428AC43F78AE9A82E6B2E060F3494 /* MBLMockPeripheralFactory.m */; }; - 9F739D6B5F32BC275706447F50F0E49D /* MBLCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = AB4B55BD141F864F663A2BE6B25969E0 /* MBLCommand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F9AEB3D268E529595D12CAE5578D9F9 /* MBLLoggingV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FE8137EC2AD26C62D15D585531C0FA4 /* MBLLoggingV2.m */; }; - 9FEE83D8FA6E4F894FCBE9DCC00B2C6A /* MBLNeopixelStrand.m in Sources */ = {isa = PBXBuildFile; fileRef = AE1010EE66D1FDA5F86AD0D8493B7D87 /* MBLNeopixelStrand.m */; }; - A01D917C7B4DB2E61E18EA6CFA8A3315 /* LegacyDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C265937209DAD09BC393AA51F15236E /* LegacyDFUPeripheral.swift */; }; - A03007271ECFD4BCCFD40BED4ADC2318 /* MBLBitmaskEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E16579A392E68FDA1887AE338EF23A3A /* MBLBitmaskEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A04C4A7F70A78BA11548D54E95EF4967 /* SecureDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96CC9E4509349DDAC2824D4440B9875E /* SecureDFUPeripheralDelegate.swift */; }; - A091E11F68288BC6B7C11DA2DFE3D288 /* MBLModuleInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E67CA86BA4A4BD60EEBB7E3325B212 /* MBLModuleInfo.m */; }; - A0A6CF6F8B6654DFB5C4316693653F1F /* MBLFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = E1F99EA3788B5E9782EFAD09BB202F11 /* MBLFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0BDFD2B3E7A573D2AB10F0493793526 /* MBLTemperatureV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E22D2D8EB43615D73111F496F74BD7F /* MBLTemperatureV0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0CEF99D292E6AFAB05F903C14E081FA /* MBLPhotometerTCS3472.m in Sources */ = {isa = PBXBuildFile; fileRef = ABF694E5002B9296413AA84DDC5B0D02 /* MBLPhotometerTCS3472.m */; }; - A0CF7FBBA3C54D7B825E0E1294FC9B6A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */; }; - A10BF2F4776B8865A676C64C7A4628B0 /* MBLSensorFusion.m in Sources */ = {isa = PBXBuildFile; fileRef = F611D503A35A2C29A17EFE78CFEA593D /* MBLSensorFusion.m */; }; - A135326D27444685ABDBF65B2B6A5AAB /* MBLModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F04C343FC7E20D674466E19D6BF71FA /* MBLModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1454A23E30619D8673AE800D9293B96 /* MBLMetaWearManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD17983083A051951D07F5F4B1A6301 /* MBLMetaWearManager.m */; }; - A181A691942CF017677CD87F6C2A4324 /* MBLAccelerometerTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 69F3741316EE19AD0AE240BFCE27C008 /* MBLAccelerometerTapEvent.m */; }; - A18ACA69D4DB8B516445327729241876 /* MBLOrientationData.m in Sources */ = {isa = PBXBuildFile; fileRef = 7486D6C559F423D347EF546001BF1A71 /* MBLOrientationData.m */; }; - A1B3FBAAAEADE381BEAD03BDDE8D8397 /* MBLEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8755BF1875A2CDF639F20DED1B9D0C2C /* MBLEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A218E0F1B79EA52939DD82F40BFDD8EC /* BFTask+MBLExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B316769B25CA5CFF1037BB6E6C5DFA /* BFTask+MBLExtensions.m */; }; - A2312615A331ADA5CB8C0D34BFE8BBB1 /* MBLSensorFusion+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7055C022657B2629DA9C9F0AA2C463 /* MBLSensorFusion+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A24269BAC1CB7522DC0CCB0A3F14CBAF /* MBLGPIOPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F0E221620B947BDDB6ED38CF1DFC44C /* MBLGPIOPin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A27EBDA47621F44D82204F24C08802F2 /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C09A3AC008BF7FA56EEB4385A3C3DB /* MBLGyroBMI160PackedDataReadyEvent.m */; }; - A2C5BC32A259A7779F8532DE5B932D4F /* SecureDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7AFDC40CD0763752F8F369BB3B81D787 /* SecureDFUService.swift */; }; - A2CF5FCB2D6F31E3959836B1A482FAAD /* MBLMetaWear.m in Sources */ = {isa = PBXBuildFile; fileRef = 4739499D51E870D85365C8346318C403 /* MBLMetaWear.m */; }; - A2E24A53F2DFE81755FDAAF881A96912 /* MBLTriggeredRead.h in Headers */ = {isa = PBXBuildFile; fileRef = 80522ABAB30A84102A4A1F9F6171D7F8 /* MBLTriggeredRead.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A31BD734F93770FCD0E61FDF1EAE11F9 /* MBLAccelerometerBMI160StepEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C00606375314EB5180797E7794603591 /* MBLAccelerometerBMI160StepEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3CAACEA47C7397BADBBFAE176446FC3 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 767039DE8BE4128CD2C1F16858847D69 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3E4BBEF1BB9B8B981CD94FB7F2DCD3D /* MBLStringData.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0992D5084797FE10F678A4D2FE31D2 /* MBLStringData.m */; }; - A4040DC85914214CE70515E41B51CDE4 /* MBLProximityTSL2671.h in Headers */ = {isa = PBXBuildFile; fileRef = EEE2C38FE1144B7A77E1150FCC48FF3A /* MBLProximityTSL2671.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A40BE7D2FA30CA7EC6AF9714DDD4EC6A /* MBLI2C.h in Headers */ = {isa = PBXBuildFile; fileRef = F618C9DF00DDF47D5EEEAAFDFC613948 /* MBLI2C.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A43216CACEAFC9EF417245DE7A4D7E0F /* MBLAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD1DF3FEB5553DD83EB3595CEC0F84F /* MBLAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A43BA132A0E07B6B02570645C8D03FA5 /* MBLAccelerometerBoschRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 988D40BB92611BCE21D54846268F245A /* MBLAccelerometerBoschRMSFormat.m */; }; - A43C903AF42C0C25636F2E801CF1CAD0 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D638CE0D4E71C4047F8878745F8486D7 /* MBLAccelerometerBoschAxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A4514A1C10FC771A2C34CB2DE8E16575 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DEDDD7C2FAFC76A2A87E225422005C5 /* BFExecutor.m */; }; - A4957B568D475E7C71CC2C77469AD173 /* MBLRegister+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FC6612B69C9D0CE8EE2D7A066A56C221 /* MBLRegister+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A49D1DC9ED0C399CF0E2DD234B99057B /* MBLDispatchQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D7A2BBD6DD7144921CBFA24FE2770E9C /* MBLDispatchQueue.m */; }; - A4BE8E516C27A95B75893B02F1A50E7A /* MBLOnDieTemperature0.m in Sources */ = {isa = PBXBuildFile; fileRef = 041EC2A34089D29291A9815E11ACD8EC /* MBLOnDieTemperature0.m */; }; - A4C59BDF72102A3F4C8933D538D870D6 /* MetaWearPrivate-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C70EDC7A4A497FCE432608A6AF4F70B /* MetaWearPrivate-tvOS-dummy.m */; }; - A5EE3D8AC5E2389F1F309E6D4ACA6C8D /* MBLQuaternionFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = EB0F3127CA80D2F446D1A1CAAF111A24 /* MBLQuaternionFormat.m */; }; - A5F4149CE4EB785A8A7FCBDC73ABF689 /* DFUServiceSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB5582120CF0EA27230E08D94D529650 /* DFUServiceSelector.swift */; }; - A5F52D3C3E926D54946739DA07BD5057 /* MBLGyroData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C76EB125E555C3CEEAECE10EB48F4C5 /* MBLGyroData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A633872CE488CFC46066037BF460B6A9 /* MBLGPIOPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F0E221620B947BDDB6ED38CF1DFC44C /* MBLGPIOPin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A645AFE7726AFC73C1F01CDD01DA28B6 /* MBLGPIO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FB11F20516E10D5392A8FD9A19FCAF4 /* MBLGPIO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A6545831695B9244DA5061C64FF26A45 /* MBLSensorFusion+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6F7055C022657B2629DA9C9F0AA2C463 /* MBLSensorFusion+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A66024B21ECB71B335C18B82EF791B67 /* MBLExternalThermistor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E3207AB2D85976BE06AECFA290AB0D4 /* MBLExternalThermistor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A6A7E663E1E7DA94E56FCF6EE311C7ED /* MBLGravityFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 84636ADEBFC31D02D2AA9BB00F220C37 /* MBLGravityFormat.m */; }; - A707F7632C90F0C99A4308C1070280A7 /* MBLExternalThermistor1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8425869ABD5EB8DBC51E5631741F1E52 /* MBLExternalThermistor1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A70F621E7F5086E8F6C5E63B9436DE97 /* MBLGyroBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 098C7FF3BE168997AB33405D503F5A2C /* MBLGyroBMI160+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A731ADAD169347FF7E5B549C1356F151 /* Bolts-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 48D83A0F6C825EE1E021F9AA06C6116B /* Bolts-iOS-dummy.m */; }; - A777EC5E9604E40CA758FFCC0074AC9B /* MBLDownloadOnlyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 61DA23203D750582CEBB4DDB7B099285 /* MBLDownloadOnlyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A77C7003F1152B18CF9DD0133EEA7F3E /* Pods-MetaWearIntegrationTests-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 0F2208FDC36513D69B88593F9B7EBFA2 /* Pods-MetaWearIntegrationTests-tvOS-dummy.m */; }; - A79FF6070B62BE0D4EEDBB5F7AD7771F /* MBLOrientationData.h in Headers */ = {isa = PBXBuildFile; fileRef = 297339BB993DE15AD32362BF537FCF93 /* MBLOrientationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A7C0D4CFECC8BDD8755BE947238C2284 /* DFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E093B6225A0D37B00C1C5B9CD123B21E /* DFUServiceInitiator.swift */; }; - A7FB412B5590A5FFC4A7B8A18318AA91 /* MBLProximityTSL2671.h in Headers */ = {isa = PBXBuildFile; fileRef = EEE2C38FE1144B7A77E1150FCC48FF3A /* MBLProximityTSL2671.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A86046077B8B5C0A41AB148BC7E644BD /* MBLNeopixelStrand+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F452562548AA032277EDAF36A3C1F4EA /* MBLNeopixelStrand+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A87014D7A85FFEC6BE70510A32DBFEBA /* MBLEulerAngleData.h in Headers */ = {isa = PBXBuildFile; fileRef = E3AD1BAB629ECA814247A5E73B8CD685 /* MBLEulerAngleData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A8A953C3C187AE8C4317FE3ABFD0C679 /* MBLTemperatureV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DB88D5E21CC6737F8A128219B847D7C /* MBLTemperatureV1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A8FBEEFDA7A96CC4841B7498865CF031 /* MBLTemperatureV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 13DC5F50967878257628BE72601421B3 /* MBLTemperatureV1.m */; }; - A9348A3B907A2F19FABCE53CE3A52C00 /* MBLFirmwareBuild.m in Sources */ = {isa = PBXBuildFile; fileRef = F1950DB31EFF9511CAAD020DE490A290 /* MBLFirmwareBuild.m */; }; - A9368D5E9E9EA3E231D55E9F83BC8716 /* MBLAnonymousEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AC77CDC011F6ABB4F5891B58CF47CB2 /* MBLAnonymousEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A9E1744C2063D0D47F61B415EF83C7F7 /* MBLMockUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = B3A0F41A9C9F3D4A6BAEE5B16DA8E124 /* MBLMockUtils.m */; }; - A9F0B91D8F104838C41BD0ECDE0A7095 /* MBLAccelerometerPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EAAE3E2C5294FB4D702F158809A0913D /* MBLAccelerometerPackedDataReadyEvent.m */; }; - AA163131DD70309267963C798151D14D /* MBLModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F04C343FC7E20D674466E19D6BF71FA /* MBLModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA3490B89AA5FF408AC96BC93A793382 /* MBLEntityModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 102772752E49EDB7667052D7350EB2E3 /* MBLEntityModule.m */; }; - AA3696DD083037A9C971227B7D3030B9 /* MBLDependentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F00482E0E8C8ADE2E784192F4043661 /* MBLDependentData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA412D65905804DC64F9FD7C9D59669B /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DF8E3C12A71CB3E4174655FDA95A0093 /* MBLBarometerBoschPeriodicPressureEvent.m */; }; - AA79F252C0CDE67D551838212C831C89 /* MBLAccelerometerBMA255MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 18BB70CAC175503B0836D3D7EF3C1AE8 /* MBLAccelerometerBMA255MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA9B0D67462D2DB4D096ED7935E67A77 /* MBLAccelerometerFreeFallEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 841ACC84A92CFE5A492E2328EDB8410E /* MBLAccelerometerFreeFallEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AACCC29A21F4405962820F25016FFC4E /* Double.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1355EBD6FF6202F9F89D9888F4BC95EA /* Double.swift */; }; - AAE7F25636A32F58448EACA0B6290C3C /* MBLBluetoothCentralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 32E5E18A48C5398D932D406B8D506A1F /* MBLBluetoothCentralMock.m */; }; - AAF62C196DBEE5BC88B9598BA6F12137 /* MBLLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = 71C9148C30A9AEBF8DA33E34D3D71D0A /* MBLLogging.m */; }; - AB1E960A356CB15CEE7621D38B4EB49C /* MBLMechanicalSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1245D808F6BCC15B8A902CE557F9AA /* MBLMechanicalSwitch.m */; }; - AB3ED8003F946811700EA92EF60DB540 /* MBLMovingAverage.h in Headers */ = {isa = PBXBuildFile; fileRef = 79D6876CB5FB9E0B295970DD856F7D37 /* MBLMovingAverage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB44EB4F0F86C31F4D5770DD705B0F60 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = D0942491B7067C7470A15A264D186D4D /* BFCancellationTokenSource.m */; }; - AB493B7386316D35B70B182D790999AE /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 763090C3CF598BCAF7A406BCC657053B /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; - AB4CC819E6B6C9512D19E295B1BCB615 /* MBLAccelerometerBoschRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA10E6994425E3176CC4206DFB8741C /* MBLAccelerometerBoschRMSFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB7BDD1240673AAD34FA737258F72EAC /* MBLGyroBMI160Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AA750E66901ECE028D826B3D8DA9552 /* MBLGyroBMI160Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB85F3E4BD64452ACED46541458F034C /* MBLAccelerometerBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = BBD2CD5AC9C224EF7A5EC8606ACED6BE /* MBLAccelerometerBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABAE4EA88D39980E9A12C89799952FA4 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A16C0B5246929397FC32751C828771 /* CoreData.framework */; }; - ABB4AA04BA14CA7AB9631C85DB931F0A /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AF4CD04C1CA0C935C555B4F0D3E0CFA2 /* MBLBarometerBoschPeriodicPressureEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABC72FA4F7B45E670EBDB29BE6BD8DD5 /* MBLDataSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CB82133272E40D5FE88AAFEE0E3AA14 /* MBLDataSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABD908EFA3EB3AC18EA303AB976F1D28 /* MBLOrientationData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EE1FB0DD41BD31701FDA36D7A577E33 /* MBLOrientationData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABE635281CFF829CB888D7D006932A52 /* MBLEntityModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 249139FB8D137FD0841B19206867C7EB /* MBLEntityModule+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC5D895F2FCE41ACCC07DC3E5C713EC9 /* MBLData.m in Sources */ = {isa = PBXBuildFile; fileRef = C3FF22CA55CEDA7F854443FF7BDB86C8 /* MBLData.m */; }; - AC9701302F80D6752C26675D0D7E97C3 /* MBLGyroBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 098C7FF3BE168997AB33405D503F5A2C /* MBLGyroBMI160+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC9C510D4565F428563AA542D07018E1 /* BFTask+Exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E178F0FC9498EFBD62A485883B8232F /* BFTask+Exceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACF044BA91508C4B5CF44386ADC64E69 /* MBLRMSAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B0F1458E563F8F2E0E9D3B15038D133 /* MBLRMSAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD487D65E873E713D239DA54DE6A228A /* MBLTimerEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC48CA96245E09799A29D95AD8C8C71 /* MBLTimerEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD7A54C251AD9E0C3055E122BF084083 /* MBLConductanceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 39406C785E452FAF5B389D4F86949543 /* MBLConductanceData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ADAFFAF98C54A8B4FBB46849890AABDA /* MBLMagnetometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 39A93D8D844389570DDA7A68F02881BF /* MBLMagnetometer.m */; }; - ADB7A8743CB54CDC26580A73948FA28E /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 154C63619035D967672EFF5169B9350C /* MBLBarometerBoschPeriodicAltitudeEvent.m */; }; - AE0DA387A8A9151AB46E93DF2F22DEB6 /* MBLMetaWear+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9AAFD4E4609EAE8A3637DD8B1CBB0C77 /* MBLMetaWear+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE38095A3FC7257764AAB422F99D7632 /* MBLEntityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFAD1F294B51CDE156111410C25AD9E /* MBLEntityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF502F3C97B182D6214C66909B3E1B7D /* MBLAccelerometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C1EDCB210888571A4674E8E85C415DAC /* MBLAccelerometerBosch+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFD8CE19D35A29AEFA9D8FCFDFA3F622 /* MBLDataSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = BB3630C4C23448737131CCDFA574952F /* MBLDataSwitch.m */; }; - B0135E000349F9922FD27FEBE86326C1 /* MBLAccelerometerMMA8452QFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = BBA69F3B3472ABC188162666FEA7E552 /* MBLAccelerometerMMA8452QFormat.m */; }; - B02241139E7FFB6606CF7847CF2056EF /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 146C6F2EFE7859BBE990B6949EEB29FE /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B04AC63B6C8E50AD891608FC784C9A99 /* MBLProximity.h in Headers */ = {isa = PBXBuildFile; fileRef = 0AF908A6021CBB2D0312C0A243052E7A /* MBLProximity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B04E8CB6BBAEAC94243635AFD8AA6687 /* MBLLoggingV2.m in Sources */ = {isa = PBXBuildFile; fileRef = 3FE8137EC2AD26C62D15D585531C0FA4 /* MBLLoggingV2.m */; }; - B05D3618EDBF132337AA0ADBC787527E /* MBLMacAddressFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 1ADE8BBAE5CCB97867FB931B9D024F2B /* MBLMacAddressFormat.m */; }; - B070DCA926346C4D227EEDF810802923 /* MBLNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 97EED75612896E793A8196DE13BFBA02 /* MBLNumericData.m */; }; - B0729130E273672EDC2DC60946E7E9F3 /* DFUController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10BF4E9DB1C681605A1E1DE7A7352D47 /* DFUController.swift */; }; - B081A775CED2A802F865B8C7CA108185 /* MBLGPIO.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D540DE91D9349411A42CBFA9E1817D2 /* MBLGPIO.m */; }; - B0B86D63D28415A00137332BBBD8104B /* MBLLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BD8C04DD86664C2713B747FE190C751 /* MBLLogging.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B119F8D7CD7D4424E020CED222F4C6EF /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F3A760FF1FEA0F393837CFA254115DA /* Bolts.framework */; }; - B12A064B23356F18BD6DE8EDAF8D82AD /* MBLMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = DBCEE7FBDB19D37FCD244D897C836B59 /* MBLMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B130F2450A66DEE71C430CC105AD15F5 /* MBLAmbientLight.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CA104EEA8E4AEA2C3540CC3CE284922 /* MBLAmbientLight.m */; }; - B1650C9B14D53CE1153E85706505360E /* DFUStarterPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = C0B574039288B136D02D4D4AA7A41748 /* DFUStarterPeripheral.swift */; }; - B1B0289A3528BE57495B541B4488F96C /* MBLMockUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 66BD7978E06A8765D037FC38B585C13E /* MBLMockUtils.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B1BD6B2FFB9900CC5CF96E13D8F1C8BA /* MBLTriggeredRead.m in Sources */ = {isa = PBXBuildFile; fileRef = 2775F63A5885A6560DF256662375885D /* MBLTriggeredRead.m */; }; - B1DE3AE7DACC6BE8E13B6D08678D0DF5 /* MBLDownloadOnlyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 61DA23203D750582CEBB4DDB7B099285 /* MBLDownloadOnlyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B1F893DB33F0A19DAAE787F0FCAAF67E /* MBLAccelerometerBoschTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C3F37BD6E8C1B5B209223A4403C6820B /* MBLAccelerometerBoschTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B21105827ECA916DAABEF186EC4CD413 /* FastCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB225B11C55D8185DACB2639597735A /* FastCoding.framework */; }; - B223D61D4BA5E31A4E6BA051890B46F6 /* MBLBarometerBMP280.m in Sources */ = {isa = PBXBuildFile; fileRef = C5B0A790FBDDC8943DD967E22F5E6484 /* MBLBarometerBMP280.m */; }; - B2274212B720E07A85819897FF5F6FA8 /* MBLSettings+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EFC64ABBE5E34175B525CC0AF9B7AD46 /* MBLSettings+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B2655837A417361C65677B1190DDEB25 /* MBLDownloadOnlyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 33264FC0B93C70A504D49AC7A66C41FF /* MBLDownloadOnlyEvent.m */; }; - B272AAC353649E367B9529DA39E93B4D /* MBLAccelerometerBMA255+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AC165D8BECA691BFCA6C6045C8C5762C /* MBLAccelerometerBMA255+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B2B807AAC7BD8633B36977B143B14570 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EB5771483BE42EC3D5F131B912DD7DF2 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B33888E4CE3D616BA1F76F6011C45EEB /* MBLAmbientLightLTR329.h in Headers */ = {isa = PBXBuildFile; fileRef = 9030BAA310B1AD555332EC41BE83E228 /* MBLAmbientLightLTR329.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B36B949E99D14E5E8ADF5CEBEE056DCD /* MBLGyro+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 85CE3C145F9D23BF8E0DB8462C048C88 /* MBLGyro+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3BE3D44FB36EBBEDB5C18662912B8B1 /* MBLAccelerometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0A486169E0D6D95BE461814DD68D9500 /* MBLAccelerometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3ECCC626D44A58A90DC313431A3044F /* MBLHapticBuzzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 06442DAAFF21721B0E2C64C15BC6F28E /* MBLHapticBuzzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B3FF00EAB1725AA44452F203A0EED8D8 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B8BE1DCE7543EB7D737BBBEBC88EA25 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B411A31F132646062981E434C3827219 /* MBLTemperatureV0.m in Sources */ = {isa = PBXBuildFile; fileRef = 0120B86E2AE95D793C101E04748002AF /* MBLTemperatureV0.m */; }; - B414B1553A0DC6C9D2081076DEE9B98B /* MBLConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 684ACAB6B74CA94DDD2CBE56FD8D20B5 /* MBLConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B48A409B6F0F125B05C55AE6A3051C62 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = DF37D3E8E70A2D9EE860B2877A1F368D /* BFCancellationToken.m */; }; - B4A94E2B0D4C92CC945C9BFCA5B117D2 /* MBLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = E33E51117A7906AD725BC5896DAF7AB9 /* MBLLogger.m */; }; - B4E999BE36CACD18DBC184C2AC956E9C /* MBLLED+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A343C0D07D72D5EED6731AA686094E0 /* MBLLED+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B4FA627F44B5373008D74C30D8C2854F /* MBLAccelerometerBoschOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F906C88D677F6440EA3F1A5FA691E7D4 /* MBLAccelerometerBoschOrientationFormat.m */; }; - B5344BE6C119B850120AAA32A0F32E94 /* MBLBitmaskEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 44178045C194F6874F39F04A97D1FEF7 /* MBLBitmaskEvent.m */; }; - B5FEAFCBEDB7DD7CECE85DED81F18F11 /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DA6E5CE6CE505DF838D77C452AD13B6F /* MBLAccelerometerBoschPackedDataReadyEvent.m */; }; - B62600F993DAD24E968AAFD708B8F74C /* MBLAccelerometerFreeFallEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AD8EF5FF275DB50EA6F98F6CE294C071 /* MBLAccelerometerFreeFallEvent.m */; }; - B64660800E1059233F05E401353AE092 /* FastCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB225B11C55D8185DACB2639597735A /* FastCoding.framework */; }; - B679CA13314E81C0C4404CF57DC457EE /* MBLEntityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CFAD1F294B51CDE156111410C25AD9E /* MBLEntityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B67B337BA2FA38B3FCD311C0C85A1F81 /* MBLBluetoothCentral.h in Headers */ = {isa = PBXBuildFile; fileRef = B1B786E36962E36D6B767C3324078E7D /* MBLBluetoothCentral.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B6B7AAED50116284CED3190FB3039C83 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF5BC13734A7063650C064D4527068B9 /* CoreBluetooth.framework */; }; - B6E0E83AF092A58EDF8A6ED1077DA894 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF73187F3F6E0F4E6FC6E5710081DBA4 /* Foundation.framework */; }; - B6EF16CEB707294E1AFD32F00FFEC41F /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = DFD327E643DD1A34007F37CE8094CEE1 /* BFCancellationTokenRegistration.m */; }; - B7233AFC7384A8BFA78AD310266888EB /* Zip-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F7184178920F6BD3FB7315EF3967744 /* Zip-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B7A3932E0B51526A242699C8EDAFCF5C /* SecureDFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E1A178212708CCC5AA04F75029CF605 /* SecureDFUControlPoint.swift */; }; - B7B08970522141820C43DC3905919E57 /* MBLEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FECFBC4F9F95E5A09CC21E2F8A80B38E /* MBLEvent.m */; }; - B7CB1FAC1456A34C55D7E8FA6A048175 /* MBLAccelerometerTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 69F3741316EE19AD0AE240BFCE27C008 /* MBLAccelerometerTapEvent.m */; }; - B7DB9F7CA2C6E57EF2F632902C367399 /* MBLQuaternionFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0861EF75CEE3811500BBCE28BDAB4BBD /* MBLQuaternionFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B83D310D73E21CD64001CE49C769422E /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E2973DEE2198C544E205D3FB1EEE9C59 /* MBLHygrometerBME280PeriodicHumidityEvent.m */; }; - B8B05263341096645609EE42966A8AD3 /* MBLAccelerometerMMA8452Q+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C5DE43A24BC32E8EE90C94105AF19F80 /* MBLAccelerometerMMA8452Q+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8C2D1C42D95C530BFDC535397034A5F /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA36C50735014AE4014007C7F1826E08 /* Zip.swift */; }; - B8C5053926818036540DE1F634F2C40F /* Manifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6132FA286854C673503A7644B14E6C43 /* Manifest.swift */; }; - B91794259B1BC2F0BECF65782789CDD4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */; }; - B93349BD5C72708D265D6E3020E20C9B /* MBLNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 328CC030B05EEF6E7D428A59949C6557 /* MBLNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B94B923D29E963E912E2FEF68C89BCC0 /* MBLFirmwareUpdateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 22074BEB840408CE90EAF720DD456558 /* MBLFirmwareUpdateInfo.m */; }; - B961E50E75BECA81FF8A50A973EED838 /* MBLAccelerometerBoschOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F906C88D677F6440EA3F1A5FA691E7D4 /* MBLAccelerometerBoschOrientationFormat.m */; }; - B966D4A042ABFE575CFBF05F515CDD5B /* MBLRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = C78C6DCAA18927FE63D0D8C43B0CFF2F /* MBLRegister.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B9AF8FD027C2A31BFFCC3830BA48A269 /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E2973DEE2198C544E205D3FB1EEE9C59 /* MBLHygrometerBME280PeriodicHumidityEvent.m */; }; - B9DFE6922DEF590665531AF83E79B896 /* MBLCorrectedFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE5F82F8AF57D1593408A9D6695260F /* MBLCorrectedFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA19159A55B77ECDC97D7AE06111810A /* MBLNeopixelStrand.h in Headers */ = {isa = PBXBuildFile; fileRef = E65129647907D6602565EDEA64B50EC5 /* MBLNeopixelStrand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA57F9D44BD4BEF9B66B123DE338729A /* MBLEntityEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 18DDDD5E1E2ADE29C7D340B61A72DAD1 /* MBLEntityEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA64167445566BED4FEB166068F07F64 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */; }; - BA6AB754F76F5F29EF78F551430300AC /* MBLDeviceLookup.h in Headers */ = {isa = PBXBuildFile; fileRef = CE1EDADCFE8155984972FD1A2B4CFD4F /* MBLDeviceLookup.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA8E845C5FDC628B6B39F07D4E9796EB /* MBLFirmwareBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 4D36A4050ABE4AE245A52AA00EB0277F /* MBLFirmwareBuild.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAC90C0D4A34C2CBA4E88FAEAEEF3DB4 /* MBLTimerEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC48CA96245E09799A29D95AD8C8C71 /* MBLTimerEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAE0B4F79952BF544D14587C3DE6DE58 /* MBLMagnetometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 39A93D8D844389570DDA7A68F02881BF /* MBLMagnetometer.m */; }; - BB57B0723D6558B986BF08248A94BE92 /* MBLConductanceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 39406C785E452FAF5B389D4F86949543 /* MBLConductanceData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB6626C542BE9702B9EB1B159D6CF774 /* LegacyDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE604D5D1F79811D66866CD63073922E /* LegacyDFUService.swift */; }; - BB94BA7E3688224050E4A8663C3CC084 /* MBLHygrometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AB376E87546F5C959DF1E7882959E6A /* MBLHygrometerBME280.m */; }; - BBA74D8B35A606A36CD8D7431AB0A471 /* MBLOnDieTemperature0.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7EC23F7DA1F1EF030CBD0B82701411 /* MBLOnDieTemperature0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBD622AC9149FF274856D59C51071A61 /* MBLGyroBMI160AxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 101622E47D549B802652C0917F0CC84D /* MBLGyroBMI160AxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BBF339991229F58933A22BCB392C8C40 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5898A42A321FD0618A921C0E77E8A4 /* MBLAccelerometerBoschTapEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC35B5E4AAE85D1B40ECEFD5BD015D1E /* MBLAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DD1DF3FEB5553DD83EB3595CEC0F84F /* MBLAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BC4C7BBB344C42F61AD5B3B5E53CA012 /* DFUVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3322753074CE7A5BC2F0A5131563F267 /* DFUVersion.swift */; }; - BCCDE241D1B64E7B8FDC2ABED6C0D536 /* MBLBluetoothPeripheralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = D71F96F841281B595282C44BF5FF857F /* MBLBluetoothPeripheralMock.m */; }; - BD5D35A06233056C2F0891C14C53CD75 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D638CE0D4E71C4047F8878745F8486D7 /* MBLAccelerometerBoschAxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD5F0E0E99CF7B46CFC5EAB302CF4308 /* MBLGPIO+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C355EC8ACB217A38B8BEA29DB930D04 /* MBLGPIO+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD7E13F6FBD53D9B99299B0E09D6DC7F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF73187F3F6E0F4E6FC6E5710081DBA4 /* Foundation.framework */; }; - BD9262F3843551A9164325A4035F0F22 /* DFUStreamBin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91AD9A540F4FC3CC34E90BBC019DF220 /* DFUStreamBin.swift */; }; - BE024458766F29B1BC5FEC59E953B918 /* MBLNeopixel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EC059FAD710FE43BC68B1CE0F8D860A /* MBLNeopixel.m */; }; - BE20476AAF6FFEB3E8F5CD26EDCA136C /* MBLAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 5C045425809353C9AC26BC4A22FCF39F /* MBLAnalytics.m */; }; - BE860773BD21520A6DC2E7942F4F1D55 /* MBLAccelerometerBoschFlatData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8E467C7C82562087AC08D2E87E1D227E /* MBLAccelerometerBoschFlatData.m */; }; - BE8A3053079F1E76419FB0D57CE813E4 /* MBLLoggingV1.h in Headers */ = {isa = PBXBuildFile; fileRef = DABD5D15B57D8F075CA743D1528D890E /* MBLLoggingV1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BEBCB7D4A01B308DDAB602CE86B8DC76 /* MBLConductanceData.m in Sources */ = {isa = PBXBuildFile; fileRef = 8683A0E500A656B29F04A8F167263386 /* MBLConductanceData.m */; }; - BEC94EC3FE2E3133438ED2584C4BD3D0 /* MBLData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DF82D0130B914E4BC8C5197562A63F4 /* MBLData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BED1FCFE73C31CAC6EC77D57BA06E62D /* MBLAccelerometerBoschFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 494205A39329FF5AE2B079EE3125B617 /* MBLAccelerometerBoschFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BF86A3CCCE7C2541ED5AD5E606E39944 /* MBLEulerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 85795CBE32C64342DEFEA3F17C5EF7C4 /* MBLEulerFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BFD99B3A069FBE2B88162BB5FAA2C83B /* MBLDispatchQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = D7A2BBD6DD7144921CBFA24FE2770E9C /* MBLDispatchQueue.m */; }; - BFEAFD0D03F42AA5D1F5B721B587397D /* MBLANCSEventData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BFE41FD08D80647E835161681D60921A /* MBLANCSEventData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C000898533EC015B211A5D6667E4AFC3 /* BFTask+MBLPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = F9243C73A502B4C0654BF88F02CF9732 /* BFTask+MBLPrivate.m */; }; - C0085030A02778FFD4DF3DA7D5C611FA /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = F12B911756D24E4437801B5DC7B003EC /* MBLAccelerometerBoschPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C02700C74AED223298C2AC704672AAF8 /* MBLNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 97EED75612896E793A8196DE13BFBA02 /* MBLNumericData.m */; }; - C02C917A265BABABA2A022D0AF0C0E45 /* MBLBarometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C9014BE27A2ABDE098632CD6B8F846F /* MBLBarometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C06EE5165D762F25FFACDBB12823F368 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 430EB1426581F605F9AF827458707760 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m */; }; - C09306CC8ACA55C1EFC68C857FF1F6A6 /* BFTask+MBLPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = F9243C73A502B4C0654BF88F02CF9732 /* BFTask+MBLPrivate.m */; }; - C0BC5E17D2416809DFC008CABD5C75F9 /* MBLHygrometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AB376E87546F5C959DF1E7882959E6A /* MBLHygrometerBME280.m */; }; - C0CB03A8E63D989C9555184BB9170DE7 /* MBLMagnetometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = D015AFF3E32DB592E65FF30976F85E80 /* MBLMagnetometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C0EE0AF86146E411945A7A61918C6161 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2173E09EFD7D86F6C58907D0B83C31AF /* MBLAccelerometerBoschAxisReadyEvent.m */; }; - C1EA92B856F1EB374CF71BE1FF034124 /* MBLConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 14EF7A0FCCB0842B76635115328356DD /* MBLConstants.m */; }; - C1EAD1E2551799CC38FBFE0B0E96B328 /* MBLEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 78621B24EBE86A94377658DA1B69BA7E /* MBLEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C20A810D37E51F513A041B6E6B3EAD43 /* MBLHapticBuzzer.m in Sources */ = {isa = PBXBuildFile; fileRef = D57BE345C3B103A8511DD25E291757E4 /* MBLHapticBuzzer.m */; }; - C2387761E3B1924AA88F24B86580F9FC /* MBLPhotometerTCS3472.m in Sources */ = {isa = PBXBuildFile; fileRef = ABF694E5002B9296413AA84DDC5B0D02 /* MBLPhotometerTCS3472.m */; }; - C2E2C0A35CD801CE4F6890092C42E897 /* MBLTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = CDE37A784C87668D3E890C6704A31321 /* MBLTimer.m */; }; - C30783276D129CF37A89C63D7EB754A5 /* IntelHex2BinConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = D7EAC0BC994FB7611A298DE937C3E8BF /* IntelHex2BinConverter.m */; }; - C3106541CD36B9208682CE1BDACDDD9D /* DFUStreamBin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91AD9A540F4FC3CC34E90BBC019DF220 /* DFUStreamBin.swift */; }; - C3625D7C66F4B5D60F37E7B336CAC3C1 /* MBLNonVolatileState.m in Sources */ = {isa = PBXBuildFile; fileRef = A0DAFCFCA37D81B01944B09B50BD2EF8 /* MBLNonVolatileState.m */; }; - C3B810189B466121827436DDD9D24CCB /* DFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08850145862683CD96C0CD00D9C712D3 /* DFUExecutor.swift */; }; - C3E1D4E6681A5A6FC548C8901435AE37 /* MBLEulerAngleData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4ADE0C1303FA4B9E8EA06EAB9FBA1986 /* MBLEulerAngleData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C3EB985173DD5201EB7D23C988EE97E5 /* MBLAccelerometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 11DD487EEB31D0A2E1939F4FC9874AE8 /* MBLAccelerometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C4225905DCA4AF8625D2F4E294153787 /* MetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 09A2B8795827FF822C2667CBDAE25456 /* MetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C482207C72BA44088654914C80321303 /* MBLNumericData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C9247E893E625B829FE942FD1F6FF3 /* MBLNumericData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C4878B054E5BC9C13057AF6198502540 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AF4CD04C1CA0C935C555B4F0D3E0CFA2 /* MBLBarometerBoschPeriodicPressureEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C496B135776B64230FCE2FFD066BAC09 /* IntelHex2BinConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = B00D1E78C7013DB32308E26A9FD9D26E /* IntelHex2BinConverter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C49EFA34EF8C71A86653586C27773FFE /* MBLMetaWearManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AC54B32E4666B6C1892004CAB3F5F4F7 /* MBLMetaWearManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C4A368BCC62B2B90265817EF4B17139B /* MBLExternalThermistor0.m in Sources */ = {isa = PBXBuildFile; fileRef = 103B453C78582AB73039AF2ACD28091E /* MBLExternalThermistor0.m */; }; - C4C9F7CD4FDAC6898C72C92918F7DD85 /* MBLAccelerometerBoschOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = CCE5B9B41483C36E8C622F930C9310BB /* MBLAccelerometerBoschOrientationEvent.m */; }; - C4E458E37674616FB76B5BEA48003E36 /* MBLEntityModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 249139FB8D137FD0841B19206867C7EB /* MBLEntityModule+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C560D4FAB577D9DB27A98A463874D555 /* LegacyDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = C68ED4B0184AB99F750D04E9F54595CB /* LegacyDFUServiceInitiator.swift */; }; - C57A70AF286B0007FB3510A2FF46E2E9 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = D0942491B7067C7470A15A264D186D4D /* BFCancellationTokenSource.m */; }; - C5A7D383A03174E76EF62685694D694F /* bmi160.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F8F783E140BB600631BF26096F6498C /* bmi160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5CEAB0AAAB8F077333AB408BF9C792F /* BFTask+MBLExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = E8B316769B25CA5CFF1037BB6E6C5DFA /* BFTask+MBLExtensions.m */; }; - C5CF2C475C28073866CD3FECD3652D51 /* MBLMagnetometerBMM150.h in Headers */ = {isa = PBXBuildFile; fileRef = E4EDFCEE5B72864E7DA91A1762E564CD /* MBLMagnetometerBMM150.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5F37C6D9BDFC7B406F8944EDD224D12 /* MBLTimerEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = CDC48CA96245E09799A29D95AD8C8C71 /* MBLTimerEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C5F4B44B27B07B753D9CD1B8FD455C6D /* MBLAccelerometerFreeFallEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 841ACC84A92CFE5A492E2328EDB8410E /* MBLAccelerometerFreeFallEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C6226BFA7CA08D6F7602E45A28EFD2CD /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = B170794DD226B26CAD7042834F2EE58A /* BFTaskCompletionSource.m */; }; - C6721CCD9F32EC0A0CF471D9F5412F93 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = DF37D3E8E70A2D9EE860B2877A1F368D /* BFCancellationToken.m */; }; - C6B5D2208046C28BDFBA4A8CC1628E49 /* LegacyDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D65E670B1C6B924E8E192F3FED06F15 /* LegacyDFUPeripheralDelegate.swift */; }; - C7190FA4B14F1499D0454E9D4D60512C /* MBLAccelerometerBMA255+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AC165D8BECA691BFCA6C6045C8C5762C /* MBLAccelerometerBMA255+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C71B161744C48028ABF0320371C16756 /* MBLRegister+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FC6612B69C9D0CE8EE2D7A066A56C221 /* MBLRegister+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C73E671FFE4136EA1ABC48E393E500F8 /* MBLAccelerometerBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F27D4B0C8EECC6EBF7D90305D31230 /* MBLAccelerometerBMI160.m */; }; - C77DECD72D611784F869DBA6DE9CD3D6 /* MBLHygrometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = ACCF7CA22DE0EE99184FAFF40C4412D1 /* MBLHygrometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7B331956AF3191FDDF8D4E79E5944D9 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */; }; - C7D3B4DD0A1EBE7FCE8A754D8AB6E1C1 /* MBLRGBData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FEFC752FCC73CDD4669A2B67A313F16 /* MBLRGBData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C844D956C0B9EE9A60785DF0669352E1 /* MBLLoggingV0.m in Sources */ = {isa = PBXBuildFile; fileRef = C44502A1C3E2BDFC2E9944376182C74D /* MBLLoggingV0.m */; }; - C899530C4536F05364FCB4FA69698210 /* MBLTemperatureV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DB88D5E21CC6737F8A128219B847D7C /* MBLTemperatureV1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C94BFAF0925D10777E3FBFF4E280FC31 /* MBLEulerAngleData.m in Sources */ = {isa = PBXBuildFile; fileRef = DE30062ABD960E8C08676300ACD20D29 /* MBLEulerAngleData.m */; }; - C95A05164E641476BD7A5C9C3FE6AD4F /* MBLNumericData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C9247E893E625B829FE942FD1F6FF3 /* MBLNumericData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C9E33598F910D79C18623A23A86C39D4 /* MBLExternalThermistor.m in Sources */ = {isa = PBXBuildFile; fileRef = EDA1A8E4F627CEA9CA9B633568C2F524 /* MBLExternalThermistor.m */; }; - CA0D8D7DE6F9BF35758886821432480E /* MBLBarometerBMP280.m in Sources */ = {isa = PBXBuildFile; fileRef = C5B0A790FBDDC8943DD967E22F5E6484 /* MBLBarometerBMP280.m */; }; - CA492D5656A4D1D98C7C11C757A6374D /* DFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F950DFDB30AD3DFE41EBB7542B85C70A /* DFUService.swift */; }; - CA62D25D51E04D54FC074D386B34FAD2 /* MBLI2C.m in Sources */ = {isa = PBXBuildFile; fileRef = 108D19978FED2D6CCDA0F6BB617FF38A /* MBLI2C.m */; }; - CA66B68FA8A5546FC287B1CDA5634FE5 /* MBLNumericFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = CD82AD8A7C657338F4987435E20EB388 /* MBLNumericFormatter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAA4F209CDE6962EE2CA57C5F7E5D46A /* MBLTemperature+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BF37B13956F515D176ED1150BBA2BF23 /* MBLTemperature+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAA93BD78B66DB0E294922994A99C468 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = AF442C42590A7C1759F86A2C54EE7027 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAAB34A9ADE0C65CECC7B9D87EA3DF42 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C6EF3DD06DCF465CB6B9BF1E1C048270 /* MBLGyroBMI160PackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAF133AFBE185B7C41ADA45B2801335D /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 792344F36306444FD588737F547C1CBD /* MBLAccelerometerBoschLowOrHighGEvent.m */; }; - CB52738C5C2033CD7E9E3F4DA6457245 /* IntelHex2BinConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = B00D1E78C7013DB32308E26A9FD9D26E /* IntelHex2BinConverter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CB862CDB23ED480E4E9158B9A4F48A96 /* MBLRMSAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 52CC46DA65DB0259683868D5E443E82B /* MBLRMSAccelerometerData.m */; }; - CB968E72861A65241DA2903CD0684539 /* MBLAccelerometerBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 76F27D4B0C8EECC6EBF7D90305D31230 /* MBLAccelerometerBMI160.m */; }; - CBA0330446B059EF95F386335AF63D24 /* MBLSPIData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 792F603BFB6C85B0F5D8CB9889BC30AB /* MBLSPIData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CBF2DC4EF01F7137214EE6A67F333DD3 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19DAA050BDB87A1D6C1937CD796A986C /* MBLAccelerometerBoschDataReadyEvent.m */; }; - CC249911A4A51B5BC7F78E0F379BEF94 /* SecureDFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E1A178212708CCC5AA04F75029CF605 /* SecureDFUControlPoint.swift */; }; - CC4FFF8DED2D872E2158E1A9327CBD00 /* MBLGyroBMI160AxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C778CE095A0DBF3235157B58561F1329 /* MBLGyroBMI160AxisReadyEvent.m */; }; - CC73F1D18072AFE9B8A48B4100D93B8D /* MBLPhotometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 19CD19E40DAAF05256018C6B1F12F55D /* MBLPhotometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC83C06B72CC7A60AC577F6817CBE5D0 /* MBLBarometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 2C9014BE27A2ABDE098632CD6B8F846F /* MBLBarometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC8E1CC855D215EAD7D24E18BF550147 /* MBLMovingAverage.m in Sources */ = {isa = PBXBuildFile; fileRef = 2DFA861A03763BE92BA107951F76F0A0 /* MBLMovingAverage.m */; }; - CCC94D73DC917D8008DEA6D09DE8D3D3 /* MBLAnonymousEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E16E857553131544D16A9490053C5F07 /* MBLAnonymousEvent.m */; }; - CD4397297ACB01C9948199313A97F8AE /* MBLEntityModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 851B1F784539DC188479DDCA5FEC1F8D /* MBLEntityModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CD84B3DBCF335111C24AE81043DA0743 /* MBLPhotometer.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D6598CDDBF33488FC69B5DFF58C57C /* MBLPhotometer.m */; }; - CD8E2449388784195394844FA6A3B173 /* MBLModuleMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 94E08C3E838F46065D9A579E08D26F1F /* MBLModuleMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDA5CA3676BCD28406A55C01D1C8C8AF /* MBLAmbientLight.h in Headers */ = {isa = PBXBuildFile; fileRef = D4C71EC1407F5E40D46788C5806EBAC1 /* MBLAmbientLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CDB09B2756FFACFC98DF23E205202262 /* LoggerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B73BFFFDB3046740A4D7A599A06F846 /* LoggerHelper.swift */; }; - CDD4FE9B8C5F27AAD441C3203B8E898E /* MBLPhotometerTCS3472Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 5F0D1110D45FA365DBC5367085D1E83A /* MBLPhotometerTCS3472Format.m */; }; - CDE7C44B94C90CAB1057957EB414223C /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = D2182E483FD05DCE8941DE26DA14FE7A /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */; }; - CE19C84A9EB23CD573C44210EC0AD60D /* LegacyDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D78E38F964F3EDDA0C7B1B3EF2DA0E /* LegacyDFUExecutor.swift */; }; - CE6977FDB4CBCF8DD0B3D489B6C6D840 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AF4CD04C1CA0C935C555B4F0D3E0CFA2 /* MBLBarometerBoschPeriodicPressureEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE7416CC794E98270DBD647CC2D09B8E /* MBLCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 77004055E8B046B2F94C36501CA986B0 /* MBLCategoryLoader.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CE943B09A544B3335C3E48D7171DF800 /* MBLDataSample+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D0FED9CA66384F76DECF70F875B7267B /* MBLDataSample+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CF370F22C3AFC09BDC8219E43E56C693 /* MBLQuaternionData.m in Sources */ = {isa = PBXBuildFile; fileRef = D09F8208C59945BF9BCA2E29C547665D /* MBLQuaternionData.m */; }; - CF7554868FC1B072F6454D28AC3E70AD /* MBLAccelerometerFreeFallEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AD8EF5FF275DB50EA6F98F6CE294C071 /* MBLAccelerometerFreeFallEvent.m */; }; - CFAE7B6C80B820934325D48E495836A7 /* DFUStreamZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4494AC85D83F4C58922224D3BC0FFC3E /* DFUStreamZip.swift */; }; - D001E16FC29DC6F504870C81ACB0A265 /* MBLDependentData.h in Headers */ = {isa = PBXBuildFile; fileRef = 4F00482E0E8C8ADE2E784192F4043661 /* MBLDependentData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0DDD6B2BA7DC088ECD37A22D4245C4A /* MBLGyroBMI160DataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 1CB01AD35839796CD59C88F332642A29 /* MBLGyroBMI160DataReadyEvent.m */; }; - D1029BA5E05BFFA12F30C5EE45CF9849 /* MBLCorrectedFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE5F82F8AF57D1593408A9D6695260F /* MBLCorrectedFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1032B11E97EFCA22CD3612F8E7B926F /* MBLModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 87F19309204F07BA1A90389E5292BAA1 /* MBLModule+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D115F844E8B3CFFDEDD5937EFB9ADB9B /* MBLSerial.m in Sources */ = {isa = PBXBuildFile; fileRef = 04CBB3EAF42BB1BE4A3C1BCF71A83A84 /* MBLSerial.m */; }; - D11E3C980B51A252C2F7E291A6D4C0D8 /* MBLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 065B9A18331BB5E77686A1A37B93AB89 /* MBLFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D13B631A6E9F6FB20784D1020691B9ED /* MBLDataProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = EA8956DD984CD12941D9C8124A4C9C11 /* MBLDataProcessor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D172174C54DED3B2FE534968A05A716D /* MBLPhotometerTCS3472Format.h in Headers */ = {isa = PBXBuildFile; fileRef = E4682D51E341672CE83B830F1F7E405E /* MBLPhotometerTCS3472Format.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D1794E547A7CF417011AD9C2DECD99E7 /* MBLI2CData.m in Sources */ = {isa = PBXBuildFile; fileRef = 18D0C4AE392CD54EE51E540B5D17D335 /* MBLI2CData.m */; }; - D193DF7EAA5B44EFBEEEF2D1EB098D5D /* MBLAccelerometerBoschTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FFFD05307348ED7C574EF3859B422B0B /* MBLAccelerometerBoschTapEvent.m */; }; - D25CCE0CB7B39032060365E407CEDFFB /* MBLAccelerometerBoschFlatEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C06DE03D80A35DF40079D0DC1D26480 /* MBLAccelerometerBoschFlatEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D25FF78376EA4ECD3A4B8DF4C96E06D3 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DAE74CFD55BE7FCB07DE2A22CCE24E5 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2680D1598855CC3BDD713C73805F688 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA36C50735014AE4014007C7F1826E08 /* Zip.swift */; }; - D2C697E8CA4243B5765260062FC5BFBB /* MBLBarometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = C5038CCCAD9C3B1597C329422A04A10F /* MBLBarometerBosch.m */; }; - D2C71EEB90F1E6FEA1AE39B0BE58873E /* MBLEntityModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 851B1F784539DC188479DDCA5FEC1F8D /* MBLEntityModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D30B019042B897F3CA6FDD633C17298C /* MBLAccelerometerBoschRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EBA10E6994425E3176CC4206DFB8741C /* MBLAccelerometerBoschRMSFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D31E708E543FA4AEE438500C033F1B30 /* MBLLED+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A343C0D07D72D5EED6731AA686094E0 /* MBLLED+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3255028B1C6820219F92F60AFB50E61 /* SecureDFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = B0054890AF2606207216F2072858B5AE /* SecureDFUPacket.swift */; }; - D32CB6778719B3FC0EA56DFB893D57F3 /* MBLGPIOData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6488DE19FA291681E79AFB6D915611 /* MBLGPIOData.m */; }; - D32DFE1ACDC0BBE8201B274DBAE9D13C /* MBLI2CData.h in Headers */ = {isa = PBXBuildFile; fileRef = C31C3C37A5B28C48919E378674655A95 /* MBLI2CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D3FAED7AFC302016B2B80A93FBFCD038 /* MBLAccelerometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DF122BCA44DEBD8F20F96652F7A2EA94 /* MBLAccelerometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D401B839D2D0E6DD8FAC812098A3AC1B /* MBLEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 8755BF1875A2CDF639F20DED1B9D0C2C /* MBLEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D483400A68C349137BC52BAAF91815A1 /* MBLNumericFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 04A4C08307A0807A13DF6337A194A7A9 /* MBLNumericFormatter.m */; }; - D4ECEDD944E4103FF64E84E3FC74C6E1 /* MBLAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = 077DD2BC11F0A7ADDD507D7CFD5E9B3D /* MBLAnalytics.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D56E5D21E56E99D931FDCABB21825153 /* MBLMacro.m in Sources */ = {isa = PBXBuildFile; fileRef = 9D144E6E435DBDDDD0D91240069800D3 /* MBLMacro.m */; }; - D5AFDD812C742CC9753E2915F379CB5B /* MBLAccelerometerBMI160StepEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BBFA2A124C5CF5541408059671A33F65 /* MBLAccelerometerBMI160StepEvent.m */; }; - D5D54F55ED137D2481FA26721057EC70 /* MBLBarometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 9E17C60212960E5BD204BBD874B9C3A1 /* MBLBarometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5F095852C381A58FC3F3905942F253B /* MBLStringData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 30380F8CC34F2968DCC11BFA184B2CE8 /* MBLStringData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D628D5BBAE9BA92B2063E1E661987398 /* MBLCorrectedFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DB63EFD747A1E47D68C8FDC39ABB0F7 /* MBLCorrectedFormat.m */; }; - D6764370ECCB6EF4C294EFBE35D589B7 /* MBLNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = 97EED75612896E793A8196DE13BFBA02 /* MBLNumericData.m */; }; - D6D47240A32C08E992C949E748597240 /* MBLDataSample.h in Headers */ = {isa = PBXBuildFile; fileRef = E122F691BE8C2320CFFA602948F9C652 /* MBLDataSample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6D48914E583F6E111C68172DA1E0C27 /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = FB1D3BBE2E126BC29F81415209EF8F1A /* BFTask+Exceptions.m */; }; - D71EEE218FC048B2D0979D845A3D7E08 /* MBLHygrometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 352E1631A56726C30EAE50929ED999C6 /* MBLHygrometer.m */; }; - D742DF405F753AC892129A8E0B599AED /* MBLAccelerometerShakeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E95B4734AA96D0221CFDDE954406F997 /* MBLAccelerometerShakeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D74C14587ED6B87C5B13011C77860FBD /* MBLRGBData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 54781085AAAF8C81138D0EABE060B960 /* MBLRGBData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D7615D158F5744FD9E95F7A2B7BEE26C /* MBLAccelerometerDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F9C227AA6932602ED1E3B2AFC30A1D10 /* MBLAccelerometerDataReadyEvent.m */; }; - D7A5C2CA3B4AED75EFAB0EF871E5CBED /* MBLBluetoothPeripheralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 2622409A6E1318E8A16282456B61FAAA /* MBLBluetoothPeripheralMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D7F63B0C7F08A6AE40415F48F131B111 /* MBLProximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 9F5479EAA668064130D02812F59E306C /* MBLProximity.m */; }; - D816D21E08DE6DBE8D205BAED278719C /* MBLPhotometer.m in Sources */ = {isa = PBXBuildFile; fileRef = E5D6598CDDBF33488FC69B5DFF58C57C /* MBLPhotometer.m */; }; - D82FF292F0F9031C78C53FFBC1109834 /* MBLFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 583A609E5ACE78382C84ED5EF0EDE7C8 /* MBLFormat.m */; }; - D831CC35AFBE53A00D9B854DAC3ADDBB /* MetaWearPrivate-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 55481C6D4DC6885935567820623B3544 /* MetaWearPrivate-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D86B4E924E8954B03BC4DB905982CDE3 /* MBLEulerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 85795CBE32C64342DEFEA3F17C5EF7C4 /* MBLEulerFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8987CB58F05F9F18970AAA94CDDC52B /* MBLDispatchQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A51D4DCDE886B0384051CC90D92067B /* MBLDispatchQueue.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D8A13C82AEEF5FFE50F53DE0947DC159 /* DFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 107D89EB1146D20431D9DA30A2F00976 /* DFUPacket.swift */; }; - D8B486D67346D85AEA13AE714C0B75B8 /* MBLGyroBMI160AxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C778CE095A0DBF3235157B58561F1329 /* MBLGyroBMI160AxisReadyEvent.m */; }; - D8E9C2A01CE6B9B7B5B67AC5141AE37B /* MBLAccelerometerBoschFlatEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 631DC4724CB7F5DB5E12D63CCAA9BE04 /* MBLAccelerometerBoschFlatEvent.m */; }; - D8F81FD58D522D674D683446FC018387 /* MBLFirmwareUpdateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CF11CDDD171CAD8715AD95DFF1BF1992 /* MBLFirmwareUpdateInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D953A39EB4738EC7847F50ACB2A39BF8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF73187F3F6E0F4E6FC6E5710081DBA4 /* Foundation.framework */; }; - D96011C8432F7EAD1C57F69100B42660 /* BFTask+Exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 6E178F0FC9498EFBD62A485883B8232F /* BFTask+Exceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D9A4C427F62A78700C74461F8C21DDF6 /* MBLAccelerometerBMA255MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 446871FDEF6BE23071F1C4D30C83656D /* MBLAccelerometerBMA255MotionEvent.m */; }; - D9B182EE8407F5A2EF67D57D59CF8396 /* MBLAccelerometerMMA8452QFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 9447C9E2EE7B1F292D335549BCE3E09E /* MBLAccelerometerMMA8452QFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA1DEA51486101617DBA21AD5D4516DB /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = A942A8CCFF9CC397055244A0615C421B /* QuickZip.swift */; }; - DA27BC34D5B4264789FE4D2EA25E7FC3 /* MBLI2CData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C9D693443D18F04CD16EC8D21B3265B7 /* MBLI2CData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DA49F4341FC715A8AE7B8D75BAEE4267 /* MBLAccelerometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = 116BB3AC97B4B082383621A9CB2549E4 /* MBLAccelerometerBosch.m */; }; - DA5E989AEACE05763CC9DA993CF0E4CB /* MBLGyroBMI160AxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 101622E47D549B802652C0917F0CC84D /* MBLGyroBMI160AxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAAB68CFCA6ED84FE65EFEEC3F458F58 /* MBLAccelerometerTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 80BF935A14C1AE875BBF10E6B3505F06 /* MBLAccelerometerTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DAC3259FD2BAC23F08A8E7DAF4DDBC20 /* MBLAccelerometerBMI160MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 082B67135724324C65933732754CC49D /* MBLAccelerometerBMI160MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DB14B194C2AD7358B9A948704CE1F977 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9982051824570B77E625938FED58988B /* CoreData.framework */; }; - DB2C063E44E43376CD554715E8B84358 /* MBLRGBData.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B693A9204E409123726821605F41F4 /* MBLRGBData.m */; }; - DB85CD8C870DFBE4FBF54B53D1BB5BDD /* MBLDependentData.m in Sources */ = {isa = PBXBuildFile; fileRef = E83EF69901AB4A54B1F0F417FF13BF56 /* MBLDependentData.m */; }; - DBE1A5D527A3094ACC0FB7A86631FB82 /* MBLMechanicalSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B45978E147332C2D7DCE27CFB3A99DC /* MBLMechanicalSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC2956A646FEC5D598AF833CE07BE38A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF73187F3F6E0F4E6FC6E5710081DBA4 /* Foundation.framework */; }; - DC2E80B49E1E57E0BFE0BF0AAEAF9EEE /* MBLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 065B9A18331BB5E77686A1A37B93AB89 /* MBLFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC5516B672AAB11FB832E401B92159FD /* MBLSensorFusion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C3629650A5E90D12D7E8D34CB7524F6 /* MBLSensorFusion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC75791906ACB698BC9DD4965D5D6D94 /* MBLMetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 3ECB3EBED1AD5F9DFE05147E317A42A8 /* MBLMetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DC8DB73F147B167A9F77479530801BE0 /* MBLBarometerBMP280.m in Sources */ = {isa = PBXBuildFile; fileRef = C5B0A790FBDDC8943DD967E22F5E6484 /* MBLBarometerBMP280.m */; }; - DC9A6E82D41279207EBF2C3D4F5DA29E /* MBLRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = A487D9615078F8F70198C070FAF0058C /* MBLRegister.m */; }; - DCBEA3494D9F6B4AA99C96D52B16AC6E /* Bolts-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C8C11128C262C180924828B3A2D0A19B /* Bolts-macOS-dummy.m */; }; - DD2B68C22CAD4D25B8B034C9812F7A1B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */; }; - DD75C576FD3B64EFD7F11DE674F56211 /* FastCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = A613E6BF9606CBB4CD455C470297B98A /* FastCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD876877C0B6DC9D9FD5F96EED2A7660 /* MBLTemperature.m in Sources */ = {isa = PBXBuildFile; fileRef = 096F4405C3E714C672C9653B4875D76E /* MBLTemperature.m */; }; - DD8C8CD21731BFAEF06BB0687DC9D3A4 /* MBLHapticBuzzer.m in Sources */ = {isa = PBXBuildFile; fileRef = D57BE345C3B103A8511DD25E291757E4 /* MBLHapticBuzzer.m */; }; - DD98F8E8F994FE7FD1C78C4001CA8B5C /* FastCoding-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CE96572C4CF67BCAD56B742C54A03FEC /* FastCoding-iOS-dummy.m */; }; - DDC3FB3E9735133C2A3EBEDE6045A516 /* MBLAccelerometerBoschFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 494205A39329FF5AE2B079EE3125B617 /* MBLAccelerometerBoschFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE2800563759E0F47041D1537D155227 /* MBLGPIOPinChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EB1D49F95D43D02E56017B6BC3737041 /* MBLGPIOPinChangeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE333EF2ADA1AC23FAE6322342A82B35 /* DFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60072837B568D0B289C73D735FBE994A /* DFUPeripheralDelegate.swift */; }; - DE7EE8E4F8D590987D07A22B7FE47DFC /* MBLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = D2123231BBE668070DC5FD64138BA715 /* MBLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DE8D5854F92076A77CB99C40BA418E28 /* MBLAccelerometerBMA255.h in Headers */ = {isa = PBXBuildFile; fileRef = 23D453257F06A73A5C8CD0F590FB2534 /* MBLAccelerometerBMA255.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DEBC3137F2160A553401FD8D9F7C2599 /* MBLSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 26128295AA0938AD6329B2E3407ED0C8 /* MBLSettings.m */; }; - DEDC881422024A369FF94FB99BDB93A9 /* MBLANCS.m in Sources */ = {isa = PBXBuildFile; fileRef = 0CC808F2321E7A48AAF53E821EB9FE8C /* MBLANCS.m */; }; - DEFB06CF710B889A3DEAC937C1D32E7B /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C2FDEE37CF41DE80256A00DFCF4163C /* MBLHygrometerBME280PeriodicHumidityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF0BC990B3025415E1DE10D513FB231F /* MBLExternalThermistor0.h in Headers */ = {isa = PBXBuildFile; fileRef = 0370A836B986A228B7833C6F24B03255 /* MBLExternalThermistor0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF24FABFF25B380D599388A8BEAB2595 /* FastCoding-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D985519D28309D26CC3988FCAB4381B /* FastCoding-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF831C98CE00F874DF40E69E34B899AD /* MBLProximityTSL2671.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A04EC0A77D40BFA9A26340EBD99D8C /* MBLProximityTSL2671.m */; }; - DFB8DAD761ABB836FCE0D209D4FF7C00 /* MBLTestDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = 58D92C0D8A331C0153DC2D7E2E1A110E /* MBLTestDebug.m */; }; - DFFAF0B50530CD3EB1D0B5762D339D00 /* MBLGravityFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 632E08C3C1F3C2B3600407429F114413 /* MBLGravityFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E016FF24F0EE27BF3AD0359F1ED9071A /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 99C09A3AC008BF7FA56EEB4385A3C3DB /* MBLGyroBMI160PackedDataReadyEvent.m */; }; - E0270EAD658DDBE9D4C7C3D07AB862DF /* LegacyDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D65E670B1C6B924E8E192F3FED06F15 /* LegacyDFUPeripheralDelegate.swift */; }; - E05F1AE66A74CB029D18BB445FC6B8AC /* MBLExternalThermistor0.m in Sources */ = {isa = PBXBuildFile; fileRef = 103B453C78582AB73039AF2ACD28091E /* MBLExternalThermistor0.m */; }; - E0A7A5E679D00FCF8525D9C4808FC6D4 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FF9248A7A554724FAC13E872F93100C /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0AFD24AC8C7DEA651E069F8B38E9F5A /* MBLSPIData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 792F603BFB6C85B0F5D8CB9889BC30AB /* MBLSPIData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0B24A24AD1E726FD9E915198599D15C /* MBLEntityModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 249139FB8D137FD0841B19206867C7EB /* MBLEntityModule+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0C1975C2AA9D83958842AFA3526EF48 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B9D42A88DE615131B26D7E3AB2D4A34 /* MBLAccelerometerBoschDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0E57E50E21A75CE1FD109B501C2FB8B /* MBLStringData.m in Sources */ = {isa = PBXBuildFile; fileRef = BB0992D5084797FE10F678A4D2FE31D2 /* MBLStringData.m */; }; - E100FC510817A710EEBB76DDD52F84CE /* MBLBarometerBMP280.h in Headers */ = {isa = PBXBuildFile; fileRef = 2813B6E415AA511D8A27433A7E7567D7 /* MBLBarometerBMP280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E12F867FF7121C2CF5F9CF782B69753E /* MBLNonVolatileState.h in Headers */ = {isa = PBXBuildFile; fileRef = B61904FA69F262DCB1BBB472F3910237 /* MBLNonVolatileState.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E136EE34B43E470979554A1DCB3E2144 /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DA6E5CE6CE505DF838D77C452AD13B6F /* MBLAccelerometerBoschPackedDataReadyEvent.m */; }; - E142023071BF61D8A6430248B4BEB57D /* MBLAmbientLight+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6712272425BFA706A80ED17C721D2468 /* MBLAmbientLight+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E161E234CF992E91874EA2DED1B495A5 /* crc32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B13B87AB35725CA9A0FE740B4294A70 /* crc32.swift */; }; - E16D5493C744957A4AC1801E209AEEAA /* DFUStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33B7E3CB12DE614F080F68127A8BAA81 /* DFUStream.swift */; }; - E1C17F00D9693BC5310EFDB908C4FA69 /* MBLAmbientLightLTR329.m in Sources */ = {isa = PBXBuildFile; fileRef = 46D823DA636B25C835ED3EAB68BE9151 /* MBLAmbientLightLTR329.m */; }; - E1FD6C95EF73560D8422C7A6EBA7498B /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 154C63619035D967672EFF5169B9350C /* MBLBarometerBoschPeriodicAltitudeEvent.m */; }; - E217CAF6711C04A625E889554A1F739C /* MBLLoggingV1.h in Headers */ = {isa = PBXBuildFile; fileRef = DABD5D15B57D8F075CA743D1528D890E /* MBLLoggingV1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E27D129AF1B3710406CDCBFDB91C3ECC /* MBLEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FECFBC4F9F95E5A09CC21E2F8A80B38E /* MBLEvent.m */; }; - E27F0D2208C2328B8AE86EFD42CF4227 /* MBLAccelerometerMMA8452Q.m in Sources */ = {isa = PBXBuildFile; fileRef = 683A646CE59BF06ACE557B9DC63F37BD /* MBLAccelerometerMMA8452Q.m */; }; - E28593A4745DD6B2C9E2903DA6243BED /* MBLGyroBMI160AxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C778CE095A0DBF3235157B58561F1329 /* MBLGyroBMI160AxisReadyEvent.m */; }; - E2B13C98911086E21C6A6E1B9F37F7C0 /* MBLGPIOPinChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B3830A96734A10F95A0898A3AE3C2DA /* MBLGPIOPinChangeEvent.m */; }; - E2EFD277F059A52D2429A7BE0703E7B4 /* MBLData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 79ACB3EAB67424B932181CC2ADD04624 /* MBLData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E379796844238653B8EB52465FDC337E /* MBLI2CData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C9D693443D18F04CD16EC8D21B3265B7 /* MBLI2CData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3810E68A55D7194204C55C3F34F0142 /* DFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 645FFFBA525FE54E01512233CD96C235 /* DFUPeripheral.swift */; }; - E3BAB9E0566EF8025C951978F0F29C3E /* MBLSensorFusion.h in Headers */ = {isa = PBXBuildFile; fileRef = 1C3629650A5E90D12D7E8D34CB7524F6 /* MBLSensorFusion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3CE2CB205B69D9FA9C4CE0DA50B0809 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19DAA050BDB87A1D6C1937CD796A986C /* MBLAccelerometerBoschDataReadyEvent.m */; }; - E3D158824151264CC993ECD47A33CF44 /* MBLGPIO.h in Headers */ = {isa = PBXBuildFile; fileRef = 8FB11F20516E10D5392A8FD9A19FCAF4 /* MBLGPIO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3E5C89C0D9F2A71D82A71B5A60F4B58 /* MBLGyro+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 85CE3C145F9D23BF8E0DB8462C048C88 /* MBLGyro+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E43E64F5769818FD5715B23705637186 /* MBLBarometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7F28543D661599E174AF98EA4A3B6D58 /* MBLBarometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E448F613BB13DFA7BC7E450231B18D1B /* MBLQuaternionData.h in Headers */ = {isa = PBXBuildFile; fileRef = BD464CA835615E18659BEB5C94E2000D /* MBLQuaternionData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E49DCF8C91C52E30095CF9F46081979F /* MBLModule.m in Sources */ = {isa = PBXBuildFile; fileRef = FBB66D000CC25B48165954C2C99799DF /* MBLModule.m */; }; - E51FB14BF724DA7144C47DB5F55AF9C8 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D6827276563ECF82E9652599FDA2563 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E51FBB4025175305BA033B9CF738BB85 /* MBLEntityEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 18DDDD5E1E2ADE29C7D340B61A72DAD1 /* MBLEntityEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E5B22A3C03F8BA0EC69FD2F84E8DA18D /* MBLI2CData.h in Headers */ = {isa = PBXBuildFile; fileRef = C31C3C37A5B28C48919E378674655A95 /* MBLI2CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E5C442C18605C886EAA6620827887A39 /* MBLAccelerometerBMI160StepEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = BBFA2A124C5CF5541408059671A33F65 /* MBLAccelerometerBMI160StepEvent.m */; }; - E62313D0CCCBB5A59F7B0C5D3FF56320 /* MBLRGBData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FEFC752FCC73CDD4669A2B67A313F16 /* MBLRGBData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E65175EE2CA343E70AE4DE432B310127 /* MBLLoggingV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D6CB41C23090423F8ED51F5A3FB6572 /* MBLLoggingV0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E65B0F52FFBD4D8475FB08A50854388B /* MBLGyroData.h in Headers */ = {isa = PBXBuildFile; fileRef = C830F6C50185B585F4EB59E43DC8DD8F /* MBLGyroData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E6B1D5281B9C0F33C440522F46BDBFFC /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 8861AD6B7644BD4E708D2AA334947E1C /* MBLAccelerometerMMA8452QRMSFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E6E4BFAFCF0AB42A33104603F29C89A7 /* LegacyDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE604D5D1F79811D66866CD63073922E /* LegacyDFUService.swift */; }; - E6ECAE547C440B2A13BF73C60B56DDE2 /* DFUStreamZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4494AC85D83F4C58922224D3BC0FFC3E /* DFUStreamZip.swift */; }; - E716A9F7926FE09EA5F44D93588916C0 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2173E09EFD7D86F6C58907D0B83C31AF /* MBLAccelerometerBoschAxisReadyEvent.m */; }; - E721F98743BC22BDC805C832F3C443D7 /* MBLModuleMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 18EADF7AF343005056845D551D588501 /* MBLModuleMock.m */; }; - E74D6F6C66DE20E7A367B5D66014AB4B /* MBLAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9B5368DD40A1D0D01B94023D7EC72B /* MBLAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E78C7B1FC418BFBB80466C5EF8F599BF /* MBLEulerFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 44E2876AE1BB6B2EC1B9E6DFFDB5C908 /* MBLEulerFormat.m */; }; - E79CD3F5C276A015B2D66620D045DF94 /* FastCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = A613E6BF9606CBB4CD455C470297B98A /* FastCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E82CB056756ACBE43D86232CB05B1354 /* MBLMagnetometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E4EE35E05B06402DE0951FDFC4AF4A9C /* MBLMagnetometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E87EC73348643827467EEA840490578E /* MBLGPIOData.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B6488DE19FA291681E79AFB6D915611 /* MBLGPIOData.m */; }; - E9541569979DDDF466E34B3E21E0D04D /* MBLConductance.h in Headers */ = {isa = PBXBuildFile; fileRef = 3C2075920A7BE1CF684C76F2F799ECBD /* MBLConductance.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E956B7C281112CC36D232CFFBA32FE46 /* MBLDataSample.h in Headers */ = {isa = PBXBuildFile; fileRef = E122F691BE8C2320CFFA602948F9C652 /* MBLDataSample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E97D64EE31C5C4EFBEAD89EC69DCBD31 /* MBLDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 429D35B0DC4CBE2F675FD0E381BBA5A4 /* MBLDeviceInfo.m */; }; - E99E7E1BA59E165C890DEE1BC5397DE8 /* MBLQuaternionFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 0861EF75CEE3811500BBCE28BDAB4BBD /* MBLQuaternionFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E9B46952228C251F0CF56F206664AD6D /* MBLAccelerometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DF122BCA44DEBD8F20F96652F7A2EA94 /* MBLAccelerometer+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E9D39190AC7EE1B8BBB10E772C469784 /* MBLAccelerometerPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EAAE3E2C5294FB4D702F158809A0913D /* MBLAccelerometerPackedDataReadyEvent.m */; }; - E9DB019EF403FBC733A510A2A258CFC4 /* MBLExternalThermistor0.h in Headers */ = {isa = PBXBuildFile; fileRef = 0370A836B986A228B7833C6F24B03255 /* MBLExternalThermistor0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA2BA69C6E3CC75582E59F8079D9C029 /* MBLModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 87F19309204F07BA1A90389E5292BAA1 /* MBLModule+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA401DAF59F1D1F88A6FDA5C2F1BE8F6 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = D638CE0D4E71C4047F8878745F8486D7 /* MBLAccelerometerBoschAxisReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA45B813656D90C8C066B0037993CEBF /* MBLConstants+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 728A14598DFA2E0ADAC364544A685C3C /* MBLConstants+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA979C00DBB855D5C458783BD6082FFD /* MBLAccelerometerBMI160StepEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C00606375314EB5180797E7794603591 /* MBLAccelerometerBMI160StepEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA9F27BCAA5CEA3AE557238A355905C8 /* MBLNeopixel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6B96BB66E32A76C37714BD32108877E8 /* MBLNeopixel+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB060E4CB4A3DBA159342A4C204AADCF /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 455CD07BA2C9B12A7455F13B169B7133 /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; - EB45D92CBA4AD089BE83A83FEAE37EF9 /* MBLAccelerometerTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 80BF935A14C1AE875BBF10E6B3505F06 /* MBLAccelerometerTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB654D96C7CA7034D3F369CB6998A7A5 /* SecureDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 424A4930726684F45E9938539092257A /* SecureDFUServiceInitiator.swift */; }; - EB7000153996F6DEC83F54FACDB964A1 /* MBLANCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EE8DF0E51109F6D1252C1F61309AA51 /* MBLANCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBA1F29B7055D76B4CA0888E55CFCB1A /* MBLPhotometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 19CD19E40DAAF05256018C6B1F12F55D /* MBLPhotometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBA31C4EF1F96D42D4907E7DC195D699 /* MBLAccelerometerBMA255.h in Headers */ = {isa = PBXBuildFile; fileRef = 23D453257F06A73A5C8CD0F590FB2534 /* MBLAccelerometerBMA255.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EBB087768D48B098B7B5486B623BB8B6 /* MBLAccelerometerTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 69F3741316EE19AD0AE240BFCE27C008 /* MBLAccelerometerTapEvent.m */; }; - EBCCD8E8A264FB7FE0959199B8D0E279 /* MBLLoggingV0.m in Sources */ = {isa = PBXBuildFile; fileRef = C44502A1C3E2BDFC2E9944376182C74D /* MBLLoggingV0.m */; }; - EC0D16E06CFE5E21423376A0ACE96020 /* LoggerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FB716E5129E1AE665A5FE6F4DA938B /* LoggerDelegate.swift */; }; - EC67DF78F4ED28644A066202F2A7C408 /* MBLAccelerometerShakeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 781A18BA1418D9C811A289311EBFC8F9 /* MBLAccelerometerShakeEvent.m */; }; - EC8F597ECD72BBF7721138E0023A06C1 /* MBLGyro.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A3C94A2D4474A8DC16FF570AEE192F7 /* MBLGyro.m */; }; - ECC8032B8912B964BB99FB7B1D2D334E /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 8861AD6B7644BD4E708D2AA334947E1C /* MBLAccelerometerMMA8452QRMSFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ECD240F77052509A4AC770B18B8B35C7 /* MBLProximityTSL2671.m in Sources */ = {isa = PBXBuildFile; fileRef = E9A04EC0A77D40BFA9A26340EBD99D8C /* MBLProximityTSL2671.m */; }; - ECDFC7CC78B6709EE2686006B7ED7EE7 /* DFUStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33B7E3CB12DE614F080F68127A8BAA81 /* DFUStream.swift */; }; - ED35A44BB4D14C90D6F333FD3D2ADB9E /* MBLDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B90E3A5C2959459174C720292B111ACD /* MBLDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED44FBBB89AB9919B0DC2C4487900DD2 /* MBLDataSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = BB3630C4C23448737131CCDFA574952F /* MBLDataSwitch.m */; }; - ED4A5CCBE0ED10F0919D5E093BB5A16A /* MBLSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 92516A30E70293A900BBF8AB90EB0500 /* MBLSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ED5E9EF619DEAB9A0020ABD85D298E0C /* MBLMagnetometerBMM150Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C7487AB0B47CAD2A314F1EA2960160F /* MBLMagnetometerBMM150Format.m */; }; - ED825FE54E7A16DA640667339ABA5999 /* MBLGyroBMI160Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 611E0828D1D423282BC36D41D8659761 /* MBLGyroBMI160Format.m */; }; - ED986CF180D403786C077083048384EF /* MBLEntityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A498490BEAA8E5C25A3B8A636D898BA /* MBLEntityEvent.m */; }; - EE7AA7155DB9F967A17EEA6659767312 /* MBLBluetoothPeripheralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = 2622409A6E1318E8A16282456B61FAAA /* MBLBluetoothPeripheralMock.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EEB95570BF960880D2FDCD2B989928FA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */; }; - EF49158B4B3EBAA7B691AA8CD08438A1 /* MBLAccelerometerMMA8452QFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = BBA69F3B3472ABC188162666FEA7E552 /* MBLAccelerometerMMA8452QFormat.m */; }; - EFFDED78F3EEADE9FA77354690D888F6 /* iOSDFULibrary-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C49FFC30D80AD94423AB0318601C46 /* iOSDFULibrary-iOS-dummy.m */; }; - F042B80272BB1C7E05A28A66E28B5ABF /* MBLLED.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A41ECB56B5DFC8D755819D80040E78 /* MBLLED.m */; }; - F056D4599E7A6FA9A986434245F9DD8A /* MBLCorrectedFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DB63EFD747A1E47D68C8FDC39ABB0F7 /* MBLCorrectedFormat.m */; }; - F05B7CC79D8E00EBD454B78171830CAC /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2660920FD069ED7B5ED13CE0B789A2C6 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F06121505F13DC17B753B3508A6A771C /* MBLCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 269F0FBB246D90F6DFB2F2AD18A04252 /* MBLCategoryLoader.m */; }; - F091106998275DD3ED0245F3C3D607D5 /* MBLLED.h in Headers */ = {isa = PBXBuildFile; fileRef = FE0D8515949C9861487F28B146EEA3C0 /* MBLLED.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F0ECF5B0CCBFDD1243D97E10501C7AC4 /* MBLAnonymousEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F352EEA80E24C897DFE65410ECEBAF80 /* MBLAnonymousEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1107BC1D76906851AC95D6E91572C19 /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E2973DEE2198C544E205D3FB1EEE9C59 /* MBLHygrometerBME280PeriodicHumidityEvent.m */; }; - F1150C66E5BB51645CE67A1BFFCBEC3B /* MBLEntityModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 102772752E49EDB7667052D7350EB2E3 /* MBLEntityModule.m */; }; - F11FCEB7BCE9BB689098F32770055AA9 /* MBLFirmwareUpdateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 22074BEB840408CE90EAF720DD456558 /* MBLFirmwareUpdateInfo.m */; }; - F19A43D7F6F6C7064624063DAF805208 /* MBLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = D2123231BBE668070DC5FD64138BA715 /* MBLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F1D80C90E105A58DDA42EE5B32715F06 /* MBLAmbientLight.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CA104EEA8E4AEA2C3540CC3CE284922 /* MBLAmbientLight.m */; }; - F1F8ECE80355DE1DB3F629F6C8885CFA /* DFUServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6856DDDF597277881E66C7EAE1488594 /* DFUServiceDelegate.swift */; }; - F20805120989BB3AAAC3DD0AF8C1FD30 /* MBLAccelerometerBMA255.h in Headers */ = {isa = PBXBuildFile; fileRef = 23D453257F06A73A5C8CD0F590FB2534 /* MBLAccelerometerBMA255.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F22C7A15566ABC59095FE23A18C08C34 /* iOSDFULibrary-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E94043F221F15741ECDB1C913090A4E /* iOSDFULibrary-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F248FFDF00CD1D1862AB9532F851535B /* MBLGyroBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = 876E22D020687C840F45B60CBE75C97A /* MBLGyroBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F24B2FA22DA34C2F17E071A85753CE75 /* MBLTemperatureV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DB88D5E21CC6737F8A128219B847D7C /* MBLTemperatureV1.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F28011F1336E984605DCB8FC6B82D960 /* MBLAccelerometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = 116BB3AC97B4B082383621A9CB2549E4 /* MBLAccelerometerBosch.m */; }; - F2954F9FCBD4841F3E854E1E406F98FA /* MBLModuleInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = F874621735C718745BB4247927DBB372 /* MBLModuleInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F2BE5B7DAADFE9011306A8B50C538888 /* MBLGyro.h in Headers */ = {isa = PBXBuildFile; fileRef = 4602EBBBCBFC4B0BDD1112C6F156FAC2 /* MBLGyro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F2CD3EE3AA6A9A4B84733CD8D0C3C6C8 /* MBLData.m in Sources */ = {isa = PBXBuildFile; fileRef = C3FF22CA55CEDA7F854443FF7BDB86C8 /* MBLData.m */; }; - F2F895E36F8AA8C34CE952D039C9D92A /* DFUStreamHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C47A810D9F0D3F2E32CE75405F6AA0E /* DFUStreamHex.swift */; }; - F3367E169B1BC18475C28D32C09BDD53 /* MBLCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = AD87D9452AD5DFA34EAE953736420189 /* MBLCommand.m */; }; - F37F032AC0A8B7C00E1961DCEF382D48 /* SecureDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = E72170D3AC6D512DCC948B28D038E74F /* SecureDFUPeripheral.swift */; }; - F396DE26ABFFE3E71988185761B85D58 /* MBLAccelerometerOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 81E1EAD5716B33481AA8D4749144206A /* MBLAccelerometerOrientationEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3E965E86E8E2A49720AB8A426AC3ADB /* MBLFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 583A609E5ACE78382C84ED5EF0EDE7C8 /* MBLFormat.m */; }; - F40474019AA1AE34AA6B819DE9024D8A /* MBLHygrometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 352E1631A56726C30EAE50929ED999C6 /* MBLHygrometer.m */; }; - F4963419D6D3DEA56C67F6DB548424DE /* MBLMechanicalSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1245D808F6BCC15B8A902CE557F9AA /* MBLMechanicalSwitch.m */; }; - F51A929E1C000442B645C2780DE44DFD /* MBLMechanicalSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = CA1245D808F6BCC15B8A902CE557F9AA /* MBLMechanicalSwitch.m */; }; - F587498D00E912DA0E234967DB16BC57 /* MBLProximity+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 49DCC21B1CC2D91B3B63A59EB7E2B099 /* MBLProximity+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F59C3D75DB4E2CDFB2AB5D30A987C072 /* MBLTemperatureV0.m in Sources */ = {isa = PBXBuildFile; fileRef = 0120B86E2AE95D793C101E04748002AF /* MBLTemperatureV0.m */; }; - F5A50FF31DCF3B895836F12AA6C8E8B7 /* MBLSPIData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 792F603BFB6C85B0F5D8CB9889BC30AB /* MBLSPIData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5B1DA38DD4528120A51904AFC7F0949 /* BFTask+MBLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FD0265FC80A962B97D528D2D555EE96 /* BFTask+MBLPrivate.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5D0E11F405D5FBB3D355B93DB5E1A6C /* MBLAmbientLightLTR329.h in Headers */ = {isa = PBXBuildFile; fileRef = 9030BAA310B1AD555332EC41BE83E228 /* MBLAmbientLightLTR329.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6694F957AADD94EE7EF5697E83DDFD3 /* MBLGyroData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C76EB125E555C3CEEAECE10EB48F4C5 /* MBLGyroData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F689C8EE14EFAB57578BC94A404B0BAD /* MBLRGBData.m in Sources */ = {isa = PBXBuildFile; fileRef = 34B693A9204E409123726821605F41F4 /* MBLRGBData.m */; }; - F68E60740963407E5BE92E84C9778475 /* MBLGyroBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 342B40755E2FFB37E7739C0F867B357B /* MBLGyroBMI160.m */; }; - F69AFDABA6762F1E06AE491A3FF344F9 /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 8861AD6B7644BD4E708D2AA334947E1C /* MBLAccelerometerMMA8452QRMSFormat.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F6C88E123AA9FFBCC3CB30061423FCDE /* MBLDownloadOnlyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 33264FC0B93C70A504D49AC7A66C41FF /* MBLDownloadOnlyEvent.m */; }; - F6E462AA08FB90331808E5DA4D8F248E /* MBLAmbientLight.h in Headers */ = {isa = PBXBuildFile; fileRef = D4C71EC1407F5E40D46788C5806EBAC1 /* MBLAmbientLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7154394332D9A016E3DB9B8B191E534 /* MBLLoggingV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF7B457DCC8E360D49A842F6BB6699D /* MBLLoggingV2.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F73CBF13394D96A683C4136257983CD2 /* MBLDataSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CB82133272E40D5FE88AAFEE0E3AA14 /* MBLDataSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F7EF7FF4EBD467923212956FCCD1A5EC /* MBLExternalThermistor0.h in Headers */ = {isa = PBXBuildFile; fileRef = 0370A836B986A228B7833C6F24B03255 /* MBLExternalThermistor0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F80DA78BC63BB30D6F3CF9B569DDB07A /* MBLAccelerometerAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DC7D0B2E65A380068EC3FEF2957C2A44 /* MBLAccelerometerAxisReadyEvent.m */; }; - F876506BA3F2571387006E034E6E0272 /* MBLOnDieTemperature0.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7EC23F7DA1F1EF030CBD0B82701411 /* MBLOnDieTemperature0.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F877B88571FD538AEF3E16B8725539AA /* MBLGyroData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2933BA5E21AEF0F56E04A4BD5C37AD29 /* MBLGyroData.m */; }; - F8D42EACE580BBF6C2212B6598EE50A7 /* DFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = E093B6225A0D37B00C1C5B9CD123B21E /* DFUServiceInitiator.swift */; }; - F8DD67B883144E11180D0BDE15DEE0E3 /* FastCoding-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BD970ADE60CB77738A77DF291E9B9E1 /* FastCoding-tvOS-dummy.m */; }; - F90942FF09A8C6AA3552481A7F8C4F17 /* MBLAccelerometerMMA8452Q.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D409E9AC30BA95DADFD8640807D6AC9 /* MBLAccelerometerMMA8452Q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F94825A3FC4C45C761A18FDE241FA271 /* MBLMagnetometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF938D304C25C4D90A26EE7E13BFE15 /* MBLMagnetometerData+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F97263C490DB6C6E771619C7CB0D7867 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B9D42A88DE615131B26D7E3AB2D4A34 /* MBLAccelerometerBoschDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9DF67116FAB5E4FFF34CEB141BFB5EF /* ManifestFirmwareInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B702BC7B58A912AAF4251270635CF62A /* ManifestFirmwareInfo.swift */; }; - F9E51D76F9143C3EE463ABAF26AD6D1E /* MBLAccelerometerBoschTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = FFFD05307348ED7C574EF3859B422B0B /* MBLAccelerometerBoschTapEvent.m */; }; - FA01F4E088294B11ADB33D8685AC8D5E /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FD5DC3572BFE19B2936387A0FACF2149 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA57F5203A181DF6FD013712142A18C1 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B9D42A88DE615131B26D7E3AB2D4A34 /* MBLAccelerometerBoschDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA8C5BFE6C6789282EED4B58BD03CD35 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5898A42A321FD0618A921C0E77E8A4 /* MBLAccelerometerBoschTapEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FAC615B2DC559B46E686A3CC5A6DC096 /* MBLAnonymousEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = F352EEA80E24C897DFE65410ECEBAF80 /* MBLAnonymousEvent+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FAF07776AB7D9C39895CA0308F136252 /* MBLMagnetometerBMM150Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 6C7487AB0B47CAD2A314F1EA2960160F /* MBLMagnetometerBMM150Format.m */; }; - FAF13BD420CA93DAF157231E57BCD6F9 /* MBLBluetoothPeripheral.h in Headers */ = {isa = PBXBuildFile; fileRef = FE8969BAE4E23F3DFE16E1BD087E5A9D /* MBLBluetoothPeripheral.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FAF9ADB986CFE1A669B41F14ED3847D9 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 45AB536C269B0B8B040B53A4DF58541F /* ioapi.c */; }; - FB59EDEAA8F23655DFDEFA3D3B344357 /* MBLANCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EE8DF0E51109F6D1252C1F61309AA51 /* MBLANCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FB9D5EA9CCA166E6C59B3602CF9F5FF0 /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 9951ED4CE84E530835A1BBE12C8A58BB /* MBLMagnetometerBMM150.m */; }; - FB9D7896502C89B33F8C2388EA34505A /* MBLAccelerometerBMA255MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 446871FDEF6BE23071F1C4D30C83656D /* MBLAccelerometerBMA255MotionEvent.m */; }; - FC6F75B0B2AB05B843444AAD6B736958 /* MBLFirmwareUpdateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = CF11CDDD171CAD8715AD95DFF1BF1992 /* MBLFirmwareUpdateInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FCDC34F3DBA97A98AEBF0A674E37D1E9 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 717E1C94E4A237C3492917CC7A3748D2 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FD06B2677163B33A95F58272B001E1D2 /* MBLNumericFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 04A4C08307A0807A13DF6337A194A7A9 /* MBLNumericFormatter.m */; }; - FD0D093E1AC62188DBD6EA575E5D6E62 /* MBLTemperature.m in Sources */ = {isa = PBXBuildFile; fileRef = 096F4405C3E714C672C9653B4875D76E /* MBLTemperature.m */; }; - FD400117AB55C4CBCD2F4A58C07F1AAE /* MBLMagnetometerBMM150+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1DEE68012FEE0F602A240B3ECA976F27 /* MBLMagnetometerBMM150+Private.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FD7E8BDCDE349637949C635DE7589324 /* MBLExternalThermistor1.m in Sources */ = {isa = PBXBuildFile; fileRef = 257DF6872E94837AC767B4782104D87E /* MBLExternalThermistor1.m */; }; - FD914406A9CB30217897016E3B6D00A1 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19DAA050BDB87A1D6C1937CD796A986C /* MBLAccelerometerBoschDataReadyEvent.m */; }; - FD9EF42230CFB43DAFDB964F7BD72AB2 /* MBLAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9B5368DD40A1D0D01B94023D7EC72B /* MBLAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FDAC2A8E40F041C62DEBC85AC557711E /* MBLAccelerometerBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = BBD2CD5AC9C224EF7A5EC8606ACED6BE /* MBLAccelerometerBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FDFA30D64CD4C8A79F6C99632DC14645 /* MBLModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F04C343FC7E20D674466E19D6BF71FA /* MBLModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE05A5671D69ED9B4DECF9A7AC8CFE3A /* MBLRMSAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B0F1458E563F8F2E0E9D3B15038D133 /* MBLRMSAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE0D8F904234F0D30B9797951C4AF3BE /* MBLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = D2123231BBE668070DC5FD64138BA715 /* MBLLogger.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE351605B85AD47EB7514DE802FC52BC /* MBLAmbientLight.h in Headers */ = {isa = PBXBuildFile; fileRef = D4C71EC1407F5E40D46788C5806EBAC1 /* MBLAmbientLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE61D5FE978525B365F090440121FDA8 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 09132298C652A6E4AAC6E0D0A627FAB0 /* MBLBarometerBoschPeriodicAltitudeEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FEAF48EA6D8A5952DCC636F785187DD5 /* MBLCorrectedFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DB63EFD747A1E47D68C8FDC39ABB0F7 /* MBLCorrectedFormat.m */; }; - FEDD3D65ABA05570E54BAE324331BF21 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FF9248A7A554724FAC13E872F93100C /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FEE9D7E9209726628D0EE777AF7B8B21 /* MBLAccelerometerPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 568C305A82820552CFE0C4605EBA0459 /* MBLAccelerometerPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF2478FA6CB4BF2896392F5E93B6F01D /* MBLBarometerBMP280.h in Headers */ = {isa = PBXBuildFile; fileRef = 2813B6E415AA511D8A27433A7E7567D7 /* MBLBarometerBMP280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF596E19E30DB5125A2912D901FA9438 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 767039DE8BE4128CD2C1F16858847D69 /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF5C881D0C42BC28D2922660AE149EC2 /* MBLConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 14EF7A0FCCB0842B76635115328356DD /* MBLConstants.m */; }; - FF68DA8D9A6F2294B18446E810D3B2F7 /* MBLExternalThermistor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E3207AB2D85976BE06AECFA290AB0D4 /* MBLExternalThermistor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF75BE9C9AE3E4BF71B13A8E2AA3AD41 /* MBLGPIOPinChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0B3830A96734A10F95A0898A3AE3C2DA /* MBLGPIOPinChangeEvent.m */; }; - FFD308BE81712FC29412B293EEDB7AE4 /* MBLLoggingV2.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF7B457DCC8E360D49A842F6BB6699D /* MBLLoggingV2.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFE2EE2096221AC05B548F0314EB105F /* MetaWearPrivate-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1ED442E7A60334BC3E1AC5C8526DC814 /* MetaWearPrivate-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0071B214B6C8791EF614E7667A50F28C /* LoggerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5997402F4329D853E7BCB603CE25BA3F /* LoggerDelegate.swift */; }; + 0119CF93164BDEED72A67997E42469F7 /* Task+ContinueWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF432B434BADB6E8392DE30A6AB193BA /* Task+ContinueWith.swift */; }; + 012314C94A0FF3DB0384FC0195652471 /* Bolts-Swift-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 179A55B9C457FA9A8D10AB87E80631ED /* Bolts-Swift-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01B2CF1189F93E074AE5670B5EB90314 /* LegacyDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30B865D115DD7F25E61ABE2A186A488 /* LegacyDFUServiceInitiator.swift */; }; + 01F2E855D2CDB3461C9EBF8974351727 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 6007B14F565FF154037111E7604F2A18 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 0246A903472A4DEC4599E16CA8D56248 /* DFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7852608063A2F0EE91A0044583622FB /* DFUServiceController.swift */; }; + 02AB64E502F9A9EF117A7D2AB68BE58C /* neopixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B31127F6A9B12AD9FDFDD7E6C51BDE3 /* neopixel.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 03E143C43CE4608037DE46051F646CAD /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B467B9BCA78B0BB519888E22BC5D2B4 /* event.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 048909F22137EC2B3C14FD1B879BAEB6 /* datainterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F2BCBD578463EB88BC90A62C0FCA1EBA /* datainterpreter.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 04A49035A5D712C1BD9D157FE4B8CCB4 /* neopixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B31127F6A9B12AD9FDFDD7E6C51BDE3 /* neopixel.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 054520805BBFA832B7FE53FD654BB80F /* accelerometer_mma8452q.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2408A3AA0166131C1F428B734EA0318D /* accelerometer_mma8452q.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 054FF6A96DC602324A1825B8493E89B3 /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A41E41020280AE830D0C743267F4744 /* memory.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 05B279D20332CE57592872F685EDB50B /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFD906B0F2FCAF1C6DC95634145FB67 /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 05CCD262D39E111E53164DA1E236C954 /* TaskCompletionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC9FAFBC7C89F2F3ACF67B02080B1073 /* TaskCompletionSource.swift */; }; + 062991AEB6F794560950C95B02B457A1 /* dataprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83265893F83E49698EDBE65CD6E8CB42 /* dataprocessor.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 07482C7F15253573519FB87750216A31 /* String+VersionCompare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B0F7A8ADAFE2D840A81E4E98B4B48E /* String+VersionCompare.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0A5266BE513773C0BCF053BAB264D70D /* gpio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F86F228E1FC44D6BB62174D0FAD1 /* gpio.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0A7E2B71A330486F38B6790857A96278 /* DFUStreamHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB0C476B4DF7448961AA16E2943837B /* DFUStreamHex.swift */; }; + 0A92A75E1F330C5F90449CF0A992F751 /* MetaWear-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3940B6C36ECC870E8A7A1594F55BB606 /* MetaWear-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AE13B58BDBEB25C6508FAC2012F2E7D /* MetaWearScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87B23CA6B555C2D2E459958935BB5610 /* MetaWearScanner.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0D7793CD8B5152C83B74AA17946C3464 /* SecureDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EB8744344934AE9EE2BF17D3C397A42 /* SecureDFUPeripheral.swift */; }; + 0DBEBFDB687DA26EE4693173A49908EC /* file_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09BC8767D1463A5A9B4ABA773E0C6AA6 /* file_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0EAA9171580A17C14F1C5D397CBBEA21 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5CA8D32B9C323FA419ED9B0FE21A7481 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m */; }; + 107273FDDC47418EEC9855FD8F926C5D /* neopixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B31127F6A9B12AD9FDFDD7E6C51BDE3 /* neopixel.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1158F65F25939E9A499EE805104A3854 /* DFUServiceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7852608063A2F0EE91A0044583622FB /* DFUServiceController.swift */; }; + 115FB1F17742F888D8A825FDC4BECF9B /* neopixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B31127F6A9B12AD9FDFDD7E6C51BDE3 /* neopixel.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 11727EF90C340A635E11848D165FE30A /* CBUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C6DA6427752A0B49FCD4F46FD110B9 /* CBUUID.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 123318087DFF43DD84816B04B0C1A920 /* DFUPeripheralSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78169E520778F3CCC6BA3B12B3192ACC /* DFUPeripheralSelector.swift */; }; + 12BF37F126A661EA7AEBA301EE2C8BB0 /* SecureDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CB4B0FE993F664045BAA9B5D5C572B7 /* SecureDFUExecutor.swift */; }; + 12CAE65188FA3F7C3FC7BD7E04D51A51 /* barometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12BF577CAE7BC994721AA252211F53DF /* barometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 134543FC08B009EB5026D47545DCC5EF /* multichanneltemperature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 890AB877953EF60E5615B9AE04D485F7 /* multichanneltemperature.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 137F583C04F5F863C5690C0629DF4904 /* DFUStarterPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D9F6E07B310AD2A19E55F6D09AB5096 /* DFUStarterPeripheral.swift */; }; + 14B706C083E0D5A44278480175898619 /* accelerometer_mma8452q.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2408A3AA0166131C1F428B734EA0318D /* accelerometer_mma8452q.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 165C529F52DF4F141BB30AD7709D8267 /* ZipArchive.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC035182E4920C4BF68853295F21200C /* ZipArchive.swift */; }; + 1672587098535D54F978BC4EE4DCD24E /* led.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAF2A8E429407A78576C79FC06722F77 /* led.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 16B312A2B9909B85E239C99C321BA251 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B6511866AFA1D91F9311C7E013E63A0 /* Foundation.framework */; }; + 174DEBD593BA773BE03532B9B3C20DED /* dataprocessor_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C645D8E39A7F591C903260BB3C48C15A /* dataprocessor_config.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 18C85A0DA4C0DADA7717340BAA8E6C1A /* magnetometer_bmm150.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B36FC4E48CEE0F33F3231BD8BA112318 /* magnetometer_bmm150.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 18EB51ABB8B7AB85B6E386C7D47D6D8E /* accelerometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C193F482E2D876192526D01572D72C /* accelerometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 190F4E4CB39523001EEBD9966A78F727 /* MetaBootFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7F15C91EE3979177A6CE2D5466D6B0F /* MetaBootFinder.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 19493FE53FBC0349A6491E11D79528D7 /* proximity_tsl2671.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4441E516BEA95769BFBFB24AF730C0A /* proximity_tsl2671.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 19B791AF1FFD22B9039EAA581B719C96 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AD6F9ADF08B67FFA34BDE21719B1117 /* version.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1A906790CC19D6D64BE3BB624FD1176E /* serialpassthrough.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64F7598BE155DA2BC2937CFAF358BAE /* serialpassthrough.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1AD3C7A5F39E84B0904A7F5BF30EB3B3 /* proximity_tsl2671.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4441E516BEA95769BFBFB24AF730C0A /* proximity_tsl2671.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1B005F486DFAE9D5D8CEDB0EEE7910E9 /* macro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90C20DFE18FB7A6936DD7E4A628B5621 /* macro.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1B90ADB4D6387338C97209083E115827 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D83DA06622784011EB0A064E16688ADB /* Foundation.framework */; }; + 1BAA7DD5FA2CCEFAA0DC9052D885F3A8 /* dfu_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5DA30419B0A544014D9021E46503C2 /* dfu_utility.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1BF866667FDA3D42DB22B450C31D1E8E /* responseheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C431B76C0095B9213F871704369432C3 /* responseheader.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1CD5B3A0C5191CD4ADB56D6127176308 /* moduleinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6401588989350CBC1E3C97081535C49 /* moduleinfo.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1D87C5ED9698C64CAA668885A2543AB4 /* MetaWear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956E11F13DF77F8D1720B83F4A6BEF9A /* MetaWear.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1EF1EBA0DA9F25147BBC021B861A89B1 /* DFUServiceSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C5C6DFB62084D2404EBF1C9A10B7C9D /* DFUServiceSelector.swift */; }; + 1F00C1506045CFEABFEA88E8CE4661AF /* datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2EDD3D9D4160990AA22AC9137B4497BD /* datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1FA3CD36AAC5CA43ADA03580166B8037 /* gyro_bmi160.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AEB96CFB86A8E187868523F74EB566E /* gyro_bmi160.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1FE2AE1BBB3885975710BD38E7C87367 /* DFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C10FB5C18BC3D9B6CBB7AEC5F0B6CF /* DFUControlPoint.swift */; }; + 201E01C88C4E32D4337494801FC5F56E /* SecureDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CB4B0FE993F664045BAA9B5D5C572B7 /* SecureDFUExecutor.swift */; }; + 2057B62ECEC6E2143A286176925961D8 /* datainterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F2BCBD578463EB88BC90A62C0FCA1EBA /* datainterpreter.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 20A7EE35F4A0A98C597015A8D191DAEF /* dataprocessor_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C645D8E39A7F591C903260BB3C48C15A /* dataprocessor_config.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 20D2872A849400C0675296A37A79C0A2 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5F90E21E1EC32E577938414EC8DD8ED8 /* debug.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 21066BA978CEC0B5298D95B5D40A1828 /* DFUFirmware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436FDBC3E5D46266015EEE80C9B342B5 /* DFUFirmware.swift */; }; + 219DA9A0068170DAA023F821B2115E2D /* dataprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83265893F83E49698EDBE65CD6E8CB42 /* dataprocessor.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 21FCCB2F32EE1D30AB63CDAFDDF9A9A9 /* barometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12BF577CAE7BC994721AA252211F53DF /* barometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 24F8555214BB47ABA040C765CEBF9F52 /* ButtonlessDFU.swift in Sources */ = {isa = PBXBuildFile; fileRef = E70959117815002F51A0AAAD41C4AECE /* ButtonlessDFU.swift */; }; + 2671E54E7AEE5CF3373FDA1B86CB561F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B6511866AFA1D91F9311C7E013E63A0 /* Foundation.framework */; }; + 2741EDD9949B3A6CE69D321034682D64 /* MetaWear+LED.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C3523E890BD3724EA15F0D1440F083 /* MetaWear+LED.swift */; }; + 276BFB97B0CFEEBB3B243DE3C8D94303 /* accelerometer_mma8452q.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2408A3AA0166131C1F428B734EA0318D /* accelerometer_mma8452q.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 2772B8E432BE2AE610EBBE6683C67743 /* ScannerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6D410282D6F5301B98BCB8E0EE4923A /* ScannerModel.swift */; }; + 279408C5DE8AD34966AF3B3A1598C742 /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 638340E73003B3641A29363DEBA5E5A0 /* settings.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 27D6D0D205B6D2E13E1D3C4E7E016DDA /* iOSDFULibrary-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BE0C4936B67E485798B9FADAEFB3F962 /* iOSDFULibrary-macOS-dummy.m */; }; + 28132611E3E7DED4CA6B1E9F18B89FD8 /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4DDC6F51422EE5F25915C11674B5DB7 /* Zip.framework */; }; + 28284DE59A477A53FCB24FAFC5F04671 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC15AB3BD8B826657CD5776901780E /* Task.swift */; }; + 2871826B8A412983A2B99E09B0AC587E /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C83457451FD5A29DBFC9D7AA22E184 /* ZipUtilities.swift */; }; + 294FE0B06ED735B246B141915C04D680 /* switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CD5FF81C06773E0C0B179E63CAD2F9D /* switch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 2C72E07527BB31F815D1462F741E977B /* proximity_tsl2671.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4441E516BEA95769BFBFB24AF730C0A /* proximity_tsl2671.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 2CB0A314AEEA7C89F227565D2B06392C /* MblMwGattChar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E904F81BE9147A7D7773BF65CCBAB155 /* MblMwGattChar.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 2D038B9C3B370C2A38017299D43962D9 /* Bolts-Swift-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 38D854413BA7877B89126C626034B847 /* Bolts-Swift-macOS-dummy.m */; }; + 2DCE7704FD965864FCD1D4E4D3311BCB /* Pods-MetaWearIntegrationTests-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D309696A6B188576EA54A5834846886 /* Pods-MetaWearIntegrationTests-iOS-dummy.m */; }; + 2E36271E6AAA86B51D49DF7717B2F6D2 /* Task+WhenAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6565BA5B85EFB397511A3DFD9D7C87 /* Task+WhenAll.swift */; }; + 2E4CEAFAA40E568A2FC50F3C9C3A0F0D /* Pods-MetaWearIntegrationTests-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3B1C6B2E346D4D6BE37D9665C5A560A5 /* Pods-MetaWearIntegrationTests-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3048C93D0D73996E4D54A09B6AD9686D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */; }; + 30D372ECEC42530F63D4FC0B784F92E2 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0646800EECED1BAF4AC13CB9E3866330 /* Data.swift */; }; + 317E9110C50E297CC750F560EB3ACAD2 /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46342162168E87FE5F7167677AB0321C /* utils.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 31D0801C3B3682C3D5CFAE597686B73E /* humidity_bme280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E942A292BF531CBC63CAC9ADB90ED49 /* humidity_bme280.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 321FEB5D130F75E69F311F7A34AED3BF /* ambientlight_ltr329.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5E1A45818A3870EDDC0C4A0591916DD /* ambientlight_ltr329.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 32507EBDD84A7F049D8C3497F0C5C1EB /* FirmwareBuild.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CAD8BF247E05BE3819D6EAE4463B4A /* FirmwareBuild.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3267FEE96516C913385FAFEF749BB450 /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B467B9BCA78B0BB519888E22BC5D2B4 /* event.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3277D686CC7EF4998BED13D9642F5AD4 /* SecureDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D659A54AFE195D24B85CFC70F8F6734 /* SecureDFUServiceInitiator.swift */; }; + 345BF6FAF34960268328D747B9127099 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 442785F52975C0A54D634862B58852DF /* timer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 34BBC5EAC6383FD63EBE60D0CAFD2965 /* FirmwareServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B29DCF80EC1B476962ED99AA3B2B470 /* FirmwareServer.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 35C3C6327A65448295F86F961C881675 /* DFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D6FEC3C86DBBC69C0D23FF4C84222E2 /* DFUExecutor.swift */; }; + 37EBA4FBD3EBC64173DC0425264D977F /* MetaWear-watchOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = D3FAC3EA41F19EE12F9F6BE054A3E10D /* MetaWear-watchOS-dummy.m */; }; + 37EF8D673127405DBCB8B18D5AA37CE7 /* Double.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93F964DDAC8BD026D683BF54FD168B21 /* Double.swift */; }; + 3804DEC5F1758442E73FFA6C421A7424 /* MetaWear-watchOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1CEEE277440B3915D1E813B248AC9497 /* MetaWear-watchOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 38387EC8709BB0210C48B6345A106A91 /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 638340E73003B3641A29363DEBA5E5A0 /* settings.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 38B1E3C4A74925A3B5F127EC33F53092 /* FirmwareBuild.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CAD8BF247E05BE3819D6EAE4463B4A /* FirmwareBuild.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3928F38C9D6AE7FD63A97FFB96F6F127 /* SecureDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1641E74D80DF7148698DE7B1F574FCB4 /* SecureDFUService.swift */; }; + 398BD8F71A460B0F02E183446DB1BC35 /* MblMwDataSignal+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 441DA5864008D13EECD7D2ADEBBA477F /* MblMwDataSignal+Async.swift */; }; + 39AAA893F0F83B4CF8CFAD4AAB8F4A24 /* DFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50C10FB5C18BC3D9B6CBB7AEC5F0B6CF /* DFUControlPoint.swift */; }; + 3A0A8DC7DD47BFA47C94C4F215646FAF /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D9FD19B7C8CFDEF53C2D6864760B129 /* task.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3A320188B8D201A2E0E1AF0F977EDC58 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B6511866AFA1D91F9311C7E013E63A0 /* Foundation.framework */; }; + 3B08EBC01B2FE50E729A05D20AA253A4 /* CBUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C6DA6427752A0B49FCD4F46FD110B9 /* CBUUID.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3B1DC8B9646BFDF1A083D515E2B4B636 /* LegacyDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1482265587727D68E5B335B391869EEF /* LegacyDFUExecutor.swift */; }; + 3B382B4ACBD4F454E3F00371E7DF82B4 /* LegacyDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A004C058CA6A4E4E5785CE990A602E /* LegacyDFUPeripheral.swift */; }; + 3D83894DECE428C112EF4C46141EF126 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AD6F9ADF08B67FFA34BDE21719B1117 /* version.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4011A50AEF0D3CC8CB5DFAFC8467B262 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AD6F9ADF08B67FFA34BDE21719B1117 /* version.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4257E0308693B36503ED4CF3E199D958 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DDB0564C3BCFB74DE96005255A0B8226 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 426A04E414354DBD1A53A2B08DF48AE7 /* DFUPeripheralSelectorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20414AC783F2C79421FC802B17AF6B37 /* DFUPeripheralSelectorDelegate.swift */; }; + 42B1153290A0883081A0C3205B9026E7 /* accelerometer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82512F4F2249F20A9C7852E5E62707C /* accelerometer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 42CD65E91A904CA525ACDEF008F93C89 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 877A85E3E0BF54E52BF701108B14C637 /* ioapi.c */; }; + 43695E4581D60DF316442099D179CC0E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */; }; + 445A972E0EFED2BED4952E917C4896AC /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D45D1272B1860B206A44BE30D4966B8 /* CoreBluetooth.framework */; }; + 44A1BDFBC564743E38C0B883B790C846 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = E67419CF7B3C071CA1C3E89CD847EBF2 /* unzip.c */; }; + 44A5D6118DFF5DAEFC3B557DF257B32A /* Task+ContinueWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF432B434BADB6E8392DE30A6AB193BA /* Task+ContinueWith.swift */; }; + 457B873A21AEC1DF2599BF1B7A14CB6D /* MetaWear+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B86C849C0D94F518C891C30917C82F3 /* MetaWear+Mock.swift */; }; + 45A3E50B9F54E5E818979A9D4A967689 /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = E67419CF7B3C071CA1C3E89CD847EBF2 /* unzip.c */; }; + 465AADBB25C335ABC60DC9D38D00277C /* Zip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F4DDC6F51422EE5F25915C11674B5DB7 /* Zip.framework */; }; + 46FC70A31BB53ECA439980DE61D71581 /* IntelHex2BinConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F92E58A3F6AB05594E04E312A87C225 /* IntelHex2BinConverter.m */; }; + 473AA87BB298B6368D647C6A4F386508 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D83DA06622784011EB0A064E16688ADB /* Foundation.framework */; }; + 4747DB02B86DD9FE09DD3F228EEC2156 /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46342162168E87FE5F7167677AB0321C /* utils.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 47C0559939831E764DD5897E39F0F30A /* dfu_operations_details.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 546C16D718B651D515C6381ECE7D4C13 /* dfu_operations_details.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 47D8FB843F5FD2BAF6F4C9B57F5633E2 /* FirmwareServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B29DCF80EC1B476962ED99AA3B2B470 /* FirmwareServer.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 47FC808B2E54B10D0BBE986EA71DB1B3 /* DFUController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D9D78A668A89C64803144239FD3E9BF /* DFUController.swift */; }; + 483ADC7D8D5EE822B84172AD411EE23B /* MetaWear-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B881AF4D487065D1770F89AAD90360E /* MetaWear-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 499A2B489067A1A3971A357091FD6A8D /* magnetometer_bmm150.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B36FC4E48CEE0F33F3231BD8BA112318 /* magnetometer_bmm150.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 49DE6A9DAFB4D84F3B2DC9DF56EF79F1 /* Executor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451E8B587720F2BEF3BE88868AA9CEB4 /* Executor.swift */; }; + 4A11D281A4E0627B4A03BD208C1AAAB6 /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A41E41020280AE830D0C743267F4744 /* memory.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4A163C5378137EA216670C598ADD9839 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AD6F9ADF08B67FFA34BDE21719B1117 /* version.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4A196F15C24662AB2E21EC7551D6F21D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */; }; + 4A2279DE11FE96D58BECB824427A1514 /* gpio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F86F228E1FC44D6BB62174D0FAD1 /* gpio.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4B617EA448E61DE985EB4D7C78EC0D02 /* anonymous_datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED9482F7D81C719B97D07AAE8DE0C20 /* anonymous_datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4B8A7066614A77C43434A90803C701E5 /* SoftdeviceBootloaderInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A501F99C53E65214336B57BF8C15FCF /* SoftdeviceBootloaderInfo.swift */; }; + 4B9630740B31E16C50C3B4F0ED6C02F6 /* MetaBootFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7F15C91EE3979177A6CE2D5466D6B0F /* MetaBootFinder.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4B9F300A52764A458F776111A48D6578 /* datainterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F2BCBD578463EB88BC90A62C0FCA1EBA /* datainterpreter.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4BFA863EF55045A95AAAFF8A0DB0CE68 /* MetaWear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956E11F13DF77F8D1720B83F4A6BEF9A /* MetaWear.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4C322B500C543CB494652B467953CBC8 /* MetaWear+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B86C849C0D94F518C891C30917C82F3 /* MetaWear+Mock.swift */; }; + 4CB70E5EB2D9CD743C19F088E0635115 /* DeviceInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27F87C7E1F692779C1640071FE108E /* DeviceInformation.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4E9A62FF63E6E8148CC69E46C30500DB /* MetaWearData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8921E73C47A7033F211248D94A0E4F97 /* MetaWearData.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4EA92372B78E4C54B292FA723C8512FB /* MetaWear+LED.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C3523E890BD3724EA15F0D1440F083 /* MetaWear+LED.swift */; }; + 5001765206FE2F194E6FBEBBDEC5C8D6 /* BoltsSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6CF7408C117FC21CEAF3797F9EF592A /* BoltsSwift.framework */; }; + 5010603EF9C1C8985E397371C4D4B6C7 /* FirmwareBuild.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CAD8BF247E05BE3819D6EAE4463B4A /* FirmwareBuild.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 510A1E5020AE426C651FF7E9211EF13E /* Bolts-Swift-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 70AC435F59E13F0125F0E789D041C1C3 /* Bolts-Swift-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 511095590DF1931FD73FC9D4B9C21B8A /* LoggerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E411A5E5593092129FD8DBF4E70F00CC /* LoggerHelper.swift */; }; + 51A1D2B4EF71C63DDD75CC442B148BEC /* led.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAF2A8E429407A78576C79FC06722F77 /* led.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 51AF94AD96F5C07FE95EC3CE50E83068 /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B467B9BCA78B0BB519888E22BC5D2B4 /* event.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 51CC2CB6AA43566B3758DA2A5916485F /* switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CD5FF81C06773E0C0B179E63CAD2F9D /* switch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 532555196F2826C12EB0CF3C51501CB5 /* threadpool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 151015D50ACCAB5DBE22A5BDE217457A /* threadpool.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5356E7EF8403B2A5FDCE571EC3256C6F /* metawearboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28EE2030BE47C702DD7CE5C350586B0B /* metawearboard.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5396AA81BA4C7EDB3EAAACE162C375CB /* serialpassthrough.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64F7598BE155DA2BC2937CFAF358BAE /* serialpassthrough.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 541B07F48697A09890F46D343056532A /* DFUPeripheralSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78169E520778F3CCC6BA3B12B3192ACC /* DFUPeripheralSelector.swift */; }; + 5444800DF0C956F4F432F20860297563 /* Zip-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 74299291E704C4E70B5B938FE71CCD5C /* Zip-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 544E44C0C78BA3365DC013733B73FA5A /* cbindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2222AA051A2657F05060085DC8B17562 /* cbindings.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 545DB13BCB7F96EE5DDA595082ADA324 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5F90E21E1EC32E577938414EC8DD8ED8 /* debug.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 558E398E75C0CFDB6DDAB6D25DB62328 /* Task+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BA519C617380F70E744607863ED703D /* Task+Delay.swift */; }; + 55D41A5A87DD13CA955306BF733BD49F /* serialpassthrough.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64F7598BE155DA2BC2937CFAF358BAE /* serialpassthrough.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 585858B0C87310D782BD50A9CA7660B2 /* DFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D51AA130BE255802CC44122EFBD9D837 /* DFUPeripheralDelegate.swift */; }; + 58686C419A863C8BBBC1FE223826C8D5 /* Manifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64A71884F6F13BA5601C13B4DAB2265 /* Manifest.swift */; }; + 586E59A87C29C4437B77A37F01CD08F5 /* led.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAF2A8E429407A78576C79FC06722F77 /* led.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5912B57541DFA685C0161A66C5A90FBC /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 6007B14F565FF154037111E7604F2A18 /* zip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 599DF4151C07E6AFD0C01B22BDC368AE /* Task+WhenAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6565BA5B85EFB397511A3DFD9D7C87 /* Task+WhenAll.swift */; }; + 59AA4B6E8240240FE0CA4CE3654C5090 /* crc32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB95CF28FEFDF373A66C344F5C15874 /* crc32.swift */; }; + 5A30AD1C05B50E8D74F1B48615F2FD8B /* TaskCompletionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC9FAFBC7C89F2F3ACF67B02080B1073 /* TaskCompletionSource.swift */; }; + 5AC990C4E5FAD4DB522DF9BEBD2473C8 /* SecureDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B7E1599FB05F27AE17850BDDC7A9426 /* SecureDFUPeripheralDelegate.swift */; }; + 5BCE35191B656F94155C35BF61862775 /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D4E5BB449C5462A48E3E2BF7C911B70 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5C4204F1531775064A01AF5E117F6A86 /* threadpool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 151015D50ACCAB5DBE22A5BDE217457A /* threadpool.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5CCECA469E0EEAAD3C753536E71F6FE5 /* MblMwGattChar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E904F81BE9147A7D7773BF65CCBAB155 /* MblMwGattChar.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5CE4EF691064E1028C40C488C6B8174D /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDC859CA7938AF835B718231608B3706 /* Bridging.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5D995E7DB472BF1862DD48C73E121C85 /* dfu_operations_details.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 546C16D718B651D515C6381ECE7D4C13 /* dfu_operations_details.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5DAB1FFCC458A8FA7596678FEA5B6E0E /* ibeacon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC2B233BDA0CDDBB0162B7D4960DA961 /* ibeacon.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5DF03A51B7B21C0CBF80ECD686DF2244 /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = DAFD906B0F2FCAF1C6DC95634145FB67 /* unzip.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 5EF1231CFB30051BC659871CEFC8717C /* cbindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2222AA051A2657F05060085DC8B17562 /* cbindings.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5F89D00D3D868B747539CCEAFC94E07F /* BoltsSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6CF7408C117FC21CEAF3797F9EF592A /* BoltsSwift.framework */; }; + 6053DCB1315F1B4A12C7AADDAFF5834E /* miniz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 722B391E0EEAAAC58B70C7A6186FCBF6 /* miniz.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6083387D83C6533A2C348AD1897664C9 /* Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0646800EECED1BAF4AC13CB9E3866330 /* Data.swift */; }; + 609417A0AADA9A60224EF948BECE0159 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */; }; + 60C80573208EB87BFE7DD09C5C3CE0D9 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A68505B62486622F416FFE0D5BEFDD46 /* CoreBluetooth.framework */; }; + 61444FB82E3DB957A9A8DC3B95480107 /* accelerometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C193F482E2D876192526D01572D72C /* accelerometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 63BB63558E4ADC1FC689D74F246CB406 /* Bolts-Swift-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 224573BEAB5C6F484091369A5C159860 /* Bolts-Swift-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 65997CAD0423697633C81FF6617E0C1A /* FirmwareBuild.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CAD8BF247E05BE3819D6EAE4463B4A /* FirmwareBuild.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 65D38D7D5902E6322ADE22648D553502 /* MblMwDataSignal+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 441DA5864008D13EECD7D2ADEBBA477F /* MblMwDataSignal+Async.swift */; }; + 65D921E8F0F42963E4EAEFB0EC30ACAB /* cbindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2222AA051A2657F05060085DC8B17562 /* cbindings.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 66B6CD3B5D5401756BC548584ED6DDC9 /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = B98C6F46BB0AA3EB2B2A7B07DFD30E7A /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + 66DC56910770B8DD6CCE73616C28FF89 /* MetaWearData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8921E73C47A7033F211248D94A0E4F97 /* MetaWearData.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 67611705539950453B74BF7938761B9C /* Executor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451E8B587720F2BEF3BE88868AA9CEB4 /* Executor.swift */; }; + 67901822DAFCA7CCC4938EFF7F516366 /* conductance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 06D21B509E1755BBF97983C4BA8C8688 /* conductance.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 69003AB852538F30E1D650D7D564C64F /* MetaWear+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DDD6331860AB76E867A472FCCA4A15 /* MetaWear+Async.swift */; }; + 69C068460451B04C5E868E0EE4A3B2A7 /* Zip-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F2B2981664E907326B8CD8F38DB337BE /* Zip-iOS-dummy.m */; }; + 6ABE0F42059EF5412505AF813F6E96AE /* MetaWear+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DDD6331860AB76E867A472FCCA4A15 /* MetaWear+Async.swift */; }; + 6AF5794401BCDAE5A6677BD0D1DB48B7 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 442785F52975C0A54D634862B58852DF /* timer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6B0123BC9297E2485D54AAD996A36461 /* sensor_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C5265920442C3F5E551E1CCF4D18182 /* sensor_fusion.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6B1257F6D62499BB1F431A1D35F4DF2F /* datainterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F2BCBD578463EB88BC90A62C0FCA1EBA /* datainterpreter.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6BDF2ECB5B6038E122197201D2BA5DD3 /* BoltsSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6CF7408C117FC21CEAF3797F9EF592A /* BoltsSwift.framework */; }; + 6C05CB7640D79AE0C1222B9FA3E0221D /* MetaWearScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87B23CA6B555C2D2E459958935BB5610 /* MetaWearScanner.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6D210884BB35AF67732D0001AA60E63B /* DFUPeripheralSelectorDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20414AC783F2C79421FC802B17AF6B37 /* DFUPeripheralSelectorDelegate.swift */; }; + 6E16FB1085D18A183728DC9D8A4A0CF1 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */; }; + 6E2809E7D9B30B01598BD457F02AD3C6 /* ManifestFirmwareInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F94A36E3AFA6EBEF7FB8A34A4352175 /* ManifestFirmwareInfo.swift */; }; + 6FF3E102D30E2A0ADCB22C3DDA3F4A34 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A0EA4898D2E15CFDE928E63212D4DC5 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 706D99627D7A9951C56B9D4348B6843C /* TaskCompletionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC9FAFBC7C89F2F3ACF67B02080B1073 /* TaskCompletionSource.swift */; }; + 7229A4002503339032D2B0B553E401A6 /* Zip-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8B75BB7F4B860A1FD268AAA86C08F840 /* Zip-macOS-dummy.m */; }; + 72E07A34CD9387D8A3D5CCA95B1312F3 /* proximity_tsl2671.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C4441E516BEA95769BFBFB24AF730C0A /* proximity_tsl2671.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 72E6627715762203FB4942ED0C05AAD6 /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A10B2EA553069C796888CFC9DF799A8 /* QuickZip.swift */; }; + 73683063F9F237B23CE0BFDBDA6386A3 /* Pods-MetaWearIntegrationTests-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DA457849EC8E8226A65817B1A96B66C1 /* Pods-MetaWearIntegrationTests-tvOS-dummy.m */; }; + 742DE3D25E5989F363D427100AFF98E5 /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDC859CA7938AF835B718231608B3706 /* Bridging.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 746F350BD877C479524710577F52C5A5 /* DFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DBE3E77D7E156330FD7558A2651C6FF /* DFUPacket.swift */; }; + 75EA3DEDCA003248BA3969350E1FFFA6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B6511866AFA1D91F9311C7E013E63A0 /* Foundation.framework */; }; + 75FD38260945A474EA3C0332446C08F7 /* miniz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 722B391E0EEAAAC58B70C7A6186FCBF6 /* miniz.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 765671213DEFB44E4938FD9198618B7C /* gpio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F86F228E1FC44D6BB62174D0FAD1 /* gpio.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 770F558B41EAAD6879F585D1AEACE14A /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 442785F52975C0A54D634862B58852DF /* timer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 772083F7FE581ADBDB15469FE93E49F3 /* dfu_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A428FF06274A10743F084C0FC139B173 /* dfu_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 77424BD1EA196C2E367789EAC38DFA3F /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF62D1D2496DAEDF7252309D09F07517 /* Errors.swift */; }; + 77B3E8B47A75744FAD5E09E7B94A4ECC /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDC859CA7938AF835B718231608B3706 /* Bridging.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 78095301A94ADC38ABAA05262E25165A /* MblMwDataSignal+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 441DA5864008D13EECD7D2ADEBBA477F /* MblMwDataSignal+Async.swift */; }; + 78EA57F0A3A10DD5D4C92A726152B90D /* accelerometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C193F482E2D876192526D01572D72C /* accelerometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 79F183D03D2385836A943E7A36835504 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 3128808BBD3D9A7F117E50386DF5ECCE /* zip.c */; }; + 7A38F216AF9F0705471FC7EBC50369B4 /* moduleinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6401588989350CBC1E3C97081535C49 /* moduleinfo.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 7A9E189F7F86928C5E6DE3FC3D3D4BF1 /* DFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBDE9A1CA6F13D55B0E00898C7C1E25E /* DFUPeripheral.swift */; }; + 7ADB1A7DB3F2863551AC8A2B5463A3B1 /* SoftdeviceBootloaderInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A501F99C53E65214336B57BF8C15FCF /* SoftdeviceBootloaderInfo.swift */; }; + 7B957D17CC23A0D05D5E3E45E12FA653 /* ambientlight_ltr329.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5E1A45818A3870EDDC0C4A0591916DD /* ambientlight_ltr329.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 7C834E2A787C68475C59ECF36E0DB2DB /* gyro_bmi160.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AEB96CFB86A8E187868523F74EB566E /* gyro_bmi160.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 7CFE266F00CBA8CF8BEE36AB9BEF980C /* dfu_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A428FF06274A10743F084C0FC139B173 /* dfu_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 7DC07F76B8133E5B18D94E90084D4905 /* Task+WhenAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6565BA5B85EFB397511A3DFD9D7C87 /* Task+WhenAll.swift */; }; + 7DC58DCF6420BDB7342D75B1829A6234 /* DFUFirmware.swift in Sources */ = {isa = PBXBuildFile; fileRef = 436FDBC3E5D46266015EEE80C9B342B5 /* DFUFirmware.swift */; }; + 7E3F159AB86026B30F63F3777017866C /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5F90E21E1EC32E577938414EC8DD8ED8 /* debug.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 7FC088A24F21EEA43007179499044353 /* async_creator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC51D8C20E056DD5444916DF631736E6 /* async_creator.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 80187C20199FBB70BED85C68277F6CC0 /* Task+WhenAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1E7575441476F45722A743BD2EC13D /* Task+WhenAny.swift */; }; + 807A8B0535B108D0EEC5C0EF4324F310 /* multichanneltemperature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 890AB877953EF60E5615B9AE04D485F7 /* multichanneltemperature.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 80DE7535DE8E486CC38C861E4758CE6B /* async_creator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC51D8C20E056DD5444916DF631736E6 /* async_creator.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 81293A375BD83F6E25A5245C3B626A5E /* FirmwareServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B29DCF80EC1B476962ED99AA3B2B470 /* FirmwareServer.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8162ED78186BA288F5691074A1F770A7 /* gpio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 53A5F86F228E1FC44D6BB62174D0FAD1 /* gpio.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 821BECCEB89020965B0F25171233458C /* Executor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451E8B587720F2BEF3BE88868AA9CEB4 /* Executor.swift */; }; + 82E82A5CFF152F1A1877702C647B9110 /* colordetector_tcs34725.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCC5F9E3F3BDACA487485AA78FA35DD7 /* colordetector_tcs34725.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 833562FEE9D37CCF04F286DC293037E5 /* DFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B0F8DB23E56A44D8EA9A43AC7C5CCF /* DFUService.swift */; }; + 83CDE0D3C64C3F8E0444DEB6B8B9CA4A /* threadpool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 151015D50ACCAB5DBE22A5BDE217457A /* threadpool.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 84AF0DAFE2FECBAF83A804323488EA8E /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF62D1D2496DAEDF7252309D09F07517 /* Errors.swift */; }; + 84EAF7FC7DBF55C6D8D33EA352CDACD5 /* MetaWear+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DDD6331860AB76E867A472FCCA4A15 /* MetaWear+Async.swift */; }; + 85A103EC8E68772031CB908A4243A97A /* accelerometer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82512F4F2249F20A9C7852E5E62707C /* accelerometer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 85F7A65CE757F75EBCFF491BF36EB601 /* multichanneltemperature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 890AB877953EF60E5615B9AE04D485F7 /* multichanneltemperature.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 86C8414F4D0FD2B50200479547231E5D /* DFUVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 707D5C5A850374E84093B35D5F050ECC /* DFUVersion.swift */; }; + 885A1FB4993279E7EC126558D1F34BE0 /* ButtonlessDFU.swift in Sources */ = {isa = PBXBuildFile; fileRef = E70959117815002F51A0AAAD41C4AECE /* ButtonlessDFU.swift */; }; + 8874779E64CD60F7B14267D947547F93 /* dataprocessor_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C645D8E39A7F591C903260BB3C48C15A /* dataprocessor_config.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 88887E52B4EB869335E43EAFF85103BA /* ibeacon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC2B233BDA0CDDBB0162B7D4960DA961 /* ibeacon.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 88B26EFC4A62586425232E2517442849 /* miniz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 722B391E0EEAAAC58B70C7A6186FCBF6 /* miniz.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 89B2EF04379923BDDCE210000E11160C /* MetaWear+LED.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C3523E890BD3724EA15F0D1440F083 /* MetaWear+LED.swift */; }; + 89B6C3F8FE2F41EEC0F832B1D59C37E6 /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1B467B9BCA78B0BB519888E22BC5D2B4 /* event.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 89F2DA5C4CBA0D97C13879B82ECFA4EC /* MetaWear-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A5AF6AD1FACCAF801B63B1F1F9E784C0 /* MetaWear-iOS-dummy.m */; }; + 8BA893B6556D9D995AE9C3244ED79C61 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F6E0C90918D425EAD5026E7345F55BC9 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m */; }; + 8CD942945446A79765BBF3E74BC38E9C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */; }; + 8CDBCE46BEE7ABD1E58EEAE1B19EA8C7 /* Bolts-Swift-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 66E14CE143A947E19091B8A03F233B29 /* Bolts-Swift-iOS-dummy.m */; }; + 8D721558818B1D595149CA613EEB6CBD /* colordetector_tcs34725.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCC5F9E3F3BDACA487485AA78FA35DD7 /* colordetector_tcs34725.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8E24184B3FE1955E7E5BE11F93FACA1D /* Bolts-Swift-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9160164C2E7AE75FC2BE3F71A71CFB65 /* Bolts-Swift-tvOS-dummy.m */; }; + 8E99BB2AC7561100C11DABEB94DC9593 /* MetaWear+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B86C849C0D94F518C891C30917C82F3 /* MetaWear+Mock.swift */; }; + 8EAE3B8FE1DA04F0141E6CC703F07144 /* MetaWear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956E11F13DF77F8D1720B83F4A6BEF9A /* MetaWear.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8F706077347307DEB72B32BA7B062D83 /* MetaWear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 956E11F13DF77F8D1720B83F4A6BEF9A /* MetaWear.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8FEB7E7D1558815B6708DB79B9822DF0 /* LogDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DDEFF1315B4D148E9CA05364AD7DF4E /* LogDelegate.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 90408E1DDC09A4DE4657FD2E7308EDCA /* iOSDFULibrary-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BD0766CF780610D401CC416B4E794D12 /* iOSDFULibrary-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 909F49CD4C75B282B488FBC699C63ADC /* DeviceInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27F87C7E1F692779C1640071FE108E /* DeviceInformation.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 90E61DAFE3A8C4F49DB114361EE78463 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8C2EC55135D596343E0DB64B3D2C31D2 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 9139CD3EBF1F304003500D92B0AB5221 /* moduleinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6401588989350CBC1E3C97081535C49 /* moduleinfo.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 915E95A0594A89F095DE18B6A39F4F6D /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D9FD19B7C8CFDEF53C2D6864760B129 /* task.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 91916670D967E22B5356C77EC7F50B03 /* dfu_operations_details.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 546C16D718B651D515C6381ECE7D4C13 /* dfu_operations_details.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 919AF34A15B19EAB4258A7CC8CEECBC6 /* humidity_bme280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E942A292BF531CBC63CAC9ADB90ED49 /* humidity_bme280.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 92D1AD9752BF1FF0E6365946F895244F /* DFUServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30A8904C199C5E7BCDB0709DF06AE8D /* DFUServiceDelegate.swift */; }; + 92D29C87917E10852D81C8AC6EEC6DE2 /* macro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90C20DFE18FB7A6936DD7E4A628B5621 /* macro.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 93AC353E35B65E46A17865637F496C76 /* MetaWearScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87B23CA6B555C2D2E459958935BB5610 /* MetaWearScanner.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 94E57C1C705C6E554AD68F1A2F46FEB9 /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46342162168E87FE5F7167677AB0321C /* utils.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 95BB9D4337234C03966F7F995B7F7153 /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDC859CA7938AF835B718231608B3706 /* Bridging.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 967AECCA34C2F32F39D2A6A7145F918D /* ambientlight_ltr329.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5E1A45818A3870EDDC0C4A0591916DD /* ambientlight_ltr329.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 967BAA066CB060453F5FF91900E7970E /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */; }; + 97397FFE16EE3B02C0753B3D3AF89500 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC15AB3BD8B826657CD5776901780E /* Task.swift */; }; + 9752A267102DB34049F8EADCEBF8F367 /* ZipUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25C83457451FD5A29DBFC9D7AA22E184 /* ZipUtilities.swift */; }; + 97EC9B6B9D1633FE8380D11BC523590E /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D9FD19B7C8CFDEF53C2D6864760B129 /* task.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9830EDBFE07C39C9211E09F06A284237 /* anonymous_datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED9482F7D81C719B97D07AAE8DE0C20 /* anonymous_datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 989DE089BE83EA7B201B67075D142AA2 /* String+VersionCompare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B0F7A8ADAFE2D840A81E4E98B4B48E /* String+VersionCompare.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 999C2367DC849E6DF4A3D0D268CE19BD /* conductance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 06D21B509E1755BBF97983C4BA8C8688 /* conductance.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9A7A32327D53837C9A0555A0AD3F11F3 /* dfu_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A428FF06274A10743F084C0FC139B173 /* dfu_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9A90C6CFA64219E2A19250AFD48CEFAE /* Task+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BA519C617380F70E744607863ED703D /* Task+Delay.swift */; }; + 9AF696DA6B10C24DAAC674ECE17E7A2D /* SecureDFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FA3557295165787949D6D36AC9699A /* SecureDFUPacket.swift */; }; + 9B4B66D85B3E028671649595767353C5 /* zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 3128808BBD3D9A7F117E50386DF5ECCE /* zip.c */; }; + 9C4B0EB9E3769D083E1A8F572E7AC862 /* ZipArchive.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC035182E4920C4BF68853295F21200C /* ZipArchive.swift */; }; + 9C659CB4CF0940FC1057C046BC2C685A /* serialpassthrough.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C64F7598BE155DA2BC2937CFAF358BAE /* serialpassthrough.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9C75999A8805F350D6958BDB1A19C603 /* metawearboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28EE2030BE47C702DD7CE5C350586B0B /* metawearboard.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9CAAD45FC5301E65C1F52A4176999920 /* ScannerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6D410282D6F5301B98BCB8E0EE4923A /* ScannerModel.swift */; }; + 9D67428C1B4B311494E11494566CD67F /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A973EDFDFFC64A9B54CEF3EBD264BDB0 /* logging.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9E77FC91D5556152DFE77E997C238E79 /* cbindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2222AA051A2657F05060085DC8B17562 /* cbindings.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9ECF3DF30128C1ED14BD7D52084BE432 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC15AB3BD8B826657CD5776901780E /* Task.swift */; }; + 9EEA095A1F42056B9D9E4874ABB090B3 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 442785F52975C0A54D634862B58852DF /* timer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9F8C4C551B653AB3FDC4AFF59D0C7540 /* multichanneltemperature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 890AB877953EF60E5615B9AE04D485F7 /* multichanneltemperature.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A01D917C7B4DB2E61E18EA6CFA8A3315 /* LegacyDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67A004C058CA6A4E4E5785CE990A602E /* LegacyDFUPeripheral.swift */; }; + A04C4A7F70A78BA11548D54E95EF4967 /* SecureDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B7E1599FB05F27AE17850BDDC7A9426 /* SecureDFUPeripheralDelegate.swift */; }; + A0A589753D6E30B528687EEDF919CCFB /* Executor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451E8B587720F2BEF3BE88868AA9CEB4 /* Executor.swift */; }; + A0CF7FBBA3C54D7B825E0E1294FC9B6A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */; }; + A0E3158319D30120C2A0CD519D11952D /* DeviceInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27F87C7E1F692779C1640071FE108E /* DeviceInformation.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A2C5BC32A259A7779F8532DE5B932D4F /* SecureDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1641E74D80DF7148698DE7B1F574FCB4 /* SecureDFUService.swift */; }; + A30DF96726955F571749D2EFD0C542E1 /* metawearboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28EE2030BE47C702DD7CE5C350586B0B /* metawearboard.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A3B858DA4D8EA2A5809D2661843BB966 /* Bolts-Swift-watchOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A851CD3BC5965A003619E9FCE7C8F7 /* Bolts-Swift-watchOS-dummy.m */; }; + A4034414F66538426C228D71E3DE987F /* macro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90C20DFE18FB7A6936DD7E4A628B5621 /* macro.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A47A42011D17D98CD7792082278BAB5E /* barometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12BF577CAE7BC994721AA252211F53DF /* barometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A4F82CBFBA1525702ACA91C3D39F2251 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D9FD19B7C8CFDEF53C2D6864760B129 /* task.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A52DB41F56C7AD7A6E6312C6B2CAAF44 /* MetaWear+LED.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67C3523E890BD3724EA15F0D1440F083 /* MetaWear+LED.swift */; }; + A57B25508DF5FF563615D5F7AA2590D6 /* humidity_bme280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E942A292BF531CBC63CAC9ADB90ED49 /* humidity_bme280.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A5BCD65354B56BE915D580BF2C1B11CB /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 638340E73003B3641A29363DEBA5E5A0 /* settings.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A5F4149CE4EB785A8A7FCBDC73ABF689 /* DFUServiceSelector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C5C6DFB62084D2404EBF1C9A10B7C9D /* DFUServiceSelector.swift */; }; + A7C0D4CFECC8BDD8755BE947238C2284 /* DFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77BD5E4E466C25D780F8005383032CF0 /* DFUServiceInitiator.swift */; }; + A8106BA73F74838D8887EEFDF305E625 /* CBUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C6DA6427752A0B49FCD4F46FD110B9 /* CBUUID.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A9511664CA2E8B6DDDD96739FACABA7E /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D6EC9B2806D28BF52043D77FBD4563EC /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + A9D80659CA7AF189759E8D8E037EC217 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 63BD66F0058B68A8F0A048B9B93F17D7 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m */; }; + AACCC29A21F4405962820F25016FFC4E /* Double.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93F964DDAC8BD026D683BF54FD168B21 /* Double.swift */; }; + AB493B7386316D35B70B182D790999AE /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D4E5BB449C5462A48E3E2BF7C911B70 /* ioapi.h */; settings = {ATTRIBUTES = (Project, ); }; }; + ACB063C3999BBBD91B976C904C2EFC27 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6447B847713316FF16EEFCB14B84342A /* CoreBluetooth.framework */; }; + ACEB9225AAEC01EEBC4103C97D58BE2C /* haptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263B0B60310737A9FF3C124DE53AFFB7 /* haptic.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + AD32A07C16134B6638329FBAD6C39160 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */; }; + AEABF9567A8FA64CF00A6C93805E34F9 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2324F9E4F7F62F924F878871A0776E7C /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m */; }; + AEDB6188989BF7FBAF85D46F927C5A23 /* Bolts-Swift-watchOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B5EEE30CA311A653E0730CFD5A60BD45 /* Bolts-Swift-watchOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + AF5C614A0F73D5F6707C564614FA5FBB /* anonymous_datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED9482F7D81C719B97D07AAE8DE0C20 /* anonymous_datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B01735E3A92E193DC5F2222D8DE44AD1 /* accelerometer_mma8452q.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2408A3AA0166131C1F428B734EA0318D /* accelerometer_mma8452q.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B0729130E273672EDC2DC60946E7E9F3 /* DFUController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D9D78A668A89C64803144239FD3E9BF /* DFUController.swift */; }; + B0F49EAD5768CBA0971708A68AAF2507 /* responseheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C431B76C0095B9213F871704369432C3 /* responseheader.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B1650C9B14D53CE1153E85706505360E /* DFUStarterPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D9F6E07B310AD2A19E55F6D09AB5096 /* DFUStarterPeripheral.swift */; }; + B20686A480E9EEA1425DDDF4D9BD0EA7 /* Task+ContinueWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF432B434BADB6E8392DE30A6AB193BA /* Task+ContinueWith.swift */; }; + B315B486A09D21D6880E1B092969704A /* colordetector_tcs34725.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCC5F9E3F3BDACA487485AA78FA35DD7 /* colordetector_tcs34725.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B33167B6F1208E49E23D9A5BAF419082 /* conductance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 06D21B509E1755BBF97983C4BA8C8688 /* conductance.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B35BAD2E3E18FE673D9359AA78B78E9A /* haptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263B0B60310737A9FF3C124DE53AFFB7 /* haptic.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B3FF00EAB1725AA44452F203A0EED8D8 /* Zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 9A0EA4898D2E15CFDE928E63212D4DC5 /* Zip.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B55D525D7720158477301B2D4CC3D9A1 /* ibeacon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC2B233BDA0CDDBB0162B7D4960DA961 /* ibeacon.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B5A384DDCDEB2D7FC67D010CB4887854 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 957DC977FA7499B0E2E1A5111013F4EF /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7233AFC7384A8BFA78AD310266888EB /* Zip-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 1638CDB3FFAA0FAD1BD741E7A1789DCB /* Zip-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B7A3932E0B51526A242699C8EDAFCF5C /* SecureDFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = B70E25EA2DB1CFC2D6487AB5F682F08F /* SecureDFUControlPoint.swift */; }; + B84068DF0ADB20006E4DAABC7737013E /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DD03A653270B8F24D06ACCC4E7FFA544 /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B8C2D1C42D95C530BFDC535397034A5F /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F4AD0F21AEC06B27504E07071E55A3D /* Zip.swift */; }; + B8C5053926818036540DE1F634F2C40F /* Manifest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D64A71884F6F13BA5601C13B4DAB2265 /* Manifest.swift */; }; + B8E5D7484F8E9BD7FCF0AE39306CF4F0 /* gyro_bmi160.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AEB96CFB86A8E187868523F74EB566E /* gyro_bmi160.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B92B621D068613EA780349591BD9E7A4 /* accelerometer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82512F4F2249F20A9C7852E5E62707C /* accelerometer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BA24BA3DD363B4DDF5EC6760EEE8D192 /* Task+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BA519C617380F70E744607863ED703D /* Task+Delay.swift */; }; + BA3C797D36BA006963C1643FFD68C92F /* MetaWear-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 169779CB04EDD25311BFBFF0A0DA212B /* MetaWear-macOS-dummy.m */; }; + BB11078E22D2F727E076181AF8B2B796 /* MetaWear+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12DDD6331860AB76E867A472FCCA4A15 /* MetaWear+Async.swift */; }; + BB6626C542BE9702B9EB1B159D6CF774 /* LegacyDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DEA0BED980E224B35BACC8CDC6A84A /* LegacyDFUService.swift */; }; + BBA68DAB0184076286F7C2EE4D3D998D /* metawearboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 28EE2030BE47C702DD7CE5C350586B0B /* metawearboard.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BC4C7BBB344C42F61AD5B3B5E53CA012 /* DFUVersion.swift in Sources */ = {isa = PBXBuildFile; fileRef = 707D5C5A850374E84093B35D5F050ECC /* DFUVersion.swift */; }; + BC8A8AAF66B1DEF18D848D952FDAE93B /* Task+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BA519C617380F70E744607863ED703D /* Task+Delay.swift */; }; + BD01EF03FFB24FA5A2BB03C88F984334 /* Pods-MetaWearIntegrationTests-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = BC75C820DBE7595868D2C03791739134 /* Pods-MetaWearIntegrationTests-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + BD0249C4F9C044C032A407A66D962992 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5F90E21E1EC32E577938414EC8DD8ED8 /* debug.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BD2783E59749C2AFB470F0AB17084039 /* LogDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DDEFF1315B4D148E9CA05364AD7DF4E /* LogDelegate.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BD4BDDBC65922CCECC4E5C35B23DB9E4 /* LogDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DDEFF1315B4D148E9CA05364AD7DF4E /* LogDelegate.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BD7448AE1CC1ACBC4602C981B759215A /* barometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12BF577CAE7BC994721AA252211F53DF /* barometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BD76A1A455B04BD579252F7EBA3B3CA6 /* datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2EDD3D9D4160990AA22AC9137B4497BD /* datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BD9262F3843551A9164325A4035F0F22 /* DFUStreamBin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67D3CE7C33CF5DDCCFFACDB7E73DF3EF /* DFUStreamBin.swift */; }; + BF5C900E5999D100C12668B1A57DFAF9 /* dataprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83265893F83E49698EDBE65CD6E8CB42 /* dataprocessor.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C01505BC08809AC8901AA940D45E3288 /* sensor_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C5265920442C3F5E551E1CCF4D18182 /* sensor_fusion.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C0B77B0FD59F30EF11BEED0E982C6062 /* MblMwGattChar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E904F81BE9147A7D7773BF65CCBAB155 /* MblMwGattChar.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C12752C9A61442A71AC0184FC29F6647 /* ibeacon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FC2B233BDA0CDDBB0162B7D4960DA961 /* ibeacon.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C30783276D129CF37A89C63D7EB754A5 /* IntelHex2BinConverter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F92E58A3F6AB05594E04E312A87C225 /* IntelHex2BinConverter.m */; }; + C3106541CD36B9208682CE1BDACDDD9D /* DFUStreamBin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67D3CE7C33CF5DDCCFFACDB7E73DF3EF /* DFUStreamBin.swift */; }; + C3B810189B466121827436DDD9D24CCB /* DFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D6FEC3C86DBBC69C0D23FF4C84222E2 /* DFUExecutor.swift */; }; + C42E3F0780F4A8485730DC00AF2BAF7A /* accelerometer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E82512F4F2249F20A9C7852E5E62707C /* accelerometer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C4898EBA8C06A2D5AFC6E743B622FD16 /* BoltsSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6CF7408C117FC21CEAF3797F9EF592A /* BoltsSwift.framework */; }; + C496B135776B64230FCE2FFD066BAC09 /* IntelHex2BinConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C877840A3F8F69B16D4815B289EE4B4 /* IntelHex2BinConverter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C501C9E20770C26CCA271DF918B12D91 /* async_creator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC51D8C20E056DD5444916DF631736E6 /* async_creator.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C560CC1FCDA3D2EE734CDD149E53E01C /* dataprocessor_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C645D8E39A7F591C903260BB3C48C15A /* dataprocessor_config.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C560D4FAB577D9DB27A98A463874D555 /* LegacyDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A30B865D115DD7F25E61ABE2A186A488 /* LegacyDFUServiceInitiator.swift */; }; + C57B94838F6A18930401DB65ACE85E0D /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EF747CE4C8BDB360891F16F7BBDAB15 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + C5FDC54B60E19F6A831AFFDC576DF5B3 /* async_creator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CC51D8C20E056DD5444916DF631736E6 /* async_creator.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C6B5D2208046C28BDFBA4A8CC1628E49 /* LegacyDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E8FA59A59519F6DB0472AB4DA158B04 /* LegacyDFUPeripheralDelegate.swift */; }; + C6E6A995935C634056D7DC3282966C18 /* MetaWearData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8921E73C47A7033F211248D94A0E4F97 /* MetaWearData.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C72D53A4DA1F12A98297260644EEF781 /* file_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09BC8767D1463A5A9B4ABA773E0C6AA6 /* file_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C7483ECC9DCDA6C9005459E72A0F3B51 /* led.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CAF2A8E429407A78576C79FC06722F77 /* led.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C7A996347A4FB05B58F0DFA736DED6A3 /* responseheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C431B76C0095B9213F871704369432C3 /* responseheader.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C7F87C10735B3DF63A1CB112D277E2EC /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 23A6C12931CF3E63C32D04FB3BE20E4C /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m */; }; + CA31B2A51919A8900FBDA26FDF2FCA94 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */; }; + CA492D5656A4D1D98C7C11C757A6374D /* DFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 02B0F8DB23E56A44D8EA9A43AC7C5CCF /* DFUService.swift */; }; + CAE9B81CB587A0032DE0A55C30A2AF14 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF62D1D2496DAEDF7252309D09F07517 /* Errors.swift */; }; + CB1486626A089D813569D5FB3067A31A /* haptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263B0B60310737A9FF3C124DE53AFFB7 /* haptic.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CB52738C5C2033CD7E9E3F4DA6457245 /* IntelHex2BinConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4C877840A3F8F69B16D4815B289EE4B4 /* IntelHex2BinConverter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + CBFDBC15440AF785AFEDE9D14C15FB66 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8403836D213E20B9E6DCF6B9B510490 /* CoreBluetooth.framework */; }; + CC249911A4A51B5BC7F78E0F379BEF94 /* SecureDFUControlPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = B70E25EA2DB1CFC2D6487AB5F682F08F /* SecureDFUControlPoint.swift */; }; + CC3DDDACE45A94222F7F2F7C8E1A4071 /* Pods-MetaWearIntegrationTests-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = E117E5E032CDEEA2221232E5DD9CE060 /* Pods-MetaWearIntegrationTests-macOS-dummy.m */; }; + CC8619A168F5A9C76286DDD794E55CB6 /* ambientlight_ltr329.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C5E1A45818A3870EDDC0C4A0591916DD /* ambientlight_ltr329.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CD03F503944388F3C1E22841FBF51C97 /* String+VersionCompare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B0F7A8ADAFE2D840A81E4E98B4B48E /* String+VersionCompare.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CD3CBC45D811FCDC23B39E0F165629F4 /* magnetometer_bmm150.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B36FC4E48CEE0F33F3231BD8BA112318 /* magnetometer_bmm150.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CDB09B2756FFACFC98DF23E205202262 /* LoggerHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = E411A5E5593092129FD8DBF4E70F00CC /* LoggerHelper.swift */; }; + CE19C84A9EB23CD573C44210EC0AD60D /* LegacyDFUExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1482265587727D68E5B335B391869EEF /* LegacyDFUExecutor.swift */; }; + CFAE7B6C80B820934325D48E495836A7 /* DFUStreamZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5394449ACFB624056F0385758C7EA263 /* DFUStreamZip.swift */; }; + D18E2516EF84F955BB8336C18296FA29 /* accelerometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 39C193F482E2D876192526D01572D72C /* accelerometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D1A9C1E3D605A354B01E1CDF1A505105 /* dfu_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5DA30419B0A544014D9021E46503C2 /* dfu_utility.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D2680D1598855CC3BDD713C73805F688 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F4AD0F21AEC06B27504E07071E55A3D /* Zip.swift */; }; + D28CFE830AE94AF4606DA7CDFBCCE1C2 /* moduleinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E6401588989350CBC1E3C97081535C49 /* moduleinfo.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D3255028B1C6820219F92F60AFB50E61 /* SecureDFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FA3557295165787949D6D36AC9699A /* SecureDFUPacket.swift */; }; + D3C9ED46F0C3A26E2C0EE780EF00CF06 /* ScannerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6D410282D6F5301B98BCB8E0EE4923A /* ScannerModel.swift */; }; + D3CBFF49B4D5256615339B9342AEC062 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */; }; + D53BCF019352E6620FD72DB709637BE1 /* gyro_bmi160.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9AEB96CFB86A8E187868523F74EB566E /* gyro_bmi160.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D7B5890A27145AF49CA42046B1A1F3B0 /* haptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 263B0B60310737A9FF3C124DE53AFFB7 /* haptic.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D7D9F28E6E985D2EE47A29428C2B57B8 /* FirmwareServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B29DCF80EC1B476962ED99AA3B2B470 /* FirmwareServer.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D8A13C82AEEF5FFE50F53DE0947DC159 /* DFUPacket.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DBE3E77D7E156330FD7558A2651C6FF /* DFUPacket.swift */; }; + D906AFE35B3EFFC40A36C8887B277A2B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B6511866AFA1D91F9311C7E013E63A0 /* Foundation.framework */; }; + DA1DEA51486101617DBA21AD5D4516DB /* QuickZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A10B2EA553069C796888CFC9DF799A8 /* QuickZip.swift */; }; + DA753018FC14B6E885E42C302CDD7AEB /* miniz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 722B391E0EEAAAC58B70C7A6186FCBF6 /* miniz.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DB6F3B0881239CDED79CD2C6DDE6EE4C /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A973EDFDFFC64A9B54CEF3EBD264BDB0 /* logging.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DC2972AE4839C4731AECB51ECED19CB2 /* anonymous_datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED9482F7D81C719B97D07AAE8DE0C20 /* anonymous_datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DC68ACE0D1E3FA0E3BAEE02F20E1D24F /* Task+WhenAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1E7575441476F45722A743BD2EC13D /* Task+WhenAny.swift */; }; + DD2B68C22CAD4D25B8B034C9812F7A1B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */; }; + DE047809918299C6AFE534C8526FAC56 /* MetaWear-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 458A3992B98FDF97203DCE9D31CB9C0D /* MetaWear-tvOS-dummy.m */; }; + DE2ECA2032618FF780978E58F6A61BE0 /* datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2EDD3D9D4160990AA22AC9137B4497BD /* datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DE333EF2ADA1AC23FAE6322342A82B35 /* DFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = D51AA130BE255802CC44122EFBD9D837 /* DFUPeripheralDelegate.swift */; }; + DE6C90CB5A57C07A7711BEB81949DE47 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */; }; + DEA86052E87C2EEA52B14F9E30096D6A /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */; }; + DED1168FDA86194EFE18B5D7D21B9DBB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B35B48A3C2CA07A097D36491B6477526 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + DF73B4E79727C3668C8C4BCEC18A3DF5 /* humidity_bme280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9E942A292BF531CBC63CAC9ADB90ED49 /* humidity_bme280.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E0270EAD658DDBE9D4C7C3D07AB862DF /* LegacyDFUPeripheralDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E8FA59A59519F6DB0472AB4DA158B04 /* LegacyDFUPeripheralDelegate.swift */; }; + E06BADD1DCA5E757DE3EF9CD9C5D2A74 /* LogDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DDEFF1315B4D148E9CA05364AD7DF4E /* LogDelegate.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E0B02E62102FF74A10AFA5DB01661057 /* dfu_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5DA30419B0A544014D9021E46503C2 /* dfu_utility.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E161E234CF992E91874EA2DED1B495A5 /* crc32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8FB95CF28FEFDF373A66C344F5C15874 /* crc32.swift */; }; + E16D5493C744957A4AC1801E209AEEAA /* DFUStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9334FCD6A7AACF6835FD3F779309FA4D /* DFUStream.swift */; }; + E1F42966FE79DCF7B0767BAD06B11EEF /* MetaWear-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9EA7628EF4A795EAE5D4D002846CD49E /* MetaWear-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E2B4E4E5D884C8A4D7C9667F9D02F49F /* sensor_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C5265920442C3F5E551E1CCF4D18182 /* sensor_fusion.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E2DAB53DB500DB5C018F41DC3559EB9E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D83DA06622784011EB0A064E16688ADB /* Foundation.framework */; }; + E31E69CBF7B993E4C8042FD4137B4217 /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 638340E73003B3641A29363DEBA5E5A0 /* settings.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E3810E68A55D7194204C55C3F34F0142 /* DFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBDE9A1CA6F13D55B0E00898C7C1E25E /* DFUPeripheral.swift */; }; + E3E018DD4CB7B9AAB17D73F2FA44DE0C /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5EFC15AB3BD8B826657CD5776901780E /* Task.swift */; }; + E4C57FE7078CC526975C063BDAE622FF /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A41E41020280AE830D0C743267F4744 /* memory.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E4FBCD96DF4E7E09B188268ACA361C66 /* file_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09BC8767D1463A5A9B4ABA773E0C6AA6 /* file_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E66CD81F65902A336A30F6A0F7B3815F /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A973EDFDFFC64A9B54CEF3EBD264BDB0 /* logging.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E69442061A59116741347A48884994EF /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 46342162168E87FE5F7167677AB0321C /* utils.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E6E4BFAFCF0AB42A33104603F29C89A7 /* LegacyDFUService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DEA0BED980E224B35BACC8CDC6A84A /* LegacyDFUService.swift */; }; + E6ECAE547C440B2A13BF73C60B56DDE2 /* DFUStreamZip.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5394449ACFB624056F0385758C7EA263 /* DFUStreamZip.swift */; }; + E8595ADBD72B735388593E95F5F53373 /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2A41E41020280AE830D0C743267F4744 /* memory.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E9B627277B7AAFAEEEA27AB57A28981D /* CBUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C6DA6427752A0B49FCD4F46FD110B9 /* CBUUID.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + EA393B8D31225B49A13458BCFA9BD095 /* datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2EDD3D9D4160990AA22AC9137B4497BD /* datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + EA5FC5A8C155DDC48639718240CAD5CF /* MblMwGattChar.swift in Sources */ = {isa = PBXBuildFile; fileRef = E904F81BE9147A7D7773BF65CCBAB155 /* MblMwGattChar.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + EB060E4CB4A3DBA159342A4C204AADCF /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = B98C6F46BB0AA3EB2B2A7B07DFD30E7A /* crypt.h */; settings = {ATTRIBUTES = (Project, ); }; }; + EB225BEDE5CB70EC7A03AB6C991BE0EC /* TaskCompletionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC9FAFBC7C89F2F3ACF67B02080B1073 /* TaskCompletionSource.swift */; }; + EB2FA25E219327C62D3640B26C9215A6 /* Task+ContinueWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF432B434BADB6E8392DE30A6AB193BA /* Task+ContinueWith.swift */; }; + EB654D96C7CA7034D3F369CB6998A7A5 /* SecureDFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D659A54AFE195D24B85CFC70F8F6734 /* SecureDFUServiceInitiator.swift */; }; + EB68F3C73FE6AA18398AD739C159AC51 /* switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CD5FF81C06773E0C0B179E63CAD2F9D /* switch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + EC0D16E06CFE5E21423376A0ACE96020 /* LoggerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5997402F4329D853E7BCB603CE25BA3F /* LoggerDelegate.swift */; }; + ECDFC7CC78B6709EE2686006B7ED7EE7 /* DFUStream.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9334FCD6A7AACF6835FD3F779309FA4D /* DFUStream.swift */; }; + EEEF71D7C58BAE0A244AD1079E688A1D /* DeviceInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27F87C7E1F692779C1640071FE108E /* DeviceInformation.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + EF17C7D424539599B55417410D131AC4 /* Task+WhenAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1E7575441476F45722A743BD2EC13D /* Task+WhenAny.swift */; }; + EFDFAC696B000BB5C71CB02424028975 /* Task+WhenAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB6565BA5B85EFB397511A3DFD9D7C87 /* Task+WhenAll.swift */; }; + EFFDED78F3EEADE9FA77354690D888F6 /* iOSDFULibrary-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 7BBEADCADB6F366F6932BB5F4999C7EB /* iOSDFULibrary-iOS-dummy.m */; }; + F0B84CEAF50C5FFE11A72B8AD091EBDE /* Task+WhenAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB1E7575441476F45722A743BD2EC13D /* Task+WhenAny.swift */; }; + F10B6022C0382283A15F768DFFFA6842 /* file_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 09BC8767D1463A5A9B4ABA773E0C6AA6 /* file_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F1281E0D46B9A64F8074D707C78B9FEE /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = DC07C2F3FC0BF05B6E45042BBD2123F7 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F1B92955BA24324F77BEED6BBDC67AC2 /* ScannerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6D410282D6F5301B98BCB8E0EE4923A /* ScannerModel.swift */; }; + F1F8ECE80355DE1DB3F629F6C8885CFA /* DFUServiceDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B30A8904C199C5E7BCDB0709DF06AE8D /* DFUServiceDelegate.swift */; }; + F22C7A15566ABC59095FE23A18C08C34 /* iOSDFULibrary-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B40CF6B087FAD8F23589C6B130F26A2B /* iOSDFULibrary-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F2E0F3E23E5319A742DFE5237D9810FF /* conductance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 06D21B509E1755BBF97983C4BA8C8688 /* conductance.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F2F895E36F8AA8C34CE952D039C9D92A /* DFUStreamHex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB0C476B4DF7448961AA16E2943837B /* DFUStreamHex.swift */; }; + F3798B49BF33A15078C552F74050E4B7 /* responseheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C431B76C0095B9213F871704369432C3 /* responseheader.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F37F032AC0A8B7C00E1961DCEF382D48 /* SecureDFUPeripheral.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EB8744344934AE9EE2BF17D3C397A42 /* SecureDFUPeripheral.swift */; }; + F3CDF18E78DBFCA6A9A666EA4B78EE7F /* dfu_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AA5DA30419B0A544014D9021E46503C2 /* dfu_utility.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F3D1E57100188EDF64064A45AA00D8B1 /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A973EDFDFFC64A9B54CEF3EBD264BDB0 /* logging.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F3E3FE97DA19C21FB038765C74EAD4C6 /* String+VersionCompare.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94B0F7A8ADAFE2D840A81E4E98B4B48E /* String+VersionCompare.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F418D7D1A2A6881BEAD3BB91E99B3E47 /* dfu_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A428FF06274A10743F084C0FC139B173 /* dfu_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F4E0F588170327212ACD94EC1A99AEB5 /* macro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 90C20DFE18FB7A6936DD7E4A628B5621 /* macro.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F5E08157A0ABC9B31BD826D4F9CA3625 /* dataprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83265893F83E49698EDBE65CD6E8CB42 /* dataprocessor.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F7110755852180DC351B752B0F992913 /* MetaBootFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7F15C91EE3979177A6CE2D5466D6B0F /* MetaBootFinder.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F749839931F0FA6BA264F70818FCF292 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = CE777B23C2FE7FFB36E42E139E276219 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m */; }; + F7726CDB657D1D9E258C7372365CAB2F /* MetaWearData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8921E73C47A7033F211248D94A0E4F97 /* MetaWearData.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F8D42EACE580BBF6C2212B6598EE50A7 /* DFUServiceInitiator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77BD5E4E466C25D780F8005383032CF0 /* DFUServiceInitiator.swift */; }; + F8E9358B45053FEA1707208937B23C29 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF62D1D2496DAEDF7252309D09F07517 /* Errors.swift */; }; + F9218689969864875E6BB46199319806 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = BAFD64F4103B6CA1EEC440CF540C8E32 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m */; }; + F9DF67116FAB5E4FFF34CEB141BFB5EF /* ManifestFirmwareInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F94A36E3AFA6EBEF7FB8A34A4352175 /* ManifestFirmwareInfo.swift */; }; + FA0EDB61660E36304D170937D3E6E265 /* sensor_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C5265920442C3F5E551E1CCF4D18182 /* sensor_fusion.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FAD0B4A9F307D775B363961F56BDBFEA /* switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CD5FF81C06773E0C0B179E63CAD2F9D /* switch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FAF3A565AE3A25BB19CC9CD11C7E2636 /* magnetometer_bmm150.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B36FC4E48CEE0F33F3231BD8BA112318 /* magnetometer_bmm150.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FAF9ADB986CFE1A669B41F14ED3847D9 /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 877A85E3E0BF54E52BF701108B14C637 /* ioapi.c */; }; + FB06843ED26632876089BA157DB82AA7 /* MblMwDataSignal+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 441DA5864008D13EECD7D2ADEBBA477F /* MblMwDataSignal+Async.swift */; }; + FB4873AF916365CE32A4AE52E1991D0B /* threadpool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 151015D50ACCAB5DBE22A5BDE217457A /* threadpool.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FBBFC8ED7EF297D00F580DE1B36F6592 /* MetaWear+Mock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B86C849C0D94F518C891C30917C82F3 /* MetaWear+Mock.swift */; }; + FD9D08C5F249C7C97877749C02F2F3AD /* colordetector_tcs34725.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FCC5F9E3F3BDACA487485AA78FA35DD7 /* colordetector_tcs34725.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FEA52351D46AC22D3023A4253395C3AD /* MetaWearScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87B23CA6B555C2D2E459958935BB5610 /* MetaWearScanner.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FEBA43A95496A95A9B4BD16E613D457D /* dfu_operations_details.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 546C16D718B651D515C6381ECE7D4C13 /* dfu_operations_details.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FF25E41B845E454E3AAF96DA14B8378F /* MetaBootFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7F15C91EE3979177A6CE2D5466D6B0F /* MetaBootFinder.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 0827BA9EE49A71078AB2DC803EC52213 /* PBXContainerItemProxy */ = { + 011CB45E024B018400CFE831A7BF4707 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = AA3C39426CBD48108BC3ABCF231AC2DE; - remoteInfo = "iOSDFULibrary-iOS"; + remoteGlobalIDString = 581D3B58E73E74943B0B279158A37B4B; + remoteInfo = "Zip-macOS"; }; - 0B52C7A6F916FFC354D4BB8618A80AE7 /* PBXContainerItemProxy */ = { + 07D9FFE142062341B7EC749CAF7477EA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 3413DD54A59A17F67D7D63397D806BD5; - remoteInfo = "FastCoding-macOS"; + remoteGlobalIDString = 93860DEA49AB0A3DE8BED027017FADD3; + remoteInfo = "Bolts-Swift-tvOS"; }; - 0B6B69CB1ECC5DDA5BA03176A2C94A33 /* PBXContainerItemProxy */ = { + 0A03F56C0BBE464F822860EC1EBBD7E2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 3413DD54A59A17F67D7D63397D806BD5; - remoteInfo = "FastCoding-macOS"; + remoteGlobalIDString = 1CF10E2AEEEB932120CC7181BD88C40C; + remoteInfo = "MetaWear-tvOS"; }; - 1879B032529D92714459BFBEABE4EA9E /* PBXContainerItemProxy */ = { + 0AE9A03071422A172CD99A1E9C2E7FD1 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = F57306538B475B533545EE22C423E8EB; - remoteInfo = "Zip-iOS"; + remoteGlobalIDString = AA3C39426CBD48108BC3ABCF231AC2DE; + remoteInfo = "iOSDFULibrary-iOS"; }; - 1EFD053252655D50BF69AB4135E424E5 /* PBXContainerItemProxy */ = { + 1879B032529D92714459BFBEABE4EA9E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = BD341F49E18D3D060A36A71E9278D5D7; - remoteInfo = "Bolts-iOS"; + remoteGlobalIDString = F57306538B475B533545EE22C423E8EB; + remoteInfo = "Zip-iOS"; }; - 2584C09FF19AC2245AFF5FD048108EA2 /* PBXContainerItemProxy */ = { + 20BCC5CD831A1178AF1AEA4DED636CB0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E773E4C5ADD2729A88E77D8B9999761A; - remoteInfo = "FastCoding-iOS"; + remoteGlobalIDString = ED329C7FA29461934C2966993F55877D; + remoteInfo = "Bolts-Swift-macOS"; }; - 272CBDDAD8A2AD7B6A0165AE63D224F4 /* PBXContainerItemProxy */ = { + 25953C50C67F2120A5CCE5B4CF329862 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = B7B1C49CEEA710F4A292314D60602E07; - remoteInfo = "Bolts-macOS"; + remoteGlobalIDString = 74D5A08CA458D0D62FA8EA0C7F810D3F; + remoteInfo = "Bolts-Swift-iOS"; }; - 2FF1C68E6C0B1733D6490A40E3965285 /* PBXContainerItemProxy */ = { + 25F451D83A5AB85B1B507B1D894A4C48 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 28835C651012C7B6AE21E36DC39BE97A; - remoteInfo = "MetaWearPrivate-iOS"; + remoteGlobalIDString = 93860DEA49AB0A3DE8BED027017FADD3; + remoteInfo = "Bolts-Swift-tvOS"; }; - 328A0862F35BEFFB88A48A770BDC574B /* PBXContainerItemProxy */ = { + 2BB83536BE03B40018D7C48BE08413DC /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E773E4C5ADD2729A88E77D8B9999761A; - remoteInfo = "FastCoding-iOS"; + remoteGlobalIDString = ED329C7FA29461934C2966993F55877D; + remoteInfo = "Bolts-Swift-macOS"; }; - 48D712D3BA7FF013BA9F996DDD01DE43 /* PBXContainerItemProxy */ = { + 2E3F2D5254BF770423235A8D3123A61F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9389CEE263723AA7A1038CEC838D4720; - remoteInfo = "iOSDFULibrary-macOS"; + remoteGlobalIDString = FBCDB923BFEC9B087B78F572C6D26ABF; + remoteInfo = "MetaWear-iOS"; }; - 49F366AFC0C226E5CE6EC482861E7AFB /* PBXContainerItemProxy */ = { + 3C6EBA196C0AF8334AEF9897D4B977F0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 2492E2BFC7176958B328266A5BC1A534; - remoteInfo = "Bolts-tvOS"; + remoteGlobalIDString = 1CF10E2AEEEB932120CC7181BD88C40C; + remoteInfo = "MetaWear-tvOS"; }; - 51E5FC8F20F0180F3F39EB3A314BC0E2 /* PBXContainerItemProxy */ = { + 4D84659AE95C7D4B2EFB470EEF57501F /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E4C8A5130851E57DDABD17C30B3C75EF; - remoteInfo = "MetaWearPrivate-macOS"; + remoteGlobalIDString = 93860DEA49AB0A3DE8BED027017FADD3; + remoteInfo = "Bolts-Swift-tvOS"; }; - 5289F5919DE1D3660573C77CBD10CDBB /* PBXContainerItemProxy */ = { + 4F81A551D5A6D98B80CE4657397F5EC8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; remoteGlobalIDString = F57306538B475B533545EE22C423E8EB; remoteInfo = "Zip-iOS"; }; - 6705EE3E357A241852DE964187ED70E3 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 78F9A65EF036F83C80909A18E9CDC417; - remoteInfo = "FastCoding-tvOS"; - }; - 70FDF7E738FB11FA0FCB69E0B6147C52 /* PBXContainerItemProxy */ = { + 5863FF661E211D401694AE726135EFF6 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = BD341F49E18D3D060A36A71E9278D5D7; - remoteInfo = "Bolts-iOS"; + remoteGlobalIDString = ED329C7FA29461934C2966993F55877D; + remoteInfo = "Bolts-Swift-macOS"; }; - 7F6949543922F753BC050F5987DBABF8 /* PBXContainerItemProxy */ = { + 65A19ED4033CAA93D85F9394E7560B6D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = B7B1C49CEEA710F4A292314D60602E07; - remoteInfo = "Bolts-macOS"; + remoteGlobalIDString = 74D5A08CA458D0D62FA8EA0C7F810D3F; + remoteInfo = "Bolts-Swift-iOS"; }; - 8D5A5037269951B72B96576AC2260ACD /* PBXContainerItemProxy */ = { + 7B305125E3EBCFB826BB4FC804FA137A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = B7B1C49CEEA710F4A292314D60602E07; - remoteInfo = "Bolts-macOS"; + remoteGlobalIDString = AD70FE1E93D40666D1ECF65358AE5515; + remoteInfo = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; }; 963B7C1EC6008DBF76CE345E5A5E43C8 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; @@ -1454,791 +599,688 @@ remoteGlobalIDString = 581D3B58E73E74943B0B279158A37B4B; remoteInfo = "Zip-macOS"; }; - 9CC9AD1AB418E49DD3277B9CEBCB2B13 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = BD341F49E18D3D060A36A71E9278D5D7; - remoteInfo = "Bolts-iOS"; - }; - A256A2F26723F4FBA060A740AA640E3B /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 78F9A65EF036F83C80909A18E9CDC417; - remoteInfo = "FastCoding-tvOS"; - }; - A2AC400FD31BCC12622D5DD9E553D513 /* PBXContainerItemProxy */ = { + 9AB32DA1A9FFFC180AC39946F9E7B34C /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E773E4C5ADD2729A88E77D8B9999761A; - remoteInfo = "FastCoding-iOS"; + remoteGlobalIDString = E1A2C54E075045370CF68755E67F5C6F; + remoteInfo = "MetaWear-macOS"; }; - A8607D1C973697027D00FF4EEDA0F150 /* PBXContainerItemProxy */ = { + 9F49822A316868D63A2AC763E8073B37 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 3413DD54A59A17F67D7D63397D806BD5; - remoteInfo = "FastCoding-macOS"; + remoteGlobalIDString = FBCDB923BFEC9B087B78F572C6D26ABF; + remoteInfo = "MetaWear-iOS"; }; - AAE942D01BE8F06EDF07D2CC37862544 /* PBXContainerItemProxy */ = { + AA664B84214C6225D65422A7EAD9D864 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 28835C651012C7B6AE21E36DC39BE97A; - remoteInfo = "MetaWearPrivate-iOS"; + remoteGlobalIDString = 9389CEE263723AA7A1038CEC838D4720; + remoteInfo = "iOSDFULibrary-macOS"; }; - BBE0A67BE8C6F6F8DF1DA2EF1E57444F /* PBXContainerItemProxy */ = { + BC89D64D40D6DA77D23DD051DFFA15B0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 2492E2BFC7176958B328266A5BC1A534; - remoteInfo = "Bolts-tvOS"; + remoteGlobalIDString = 9DBFFED0D32FB704EBBE05B279730169; + remoteInfo = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; }; - DC7FED3EE5B722B3EC74541DE88DC82A /* PBXContainerItemProxy */ = { + C12C156D61CCEEF2B32DE43760FA9401 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 2492E2BFC7176958B328266A5BC1A534; - remoteInfo = "Bolts-tvOS"; + remoteGlobalIDString = 43AE0570AE9E038422E2E5E9A9BB0140; + remoteInfo = "Bolts-Swift-watchOS"; }; - EC051370563EE8194F7EE52B86CCA91F /* PBXContainerItemProxy */ = { + C8C18EC0AA3B465C13E3A2F473B161ED /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E4C8A5130851E57DDABD17C30B3C75EF; - remoteInfo = "MetaWearPrivate-macOS"; + remoteGlobalIDString = 43AE0570AE9E038422E2E5E9A9BB0140; + remoteInfo = "Bolts-Swift-watchOS"; }; - F1E97D9345197EF8F73D545C6A49F224 /* PBXContainerItemProxy */ = { + DD8F918CBB1C83F2B78933D170DC3CFA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 78F9A65EF036F83C80909A18E9CDC417; - remoteInfo = "FastCoding-tvOS"; + remoteGlobalIDString = D17D869CD175A025630F4E3D5BD9CB32; + remoteInfo = "MetaWear-watchOS"; }; - F47769296D590D44DA3A377F6233D10D /* PBXContainerItemProxy */ = { + E06EA9E91C2D2B33F99EDEC815BC802B /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9913C873BD8A170381970D996D45827A; - remoteInfo = "MetaWearPrivate-tvOS"; + remoteGlobalIDString = E1A2C54E075045370CF68755E67F5C6F; + remoteInfo = "MetaWear-macOS"; }; - F837663636BE9BAABCFFD6B352F772D5 /* PBXContainerItemProxy */ = { + F0F16FE856841D01C0E643771A88697D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 9913C873BD8A170381970D996D45827A; - remoteInfo = "MetaWearPrivate-tvOS"; + remoteGlobalIDString = 74D5A08CA458D0D62FA8EA0C7F810D3F; + remoteInfo = "Bolts-Swift-iOS"; }; - F90FEB466C10460996EE628EAC85EEEB /* PBXContainerItemProxy */ = { + F8CCF6B54A8CF4018E6B35C09F8EF932 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 581D3B58E73E74943B0B279158A37B4B; - remoteInfo = "Zip-macOS"; + remoteGlobalIDString = 35939192463050DFECFB86564016D871; + remoteInfo = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 00E67CA86BA4A4BD60EEBB7E3325B212 /* MBLModuleInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLModuleInfo.m; sourceTree = ""; }; - 0120B86E2AE95D793C101E04748002AF /* MBLTemperatureV0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTemperatureV0.m; sourceTree = ""; }; - 0122E791DE37E81ECB642809DD4C9BD2 /* Pods-MetaWearIntegrationTests-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWearIntegrationTests-macOS-dummy.m"; sourceTree = ""; }; - 01A67B1A530D3D12F82B2B6F354568D5 /* MBLTimerEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTimerEvent.m; sourceTree = ""; }; - 02EF70860EBA4BFD0F7274FC624AC2AD /* FastCoding-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "FastCoding-tvOS.modulemap"; path = "../FastCoding-tvOS/FastCoding-tvOS.modulemap"; sourceTree = ""; }; - 0370A836B986A228B7833C6F24B03255 /* MBLExternalThermistor0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLExternalThermistor0.h; sourceTree = ""; }; - 03C9247E893E625B829FE942FD1F6FF3 /* MBLNumericData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLNumericData+Private.h"; sourceTree = ""; }; - 041EC2A34089D29291A9815E11ACD8EC /* MBLOnDieTemperature0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLOnDieTemperature0.m; sourceTree = ""; }; - 04A4C08307A0807A13DF6337A194A7A9 /* MBLNumericFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNumericFormatter.m; sourceTree = ""; }; - 04CBB3EAF42BB1BE4A3C1BCF71A83A84 /* MBLSerial.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLSerial.m; sourceTree = ""; }; - 05F20F10D01757768F6504900F09E5B5 /* MBLAccelerometerBoschOrientationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschOrientationEvent.h; sourceTree = ""; }; - 06442DAAFF21721B0E2C64C15BC6F28E /* MBLHapticBuzzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLHapticBuzzer.h; sourceTree = ""; }; - 064E1E70344FD893965888C0643D028F /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 065B9A18331BB5E77686A1A37B93AB89 /* MBLFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFilter.h; sourceTree = ""; }; - 068CFBFA9C639C548E300DBA82652694 /* Pods_MetaWearIntegrationTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 074A291A191B13334260DE0EA07DE8F7 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig"; sourceTree = ""; }; - 077DD2BC11F0A7ADDD507D7CFD5E9B3D /* MBLAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAnalytics.h; sourceTree = ""; }; - 07D3B44657CA0CCA6E72CDF8250AB6CD /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-tvOS/Info.plist"; sourceTree = ""; }; - 082B67135724324C65933732754CC49D /* MBLAccelerometerBMI160MotionEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMI160MotionEvent.h; sourceTree = ""; }; - 0861EF75CEE3811500BBCE28BDAB4BBD /* MBLQuaternionFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLQuaternionFormat.h; sourceTree = ""; }; - 08850145862683CD96C0CD00D9C712D3 /* DFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUExecutor.swift; sourceTree = ""; }; - 08A30E73050089FE33EF3E462555FFA5 /* Pods-MetaWearIntegrationTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-macOS.release.xcconfig"; sourceTree = ""; }; - 09132298C652A6E4AAC6E0D0A627FAB0 /* MBLBarometerBoschPeriodicAltitudeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBoschPeriodicAltitudeEvent.h; sourceTree = ""; }; - 09635D2337086E6408781D878687120E /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = iOSDFULibrary/Classes/Utilities/Data.swift; sourceTree = ""; }; - 096AC0C7692D6AFC9F02212305518A51 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig"; sourceTree = ""; }; - 096F4405C3E714C672C9653B4875D76E /* MBLTemperature.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTemperature.m; sourceTree = ""; }; - 098C7FF3BE168997AB33405D503F5A2C /* MBLGyroBMI160+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGyroBMI160+Private.h"; sourceTree = ""; }; - 099E89D6E6F44D0B586225B775348D90 /* SoftdeviceBootloaderInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SoftdeviceBootloaderInfo.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/SoftdeviceBootloaderInfo.swift; sourceTree = ""; }; - 09A2B8795827FF822C2667CBDAE25456 /* MetaWear.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MetaWear.h; sourceTree = ""; }; - 09BF9E44AFC699AC453CFBD3C548CC3B /* MBLAccelerometerBoschFlatData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschFlatData+Private.h"; sourceTree = ""; }; - 09DDE791F116F87BA6A96A04CED94DFB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown"; sourceTree = ""; }; - 0A486169E0D6D95BE461814DD68D9500 /* MBLAccelerometerBosch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBosch.h; sourceTree = ""; }; - 0A9C61925C6320CAABE16A475F1F4E18 /* MBLHygrometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLHygrometer.h; sourceTree = ""; }; - 0AA7C4FBEBD67275B31A22D418F5BAFF /* ZipUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZipUtilities.swift; path = Zip/ZipUtilities.swift; sourceTree = ""; }; - 0AF908A6021CBB2D0312C0A243052E7A /* MBLProximity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLProximity.h; sourceTree = ""; }; - 0B3830A96734A10F95A0898A3AE3C2DA /* MBLGPIOPinChangeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIOPinChangeEvent.m; sourceTree = ""; }; - 0B45978E147332C2D7DCE27CFB3A99DC /* MBLMechanicalSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMechanicalSwitch.h; sourceTree = ""; }; - 0B6540D1EE45C53A675AB7C1B6B33FF1 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh"; sourceTree = ""; }; - 0BD8C04DD86664C2713B747FE190C751 /* MBLLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLogging.h; sourceTree = ""; }; - 0CC808F2321E7A48AAF53E821EB9FE8C /* MBLANCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLANCS.m; sourceTree = ""; }; - 0D04BC1738D891A89974B9F55A4A084C /* MBLAccelerometerBMA255MotionEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMA255MotionEvent+Private.h"; sourceTree = ""; }; - 0D21B9BC43910E2ED423AABB150A5815 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m; sourceTree = ""; }; - 0D3D08752EA5E69B3441973DD6666A61 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist"; sourceTree = ""; }; - 0F2208FDC36513D69B88593F9B7EBFA2 /* Pods-MetaWearIntegrationTests-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWearIntegrationTests-tvOS-dummy.m"; sourceTree = ""; }; - 0F7184178920F6BD3FB7315EF3967744 /* Zip-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Zip-iOS-umbrella.h"; sourceTree = ""; }; - 0F94CE541B92311CC4E47F30CBED45CC /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh"; sourceTree = ""; }; - 0FB44E2B89CF240B81C4538959705A14 /* MBLFirmwareUpdateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFirmwareUpdateManager.m; sourceTree = ""; }; - 101622E47D549B802652C0917F0CC84D /* MBLGyroBMI160AxisReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160AxisReadyEvent.h; sourceTree = ""; }; - 102772752E49EDB7667052D7350EB2E3 /* MBLEntityModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEntityModule.m; sourceTree = ""; }; - 103B453C78582AB73039AF2ACD28091E /* MBLExternalThermistor0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLExternalThermistor0.m; sourceTree = ""; }; - 107D89EB1146D20431D9DA30A2F00976 /* DFUPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPacket.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUPacket.swift; sourceTree = ""; }; - 108BA1446B74F812824110132AE5F595 /* Pods-MetaWearIntegrationTests-tvOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-tvOS-resources.sh"; sourceTree = ""; }; - 108D19978FED2D6CCDA0F6BB617FF38A /* MBLI2C.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLI2C.m; sourceTree = ""; }; - 10BF4E9DB1C681605A1E1DE7A7352D47 /* DFUController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUController.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUController.swift; sourceTree = ""; }; - 116BB3AC97B4B082383621A9CB2549E4 /* MBLAccelerometerBosch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBosch.m; sourceTree = ""; }; - 11DD487EEB31D0A2E1939F4FC9874AE8 /* MBLAccelerometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometer.h; sourceTree = ""; }; - 1245355700F9204731A756505A82774A /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap"; sourceTree = ""; }; - 125C400C3639412117CC73ADC6B68B26 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m"; sourceTree = ""; }; - 12C9DC23F0B487B7DEE634B37A340BD7 /* Pods-MetaWearIntegrationTests-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWearIntegrationTests-macOS-acknowledgements.plist"; sourceTree = ""; }; - 1355EBD6FF6202F9F89D9888F4BC95EA /* Double.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Double.swift; path = iOSDFULibrary/Classes/Utilities/Double.swift; sourceTree = ""; }; - 13A32AA096E9CC779B36C686BD2CF253 /* Pods-MetaWearIntegrationTests-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWearIntegrationTests-iOS-acknowledgements.markdown"; sourceTree = ""; }; - 13DC5F50967878257628BE72601421B3 /* MBLTemperatureV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTemperatureV1.m; sourceTree = ""; }; - 13E861EF7B29CA059C350C8FB334AA43 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 146C6F2EFE7859BBE990B6949EEB29FE /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h"; sourceTree = ""; }; - 147815D574238CF6873A9031B245D10E /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = unzip.h; path = Zip/minizip/unzip.h; sourceTree = ""; }; - 14AE7AE72BE71A3D06974D109F077A39 /* FastCoding-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding-macOS-prefix.pch"; path = "../FastCoding-macOS/FastCoding-macOS-prefix.pch"; sourceTree = ""; }; - 14BC0282228EC0A6343EE944975AD62B /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 14EF7A0FCCB0842B76635115328356DD /* MBLConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConstants.m; sourceTree = ""; }; - 14F97140194A6FFAF4887995AC14BDBE /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWearIntegrationTests-tvOS-umbrella.h"; sourceTree = ""; }; - 15041524A279C056B9FE68177A0D399A /* Zip-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Zip-macOS-prefix.pch"; path = "../Zip-macOS/Zip-macOS-prefix.pch"; sourceTree = ""; }; - 154C63619035D967672EFF5169B9350C /* MBLBarometerBoschPeriodicAltitudeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBoschPeriodicAltitudeEvent.m; sourceTree = ""; }; - 1836DBE60406D35990AF938F41D465F2 /* MBLTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTimer.h; sourceTree = ""; }; - 18BB70CAC175503B0836D3D7EF3C1AE8 /* MBLAccelerometerBMA255MotionEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMA255MotionEvent.h; sourceTree = ""; }; - 18D0C4AE392CD54EE51E540B5D17D335 /* MBLI2CData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLI2CData.m; sourceTree = ""; }; - 18DDDD5E1E2ADE29C7D340B61A72DAD1 /* MBLEntityEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEntityEvent+Private.h"; sourceTree = ""; }; - 18EADF7AF343005056845D551D588501 /* MBLModuleMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLModuleMock.m; sourceTree = ""; }; - 1909D25EF7BF2BB24FBB1AB22CE4F1BD /* iOSDFULibrary-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "iOSDFULibrary-macOS.modulemap"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS.modulemap"; sourceTree = ""; }; - 19C1F5C20F826AA3EF1A212875392724 /* Bolts-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-tvOS-dummy.m"; path = "../Bolts-tvOS/Bolts-tvOS-dummy.m"; sourceTree = ""; }; - 19CD19E40DAAF05256018C6B1F12F55D /* MBLPhotometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLPhotometer.h; sourceTree = ""; }; - 19DAA050BDB87A1D6C1937CD796A986C /* MBLAccelerometerBoschDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschDataReadyEvent.m; sourceTree = ""; }; - 1ADE8BBAE5CCB97867FB931B9D024F2B /* MBLMacAddressFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMacAddressFormat.m; sourceTree = ""; }; - 1C265937209DAD09BC393AA51F15236E /* LegacyDFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheral.swift; sourceTree = ""; }; - 1C3629650A5E90D12D7E8D34CB7524F6 /* MBLSensorFusion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSensorFusion.h; sourceTree = ""; }; - 1C47A810D9F0D3F2E32CE75405F6AA0E /* DFUStreamHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamHex.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamHex.swift; sourceTree = ""; }; - 1C6DE6FF859CB07E8F2499FE22E774AA /* DFUServiceController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceController.swift; path = iOSDFULibrary/Classes/Implementation/DFUServiceController.swift; sourceTree = ""; }; - 1CB01AD35839796CD59C88F332642A29 /* MBLGyroBMI160DataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160DataReadyEvent.m; sourceTree = ""; }; - 1CFAD1F294B51CDE156111410C25AD9E /* MBLEntityEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEntityEvent.h; sourceTree = ""; }; - 1D2105D11274EFFCEC9477E527479DDD /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig"; sourceTree = ""; }; - 1DAE74CFD55BE7FCB07DE2A22CCE24E5 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h"; sourceTree = ""; }; - 1DEE68012FEE0F602A240B3ECA976F27 /* MBLMagnetometerBMM150+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMagnetometerBMM150+Private.h"; sourceTree = ""; }; - 1DF82D0130B914E4BC8C5197562A63F4 /* MBLData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLData.h; sourceTree = ""; }; - 1E28082BF970536C53DA5166708B1599 /* Pods-MetaWearIntegrationTests-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWearIntegrationTests-iOS-umbrella.h"; sourceTree = ""; }; - 1ED442E7A60334BC3E1AC5C8526DC814 /* MetaWearPrivate-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MetaWearPrivate-iOS-umbrella.h"; sourceTree = ""; }; - 1FD0265FC80A962B97D528D2D555EE96 /* BFTask+MBLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BFTask+MBLPrivate.h"; sourceTree = ""; }; - 20F79B1DFA93D6C8DEC2C4D417376E27 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown"; sourceTree = ""; }; - 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 2173E09EFD7D86F6C58907D0B83C31AF /* MBLAccelerometerBoschAxisReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschAxisReadyEvent.m; sourceTree = ""; }; - 22074BEB840408CE90EAF720DD456558 /* MBLFirmwareUpdateInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFirmwareUpdateInfo.m; sourceTree = ""; }; - 23D453257F06A73A5C8CD0F590FB2534 /* MBLAccelerometerBMA255.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMA255.h; sourceTree = ""; }; - 249139FB8D137FD0841B19206867C7EB /* MBLEntityModule+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEntityModule+Private.h"; sourceTree = ""; }; - 257DF6872E94837AC767B4782104D87E /* MBLExternalThermistor1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLExternalThermistor1.m; sourceTree = ""; }; - 259124F1E7A1A8378E3FAC98644EE69A /* MBLConversion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConversion.m; sourceTree = ""; }; - 26128295AA0938AD6329B2E3407ED0C8 /* MBLSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLSettings.m; sourceTree = ""; }; - 261C4F1650F015205EAFB18BA1619FA8 /* Zip-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Zip-macOS-dummy.m"; path = "../Zip-macOS/Zip-macOS-dummy.m"; sourceTree = ""; }; - 2622409A6E1318E8A16282456B61FAAA /* MBLBluetoothPeripheralMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothPeripheralMock.h; sourceTree = ""; }; - 2660920FD069ED7B5ED13CE0B789A2C6 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h; sourceTree = ""; }; - 269F0FBB246D90F6DFB2F2AD18A04252 /* MBLCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLCategoryLoader.m; sourceTree = ""; }; - 2706954377653812FD06C3E316EE5232 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h"; sourceTree = ""; }; - 2712F6503B63708AD7766394B4BFAB8B /* MBLLoggingV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLoggingV1.m; sourceTree = ""; }; - 2775F63A5885A6560DF256662375885D /* MBLTriggeredRead.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTriggeredRead.m; sourceTree = ""; }; - 2799BD30062D781BB83761469C1981A4 /* Pods-MetaWearIntegrationTests-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWearIntegrationTests-tvOS.modulemap"; sourceTree = ""; }; - 27CC639E6DE536C6F9FDEBCB0AFFEA31 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig"; sourceTree = ""; }; - 2807A744BD66EC2FC25F34F06ABD06A3 /* MBLAccelerometerData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerData.m; sourceTree = ""; }; - 2813B6E415AA511D8A27433A7E7567D7 /* MBLBarometerBMP280.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBMP280.h; sourceTree = ""; }; - 2933BA5E21AEF0F56E04A4BD5C37AD29 /* MBLGyroData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroData.m; sourceTree = ""; }; - 297339BB993DE15AD32362BF537FCF93 /* MBLOrientationData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLOrientationData.h; sourceTree = ""; }; - 2A92D831CC3AF37DF68739AC2D56E036 /* SecureDFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUExecutor.swift; sourceTree = ""; }; - 2AA27DD31D148E7D4FE4B088798FD73F /* MBLAccelerometerBoschOrientationFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschOrientationFormat.h; sourceTree = ""; }; - 2AD17983083A051951D07F5F4B1A6301 /* MBLMetaWearManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMetaWearManager.m; sourceTree = ""; }; - 2B0F1458E563F8F2E0E9D3B15038D133 /* MBLRMSAccelerometerData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLRMSAccelerometerData.h; sourceTree = ""; }; - 2BD3F32DFE1CDFAE06311345D55F5ED5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 2C70EDC7A4A497FCE432608A6AF4F70B /* MetaWearPrivate-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWearPrivate-tvOS-dummy.m"; path = "../MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-dummy.m"; sourceTree = ""; }; - 2C9014BE27A2ABDE098632CD6B8F846F /* MBLBarometerBosch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBosch.h; sourceTree = ""; }; - 2CC7D57A6FD40E665301FA579F5AB1BB /* zip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = zip.c; path = Zip/minizip/zip.c; sourceTree = ""; }; - 2D65E670B1C6B924E8E192F3FED06F15 /* LegacyDFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheralDelegate.swift; sourceTree = ""; }; - 2D6827276563ECF82E9652599FDA2563 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - 2D985519D28309D26CC3988FCAB4381B /* FastCoding-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding-tvOS-umbrella.h"; path = "../FastCoding-tvOS/FastCoding-tvOS-umbrella.h"; sourceTree = ""; }; - 2DD1DF3FEB5553DD83EB3595CEC0F84F /* MBLAccelerometerData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerData+Private.h"; sourceTree = ""; }; - 2DFA861A03763BE92BA107951F76F0A0 /* MBLMovingAverage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMovingAverage.m; sourceTree = ""; }; - 2E3635D758185F82159A834048FBF880 /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2EC3430CE59F55B7ECCD181718DED63F /* MBLSerial.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSerial.h; sourceTree = ""; }; - 2EE1FB0DD41BD31701FDA36D7A577E33 /* MBLOrientationData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLOrientationData+Private.h"; sourceTree = ""; }; - 2F3A760FF1FEA0F393837CFA254115DA /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 2FF11580259AE06E27E42B5D697B1F91 /* Bolts-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-tvOS-umbrella.h"; path = "../Bolts-tvOS/Bolts-tvOS-umbrella.h"; sourceTree = ""; }; - 30380F8CC34F2968DCC11BFA184B2CE8 /* MBLStringData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLStringData+Private.h"; sourceTree = ""; }; - 30C55F887936A2253979D9148E618465 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - 315DE6DF9415ACA45A996357360A6099 /* MBLPhotometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLPhotometer+Private.h"; sourceTree = ""; }; - 31C2F98E33F89A641DBCE8A3F3C9D81F /* MBLAccelerometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometer.m; sourceTree = ""; }; - 328CC030B05EEF6E7D428A59949C6557 /* MBLNumericData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNumericData.h; sourceTree = ""; }; - 32DE87BDF106FEBCFABBF465A01773EE /* DFUPeripheralSelector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralSelector.swift; path = iOSDFULibrary/Classes/Implementation/DFUPeripheralSelector.swift; sourceTree = ""; }; - 32E5E18A48C5398D932D406B8D506A1F /* MBLBluetoothCentralMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBluetoothCentralMock.m; sourceTree = ""; }; - 32E8CABE3E44CDFE2329BE40AAC4FFB6 /* MBLAccelerometerBoschFlatFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFlatFormat.h; sourceTree = ""; }; - 3316317DA6A7A83F1DABCD1D09831A1B /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig"; sourceTree = ""; }; - 3322753074CE7A5BC2F0A5131563F267 /* DFUVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUVersion.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUVersion.swift; sourceTree = ""; }; - 33264FC0B93C70A504D49AC7A66C41FF /* MBLDownloadOnlyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDownloadOnlyEvent.m; sourceTree = ""; }; - 33B7E3CB12DE614F080F68127A8BAA81 /* DFUStream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStream.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStream.swift; sourceTree = ""; }; - 342B40755E2FFB37E7739C0F867B357B /* MBLGyroBMI160.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160.m; sourceTree = ""; }; - 343B3692025AE4F38AEAEC77048BB979 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh"; sourceTree = ""; }; - 34A642826D000F75A8AEFAEABBD9F854 /* FastCoding-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FastCoding-iOS-umbrella.h"; sourceTree = ""; }; - 34B693A9204E409123726821605F41F4 /* MBLRGBData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLRGBData.m; sourceTree = ""; }; - 34FB716E5129E1AE665A5FE6F4DA938B /* LoggerDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerDelegate.swift; path = iOSDFULibrary/Classes/Utilities/Logging/LoggerDelegate.swift; sourceTree = ""; }; - 352E1631A56726C30EAE50929ED999C6 /* MBLHygrometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLHygrometer.m; sourceTree = ""; }; - 356ED60D172165AC26FD5CBFF0A6FB52 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Zip-macOS/Info.plist"; sourceTree = ""; }; - 360B380C0E48E04ADED1734FF8AF28E4 /* Zip-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "Zip-macOS.modulemap"; path = "../Zip-macOS/Zip-macOS.modulemap"; sourceTree = ""; }; - 368BE4F935537F2AA28A6491716600AC /* FastCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FastCoding.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 382E9746B809B1165AE88FD8D3C60520 /* Zip-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Zip-macOS.xcconfig"; path = "../Zip-macOS/Zip-macOS.xcconfig"; sourceTree = ""; }; - 38D46C8B0496FC7CD063D79D37E63BBC /* Bolts-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Bolts-iOS.modulemap"; sourceTree = ""; }; - 39406C785E452FAF5B389D4F86949543 /* MBLConductanceData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLConductanceData.h; sourceTree = ""; }; - 39A93D8D844389570DDA7A68F02881BF /* MBLMagnetometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometer.m; sourceTree = ""; }; - 3A11D978BD98802C632FA253271B5EF2 /* MBLSPIData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSPIData.h; sourceTree = ""; }; - 3A343C0D07D72D5EED6731AA686094E0 /* MBLLED+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLLED+Private.h"; sourceTree = ""; }; - 3B1704B0F408DD1D43A7BF562584C80B /* Bolts-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-iOS-prefix.pch"; sourceTree = ""; }; - 3B3D32733DD3667BACBED5F51D5805DC /* Bolts-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-macOS-umbrella.h"; path = "../Bolts-macOS/Bolts-macOS-umbrella.h"; sourceTree = ""; }; - 3B9D42A88DE615131B26D7E3AB2D4A34 /* MBLAccelerometerBoschDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschDataReadyEvent.h; sourceTree = ""; }; - 3C2075920A7BE1CF684C76F2F799ECBD /* MBLConductance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLConductance.h; sourceTree = ""; }; - 3CA104EEA8E4AEA2C3540CC3CE284922 /* MBLAmbientLight.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAmbientLight.m; sourceTree = ""; }; - 3EA4B888A2C3618023DA6440BA48FD6D /* MBLBarometerBME280.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBME280.m; sourceTree = ""; }; - 3EBD12B1D17709CA096B00BBEE24EC68 /* FastCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FastCoding.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 3ECB3EBED1AD5F9DFE05147E317A42A8 /* MBLMetaWear.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMetaWear.h; sourceTree = ""; }; - 3EE8DF0E51109F6D1252C1F61309AA51 /* MBLANCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLANCS.h; sourceTree = ""; }; - 3FE8137EC2AD26C62D15D585531C0FA4 /* MBLLoggingV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLoggingV2.m; sourceTree = ""; }; - 3FEAA728EF8F14225F062B87F3B7F1AF /* iOSDFULibrary-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "iOSDFULibrary-iOS.modulemap"; sourceTree = ""; }; - 3FEFC752FCC73CDD4669A2B67A313F16 /* MBLRGBData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLRGBData.h; sourceTree = ""; }; - 4114264FBB639E4DDB300CBAB7ECF23B /* iOSDFULibrary-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "iOSDFULibrary-iOS.xcconfig"; sourceTree = ""; }; - 41D5ED663F4CC795D404B72B58F64EA5 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 424A4930726684F45E9938539092257A /* SecureDFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUServiceInitiator.swift; sourceTree = ""; }; - 429D35B0DC4CBE2F675FD0E381BBA5A4 /* MBLDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDeviceInfo.m; sourceTree = ""; }; - 42C630E413E950FD8E86077705094243 /* MBLAccelerometerMMA8452QOrientationFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerMMA8452QOrientationFormat.m; sourceTree = ""; }; - 42DA220155FF2E4B0B617736A5456C6A /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 42F7056C9BB353145272A8D34A96CD8D /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 430EB1426581F605F9AF827458707760 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m"; sourceTree = ""; }; - 431F42332985E3D0A750FEA34C12B6FA /* FastCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FastCoding.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 44178045C194F6874F39F04A97D1FEF7 /* MBLBitmaskEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBitmaskEvent.m; sourceTree = ""; }; - 446871FDEF6BE23071F1C4D30C83656D /* MBLAccelerometerBMA255MotionEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMA255MotionEvent.m; sourceTree = ""; }; - 4494AC85D83F4C58922224D3BC0FFC3E /* DFUStreamZip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamZip.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamZip.swift; sourceTree = ""; }; - 44D9BA52B3B96B5EDB43E0D206ED3869 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 44E2876AE1BB6B2EC1B9E6DFFDB5C908 /* MBLEulerFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEulerFormat.m; sourceTree = ""; }; - 455CD07BA2C9B12A7455F13B169B7133 /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crypt.h; path = Zip/minizip/crypt.h; sourceTree = ""; }; - 45AB536C269B0B8B040B53A4DF58541F /* ioapi.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = ioapi.c; path = Zip/minizip/ioapi.c; sourceTree = ""; }; - 4602EBBBCBFC4B0BDD1112C6F156FAC2 /* MBLGyro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyro.h; sourceTree = ""; }; - 46546F45369A541754827BBFAD119C43 /* MBLHygrometerBME280.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLHygrometerBME280.h; sourceTree = ""; }; - 466F4CBD1227EE55915A7031EC4B452F /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m"; sourceTree = ""; }; - 46D823DA636B25C835ED3EAB68BE9151 /* MBLAmbientLightLTR329.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAmbientLightLTR329.m; sourceTree = ""; }; - 4739499D51E870D85365C8346318C403 /* MBLMetaWear.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMetaWear.m; sourceTree = ""; }; - 48D83A0F6C825EE1E021F9AA06C6116B /* Bolts-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-iOS-dummy.m"; sourceTree = ""; }; - 4908104AEC6A7B88734A8D4E5AA92C6D /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig"; sourceTree = ""; }; - 4938693D57B5CF7DD70B00EEDA9BD82D /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh"; sourceTree = ""; }; - 494205A39329FF5AE2B079EE3125B617 /* MBLAccelerometerBoschFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFormat.h; sourceTree = ""; }; - 49818250F85344D59243E60F743522F2 /* Pods-MetaWearIntegrationTests-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWearIntegrationTests-macOS-acknowledgements.markdown"; sourceTree = ""; }; - 49DCC21B1CC2D91B3B63A59EB7E2B099 /* MBLProximity+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLProximity+Private.h"; sourceTree = ""; }; - 4A6F1CE1F4BCDD73772EF425AE6D9585 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig"; sourceTree = ""; }; - 4AC77CDC011F6ABB4F5891B58CF47CB2 /* MBLAnonymousEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAnonymousEvent.h; sourceTree = ""; }; - 4ADE0C1303FA4B9E8EA06EAB9FBA1986 /* MBLEulerAngleData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEulerAngleData+Private.h"; sourceTree = ""; }; - 4B5A2DB9C21AB3E46343707203DB8703 /* MBLiBeacon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLiBeacon.h; sourceTree = ""; }; - 4BF938D304C25C4D90A26EE7E13BFE15 /* MBLMagnetometerData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMagnetometerData+Private.h"; sourceTree = ""; }; - 4D36A4050ABE4AE245A52AA00EB0277F /* MBLFirmwareBuild.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFirmwareBuild.h; sourceTree = ""; }; - 4D65CB941BF2B692DFCF0420BF430897 /* Bolts-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "Bolts-macOS.modulemap"; path = "../Bolts-macOS/Bolts-macOS.modulemap"; sourceTree = ""; }; - 4D9D6C530728DC18D1A2775D58338E76 /* DFUFirmware.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUFirmware.swift; path = iOSDFULibrary/Classes/Implementation/Firmware/DFUFirmware.swift; sourceTree = ""; }; - 4E94043F221F15741ECDB1C913090A4E /* iOSDFULibrary-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSDFULibrary-iOS-umbrella.h"; sourceTree = ""; }; - 4EE5F82F8AF57D1593408A9D6695260F /* MBLCorrectedFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLCorrectedFormat.h; sourceTree = ""; }; - 4F00482E0E8C8ADE2E784192F4043661 /* MBLDependentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDependentData.h; sourceTree = ""; }; - 4F78451E4496BD529946B137B1D19A27 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist"; sourceTree = ""; }; - 4F9290EC32AD92D822343F3DCAA79CA4 /* Bolts-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "Bolts-tvOS.modulemap"; path = "../Bolts-tvOS/Bolts-tvOS.modulemap"; sourceTree = ""; }; - 4FF9248A7A554724FAC13E872F93100C /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 510DD17398465B0992EB321F5ADC3AE1 /* MBLANCSEventData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLANCSEventData.h; sourceTree = ""; }; - 51A41ECB56B5DFC8D755819D80040E78 /* MBLLED.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLED.m; sourceTree = ""; }; - 52CC46DA65DB0259683868D5E443E82B /* MBLRMSAccelerometerData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLRMSAccelerometerData.m; sourceTree = ""; }; - 533D2377CF75F400D378A7FB2C5A8B80 /* MBLTimer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLTimer+Private.h"; sourceTree = ""; }; - 545729650DD67BFD00F674FA37C4E01D /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 54781085AAAF8C81138D0EABE060B960 /* MBLRGBData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLRGBData+Private.h"; sourceTree = ""; }; - 55481C6D4DC6885935567820623B3544 /* MetaWearPrivate-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWearPrivate-macOS-umbrella.h"; path = "../MetaWearPrivate-macOS/MetaWearPrivate-macOS-umbrella.h"; sourceTree = ""; }; - 5591E2801FF88CEE1F9D45AC91B0D6D9 /* DFUPeripheralSelectorDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralSelectorDelegate.swift; path = iOSDFULibrary/Classes/Implementation/DFUPeripheralSelectorDelegate.swift; sourceTree = ""; }; - 55B5F56299B15AFD2D2404B34E225E67 /* MBLBarometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometer.m; sourceTree = ""; }; - 568C305A82820552CFE0C4605EBA0459 /* MBLAccelerometerPackedDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerPackedDataReadyEvent.h; sourceTree = ""; }; - 56BF9B3D5859CBEA51D1EFF6538F58D4 /* MetaWearPrivate-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MetaWearPrivate-iOS-dummy.m"; sourceTree = ""; }; - 583A609E5ACE78382C84ED5EF0EDE7C8 /* MBLFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFormat.m; sourceTree = ""; }; - 58D92C0D8A331C0153DC2D7E2E1A110E /* MBLTestDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTestDebug.m; sourceTree = ""; }; - 59F41F0F37DF9DF332219AE7B2AA6890 /* MBLFirmwareUpdateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFirmwareUpdateManager.h; sourceTree = ""; }; - 5A8A8324FEEE1EAD815BD50D4C91B653 /* MetaWearPrivate-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "MetaWearPrivate-tvOS.modulemap"; path = "../MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.modulemap"; sourceTree = ""; }; - 5B13B87AB35725CA9A0FE740B4294A70 /* crc32.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = crc32.swift; path = iOSDFULibrary/Classes/Utilities/crc32.swift; sourceTree = ""; }; - 5B6488DE19FA291681E79AFB6D915611 /* MBLGPIOData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIOData.m; sourceTree = ""; }; - 5B916B04CDA309B8322D3494A89A559E /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h"; sourceTree = ""; }; - 5BC673AC71BD95CD9BF86FDD6371BE59 /* MBLAccelerometerOrientationEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerOrientationEvent.m; sourceTree = ""; }; - 5C045425809353C9AC26BC4A22FCF39F /* MBLAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAnalytics.m; sourceTree = ""; }; - 5C2FDEE37CF41DE80256A00DFCF4163C /* MBLHygrometerBME280PeriodicHumidityEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLHygrometerBME280PeriodicHumidityEvent.h; sourceTree = ""; }; - 5D1B23D696933B0920B53CB3DA60871D /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown"; sourceTree = ""; }; - 5D540DE91D9349411A42CBFA9E1817D2 /* MBLGPIO.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIO.m; sourceTree = ""; }; - 5D8A748BF8ED64C13C94BBC174818A7A /* MBLAccelerometerMMA8452QRMSFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerMMA8452QRMSFormat.m; sourceTree = ""; }; - 5DA6D487C81E989C28B492074E5CB4C7 /* FastCoding-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "FastCoding-macOS.xcconfig"; path = "../FastCoding-macOS/FastCoding-macOS.xcconfig"; sourceTree = ""; }; - 5DB63EFD747A1E47D68C8FDC39ABB0F7 /* MBLCorrectedFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLCorrectedFormat.m; sourceTree = ""; }; - 5E1A178212708CCC5AA04F75029CF605 /* SecureDFUControlPoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUControlPoint.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/SecureDFUControlPoint.swift; sourceTree = ""; }; - 5F0D1110D45FA365DBC5367085D1E83A /* MBLPhotometerTCS3472Format.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLPhotometerTCS3472Format.m; sourceTree = ""; }; - 5F0E221620B947BDDB6ED38CF1DFC44C /* MBLGPIOPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIOPin.h; sourceTree = ""; }; - 5F1BC518C4E1FB3BC352030FB4FECD49 /* MBLGPIOPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIOPin.m; sourceTree = ""; }; - 5FEE9DAF27B41AC971847EFB87011210 /* MBLBarometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometer.h; sourceTree = ""; }; - 60072837B568D0B289C73D735FBE994A /* DFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheralDelegate.swift; sourceTree = ""; }; - 60078A5252316CA448069CA15B7675C3 /* MBLAccelerometerBMA255.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMA255.m; sourceTree = ""; }; - 606066652CE57A58078BEACCA8C31CDA /* FastCoding-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "FastCoding-tvOS.xcconfig"; path = "../FastCoding-tvOS/FastCoding-tvOS.xcconfig"; sourceTree = ""; }; - 60F23F6EB34D2465E50893792CF3BF25 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh"; sourceTree = ""; }; - 611E0828D1D423282BC36D41D8659761 /* MBLGyroBMI160Format.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160Format.m; sourceTree = ""; }; - 6132FA286854C673503A7644B14E6C43 /* Manifest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manifest.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/Manifest.swift; sourceTree = ""; }; - 61DA23203D750582CEBB4DDB7B099285 /* MBLDownloadOnlyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDownloadOnlyEvent.h; sourceTree = ""; }; - 631DC4724CB7F5DB5E12D63CCAA9BE04 /* MBLAccelerometerBoschFlatEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFlatEvent.m; sourceTree = ""; }; - 632E08C3C1F3C2B3600407429F114413 /* MBLGravityFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGravityFormat.h; sourceTree = ""; }; - 63510854684E86EDFB5F03E8D52A35BD /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - 637B0F3AD7EDFEA1AA5FF86CD752B8AF /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig"; sourceTree = ""; }; - 645FFFBA525FE54E01512233CD96C235 /* DFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheral.swift; sourceTree = ""; }; - 656D59E1FEA99D19C2D5F3179B85FAE8 /* MBLAccelerometerBoschFlatData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFlatData.h; sourceTree = ""; }; - 66179F0A74E73AD51E178F4348E9010C /* FastCoding-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FastCoding-iOS-prefix.pch"; sourceTree = ""; }; - 66B6BA83C3C4F23C8DBF08F46B6DEDF9 /* MBLConductance.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConductance.m; sourceTree = ""; }; - 66BD7978E06A8765D037FC38B585C13E /* MBLMockUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMockUtils.h; sourceTree = ""; }; - 6712272425BFA706A80ED17C721D2468 /* MBLAmbientLight+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAmbientLight+Private.h"; sourceTree = ""; }; - 67AE1DA5CCAEC8045CA513254318D081 /* MBLDataSample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDataSample.m; sourceTree = ""; }; - 67C2F6BF2281EB44559A63F5ED570D37 /* MBLAccelerometerDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerDataReadyEvent.h; sourceTree = ""; }; - 683A646CE59BF06ACE557B9DC63F37BD /* MBLAccelerometerMMA8452Q.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerMMA8452Q.m; sourceTree = ""; }; - 683E023C19814107E458986DB3C80721 /* MBLNeopixel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNeopixel.h; sourceTree = ""; }; - 684ACAB6B74CA94DDD2CBE56FD8D20B5 /* MBLConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLConstants.h; sourceTree = ""; }; - 6856DDDF597277881E66C7EAE1488594 /* DFUServiceDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceDelegate.swift; path = iOSDFULibrary/Classes/Implementation/DFUServiceDelegate.swift; sourceTree = ""; }; - 68873A6DCD20DAF4599FDEDCE1E51CD6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 68E0F9521AF535BF9D8E414EEB4D4F8C /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap"; sourceTree = ""; }; - 68F71FF3F5BC24A81DEB63AA5A239D81 /* FastCoding-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "FastCoding-iOS.modulemap"; sourceTree = ""; }; - 690880F1C24B5C840BE2820F297A4479 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 69F3741316EE19AD0AE240BFCE27C008 /* MBLAccelerometerTapEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerTapEvent.m; sourceTree = ""; }; - 6A3C94A2D4474A8DC16FF570AEE192F7 /* MBLGyro.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyro.m; sourceTree = ""; }; - 6B34BF91775BD5B5F16563879AAE89DE /* MBLDataProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDataProcessor.m; sourceTree = ""; }; - 6B96BB66E32A76C37714BD32108877E8 /* MBLNeopixel+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLNeopixel+Private.h"; sourceTree = ""; }; - 6C64D19BB3F9AEC401E0F2DF80FAD225 /* MBLQuaternionData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLQuaternionData+Private.h"; sourceTree = ""; }; - 6C7487AB0B47CAD2A314F1EA2960160F /* MBLMagnetometerBMM150Format.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150Format.m; sourceTree = ""; }; - 6D4514B8DCAD84689076972E7C5FD8ED /* Bolts-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-iOS-umbrella.h"; sourceTree = ""; }; - 6DEDDD7C2FAFC76A2A87E225422005C5 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - 6E0D65D220AC16FD37B5C370498E1556 /* MBLiBeacon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLiBeacon.m; sourceTree = ""; }; - 6E178F0FC9498EFBD62A485883B8232F /* BFTask+Exceptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Exceptions.h"; path = "Bolts/Common/BFTask+Exceptions.h"; sourceTree = ""; }; - 6E22D2D8EB43615D73111F496F74BD7F /* MBLTemperatureV0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTemperatureV0.h; sourceTree = ""; }; - 6F7055C022657B2629DA9C9F0AA2C463 /* MBLSensorFusion+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLSensorFusion+Private.h"; sourceTree = ""; }; - 6F82E3B681C52C4896CAF8BD58F4FE3E /* FastCoding-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding-macOS-umbrella.h"; path = "../FastCoding-macOS/FastCoding-macOS-umbrella.h"; sourceTree = ""; }; - 6F89ABEB7CA98ACDE9FFA0DED841DC6B /* Pods-MetaWearIntegrationTests-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWearIntegrationTests-iOS-dummy.m"; sourceTree = ""; }; - 6F9197F2BE7F3786B0E3EA0800869EFC /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig"; sourceTree = ""; }; - 6FA81A82BCC1EAF9DFAE8911FB00826D /* iOSDFULibrary-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "iOSDFULibrary-macOS-umbrella.h"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS-umbrella.h"; sourceTree = ""; }; - 70692F88DC3B085CFA67F4801CC091A8 /* MBLPhotometerTCS3472.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLPhotometerTCS3472.h; sourceTree = ""; }; - 717E1C94E4A237C3492917CC7A3748D2 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h"; sourceTree = ""; }; - 71C9148C30A9AEBF8DA33E34D3D71D0A /* MBLLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLogging.m; sourceTree = ""; }; - 72719947DFFD1CE465ABCF26C079567E /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown"; sourceTree = ""; }; - 728A14598DFA2E0ADAC364544A685C3C /* MBLConstants+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLConstants+Private.h"; sourceTree = ""; }; - 73BC22E4E093926AE2FD93BAFE2E5B2B /* MBLAccelerometerBoschLowOrHighGEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschLowOrHighGEvent.h; sourceTree = ""; }; - 7420DE7FF33B58C5DB851F3A44534E10 /* Pods-MetaWearIntegrationTests-macOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-macOS-resources.sh"; sourceTree = ""; }; - 748435E6E0217484100FE5221050840B /* MetaWearPrivate-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWearPrivate-macOS-dummy.m"; path = "../MetaWearPrivate-macOS/MetaWearPrivate-macOS-dummy.m"; sourceTree = ""; }; - 7486D6C559F423D347EF546001BF1A71 /* MBLOrientationData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLOrientationData.m; sourceTree = ""; }; - 74C49FFC30D80AD94423AB0318601C46 /* iOSDFULibrary-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "iOSDFULibrary-iOS-dummy.m"; sourceTree = ""; }; - 763090C3CF598BCAF7A406BCC657053B /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ioapi.h; path = Zip/minizip/ioapi.h; sourceTree = ""; }; - 767039DE8BE4128CD2C1F16858847D69 /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 76886D2D3BD70DC4BCC0BA45AAADB51B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWearPrivate-macOS/Info.plist"; sourceTree = ""; }; - 768A2B5331EA1D222EB6A73E262ED8E0 /* MBLStringData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLStringData.h; sourceTree = ""; }; - 76BD58CAC90630D444F45C5165F3FFD7 /* Pods-MetaWearIntegrationTests-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-tvOS-frameworks.sh"; sourceTree = ""; }; - 76C91F3C8F5D04D087E0A9FA281193B5 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m"; sourceTree = ""; }; - 76CF7D71EF15010446A78E798B39A0CE /* MetaWearPrivate-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWearPrivate-tvOS.xcconfig"; path = "../MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.xcconfig"; sourceTree = ""; }; - 76F27D4B0C8EECC6EBF7D90305D31230 /* MBLAccelerometerBMI160.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMI160.m; sourceTree = ""; }; - 77004055E8B046B2F94C36501CA986B0 /* MBLCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLCategoryLoader.h; sourceTree = ""; }; - 77B18F36C85923BD0966BB5B3F4366C5 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig"; sourceTree = ""; }; - 77F0B844D2E4942DAE589ACD482DA4BF /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 781A18BA1418D9C811A289311EBFC8F9 /* MBLAccelerometerShakeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerShakeEvent.m; sourceTree = ""; }; - 78621B24EBE86A94377658DA1B69BA7E /* MBLEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEvent+Private.h"; sourceTree = ""; }; - 78A46EE93080D885BFF6F8471DA8A012 /* MBLANCSEventData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLANCSEventData.m; sourceTree = ""; }; - 792344F36306444FD588737F547C1CBD /* MBLAccelerometerBoschLowOrHighGEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschLowOrHighGEvent.m; sourceTree = ""; }; - 792F603BFB6C85B0F5D8CB9889BC30AB /* MBLSPIData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLSPIData+Private.h"; sourceTree = ""; }; - 79ACB3EAB67424B932181CC2ADD04624 /* MBLData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLData+Private.h"; sourceTree = ""; }; - 79D6876CB5FB9E0B295970DD856F7D37 /* MBLMovingAverage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMovingAverage.h; sourceTree = ""; }; - 7AB376E87546F5C959DF1E7882959E6A /* MBLHygrometerBME280.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLHygrometerBME280.m; sourceTree = ""; }; - 7AFDC40CD0763752F8F369BB3B81D787 /* SecureDFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUService.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Services/SecureDFUService.swift; sourceTree = ""; }; - 7B2C2EABA1B5A43F2175D9CF39EF47C1 /* MetaWearPrivate-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWearPrivate-macOS-prefix.pch"; path = "../MetaWearPrivate-macOS/MetaWearPrivate-macOS-prefix.pch"; sourceTree = ""; }; - 7B73BFFFDB3046740A4D7A599A06F846 /* LoggerHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerHelper.swift; path = iOSDFULibrary/Classes/Utilities/Logging/LoggerHelper.swift; sourceTree = ""; }; - 7BADE8A9CEB88510615C28A7B8FE6E03 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWearPrivate-tvOS/Info.plist"; sourceTree = ""; }; - 7C355EC8ACB217A38B8BEA29DB930D04 /* MBLGPIO+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGPIO+Private.h"; sourceTree = ""; }; - 7C76EB125E555C3CEEAECE10EB48F4C5 /* MBLGyroData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGyroData+Private.h"; sourceTree = ""; }; - 7CECA256893645F935B5C13A5CBBED84 /* MBLTimerEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLTimerEvent+Private.h"; sourceTree = ""; }; - 7D6CB41C23090423F8ED51F5A3FB6572 /* MBLLoggingV0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLoggingV0.h; sourceTree = ""; }; - 7D87C98E48F326672E237838FDE0B1F3 /* MBLMagnetometerBMM150Format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerBMM150Format.h; sourceTree = ""; }; - 7DCFCC9F3CE0E98A2FB7A289FAADE29C /* Bolts-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-iOS.xcconfig"; sourceTree = ""; }; - 7DF7B457DCC8E360D49A842F6BB6699D /* MBLLoggingV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLoggingV2.h; sourceTree = ""; }; - 7E3207AB2D85976BE06AECFA290AB0D4 /* MBLExternalThermistor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLExternalThermistor.h; sourceTree = ""; }; - 7EC059FAD710FE43BC68B1CE0F8D860A /* MBLNeopixel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNeopixel.m; sourceTree = ""; }; - 7F28543D661599E174AF98EA4A3B6D58 /* MBLBarometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLBarometer+Private.h"; sourceTree = ""; }; - 7FD50DBF3CD96B69C1F61541B057E571 /* Pods_MetaWearIntegrationTests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 80522ABAB30A84102A4A1F9F6171D7F8 /* MBLTriggeredRead.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTriggeredRead.h; sourceTree = ""; }; - 807664938D5F50F865A9545BCD2FE1BA /* Pods-MetaWearIntegrationTests-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWearIntegrationTests-macOS-umbrella.h"; sourceTree = ""; }; - 80BF935A14C1AE875BBF10E6B3505F06 /* MBLAccelerometerTapEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerTapEvent.h; sourceTree = ""; }; - 8125897E48631184953DBC6BF9970D41 /* MBLGyroBMI160DataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160DataReadyEvent.h; sourceTree = ""; }; - 81E1EAD5716B33481AA8D4749144206A /* MBLAccelerometerOrientationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerOrientationEvent.h; sourceTree = ""; }; - 8266A1A9F7A6E2E88A09CECB83CCBEEE /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig"; sourceTree = ""; }; - 841ACC84A92CFE5A492E2328EDB8410E /* MBLAccelerometerFreeFallEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerFreeFallEvent.h; sourceTree = ""; }; - 8425869ABD5EB8DBC51E5631741F1E52 /* MBLExternalThermistor1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLExternalThermistor1.h; sourceTree = ""; }; - 84636ADEBFC31D02D2AA9BB00F220C37 /* MBLGravityFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGravityFormat.m; sourceTree = ""; }; - 851B1F784539DC188479DDCA5FEC1F8D /* MBLEntityModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEntityModule.h; sourceTree = ""; }; - 85795CBE32C64342DEFEA3F17C5EF7C4 /* MBLEulerFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEulerFormat.h; sourceTree = ""; }; - 858C9D6C80314D5D2A2684B605ED326F /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown"; sourceTree = ""; }; - 85CE3C145F9D23BF8E0DB8462C048C88 /* MBLGyro+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGyro+Private.h"; sourceTree = ""; }; - 866AB71DEA1B2D0ACB8F328AD343EF8C /* MBLGPIOPin+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGPIOPin+Private.h"; sourceTree = ""; }; - 8683A0E500A656B29F04A8F167263386 /* MBLConductanceData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConductanceData.m; sourceTree = ""; }; - 868950A0C4FCD94559DEF6B5FBF4AAEB /* FastCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FastCoder.m; path = FastCoder/FastCoder.m; sourceTree = ""; }; - 8755BF1875A2CDF639F20DED1B9D0C2C /* MBLEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEvent.h; sourceTree = ""; }; - 876E22D020687C840F45B60CBE75C97A /* MBLGyroBMI160.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160.h; sourceTree = ""; }; - 87F19309204F07BA1A90389E5292BAA1 /* MBLModule+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLModule+Private.h"; sourceTree = ""; }; - 8861AD6B7644BD4E708D2AA334947E1C /* MBLAccelerometerMMA8452QRMSFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerMMA8452QRMSFormat.h; sourceTree = ""; }; - 88ED920AEEE06BB9756967CB01B506F9 /* MetaWearPrivate-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWearPrivate-tvOS-prefix.pch"; path = "../MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-prefix.pch"; sourceTree = ""; }; - 89508313CD903B64125F4A956E656897 /* MBLRMSAccelerometerData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLRMSAccelerometerData+Private.h"; sourceTree = ""; }; - 8A498490BEAA8E5C25A3B8A636D898BA /* MBLEntityEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEntityEvent.m; sourceTree = ""; }; - 8B8BE1DCE7543EB7D737BBBEBC88EA25 /* Zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Zip.h; path = Zip/Zip.h; sourceTree = ""; }; - 8BD970ADE60CB77738A77DF291E9B9E1 /* FastCoding-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FastCoding-tvOS-dummy.m"; path = "../FastCoding-tvOS/FastCoding-tvOS-dummy.m"; sourceTree = ""; }; - 8BE067E304FF87CD70F110630548F0B8 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../FastCoding-tvOS/Info.plist"; sourceTree = ""; }; - 8C06DE03D80A35DF40079D0DC1D26480 /* MBLAccelerometerBoschFlatEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFlatEvent.h; sourceTree = ""; }; - 8CB82133272E40D5FE88AAFEE0E3AA14 /* MBLDataSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDataSwitch.h; sourceTree = ""; }; - 8D409E9AC30BA95DADFD8640807D6AC9 /* MBLAccelerometerMMA8452Q.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerMMA8452Q.h; sourceTree = ""; }; - 8DB88D5E21CC6737F8A128219B847D7C /* MBLTemperatureV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTemperatureV1.h; sourceTree = ""; }; - 8DF9B3DC4C18DFE10D8244ADD40CBA5B /* Pods-MetaWearIntegrationTests-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWearIntegrationTests-iOS.modulemap"; sourceTree = ""; }; - 8E467C7C82562087AC08D2E87E1D227E /* MBLAccelerometerBoschFlatData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFlatData.m; sourceTree = ""; }; - 8E865202A724C2E7CA60627742396A26 /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-tvOS.release.xcconfig"; sourceTree = ""; }; - 8F04C343FC7E20D674466E19D6BF71FA /* MBLModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLModule.h; sourceTree = ""; }; - 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - 8FB11F20516E10D5392A8FD9A19FCAF4 /* MBLGPIO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIO.h; sourceTree = ""; }; - 8FD5C90587A6F6E2E3A0062618829499 /* unzip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = unzip.c; path = Zip/minizip/unzip.c; sourceTree = ""; }; - 9030BAA310B1AD555332EC41BE83E228 /* MBLAmbientLightLTR329.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAmbientLightLTR329.h; sourceTree = ""; }; - 906C5F89B30A9DB713FA4DB87557C349 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-macOS/Info.plist"; sourceTree = ""; }; - 91AD9A540F4FC3CC34E90BBC019DF220 /* DFUStreamBin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamBin.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamBin.swift; sourceTree = ""; }; - 91B1BDE2BBD36B29D3C6088CB96920BC /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 92516A30E70293A900BBF8AB90EB0500 /* MBLSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSettings.h; sourceTree = ""; }; + 01D52C2E45BC936FF4AB1D0E40763B4A /* MBLMagnetometerBMM150Preset.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLMagnetometerBMM150Preset.html; path = Docs/html/Constants/MBLMagnetometerBMM150Preset.html; sourceTree = ""; }; + 02B0F8DB23E56A44D8EA9A43AC7C5CCF /* DFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUService.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUService.swift; sourceTree = ""; }; + 02B331627190C631A4DB30D511522F44 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist"; sourceTree = ""; }; + 032B1D15D6DF81DC51B736071A0245DE /* Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 0492263FB0860873484C0EBB0A3F9483 /* searchindex.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = searchindex.js; path = Docs/build/html/searchindex.js; sourceTree = ""; }; + 04B0C159F5C36C15D18B0F0F3647C4BC /* Bolts-Swift-watchOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-watchOS-prefix.pch"; path = "../Bolts-Swift-watchOS/Bolts-Swift-watchOS-prefix.pch"; sourceTree = ""; }; + 04B9EEE405C514BCB4F73E139A274538 /* Lato-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Lato-Regular.ttf"; path = "Docs/build/html/_static/fonts/Lato-Regular.ttf"; sourceTree = ""; }; + 05379BD97460300843D3FBC7D680CB87 /* MBLBarometerBMP280Standby.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBarometerBMP280Standby.html; path = Docs/html/Constants/MBLBarometerBMP280Standby.html; sourceTree = ""; }; + 057F8AB82064BC5B4E6E558667C71A82 /* MBLTimerEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLTimerEvent.html; path = Docs/html/Classes/MBLTimerEvent.html; sourceTree = ""; }; + 0587D668F7D25D72E9A821CDEAFCB48B /* Bolts-Swift-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-Swift-tvOS.xcconfig"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig"; sourceTree = ""; }; + 05C19909642C71AD05718425F515FDC3 /* style.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = style.css; path = Docs/html/css/style.css; sourceTree = ""; }; + 06391F1D445F8198E4D614364F41CD2D /* Pods-MetaWearIntegrationTests-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWearIntegrationTests-tvOS-acknowledgements.markdown"; sourceTree = ""; }; + 0646800EECED1BAF4AC13CB9E3866330 /* Data.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Data.swift; path = iOSDFULibrary/Classes/Utilities/Data.swift; sourceTree = ""; }; + 06D21B509E1755BBF97983C4BA8C8688 /* conductance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = conductance.cpp; sourceTree = ""; }; + 0737BFE81332AB8FBA688B06CBCFDEFC /* MBLMagnetometer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLMagnetometer.html; path = Docs/html/Classes/MBLMagnetometer.html; sourceTree = ""; }; + 074E08A211E345FD32E02B722A712C5B /* MBLGyroData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLGyroData.html; path = Docs/html/Classes/MBLGyroData.html; sourceTree = ""; }; + 086A7DCEF62D797B49729EF161EFAEE0 /* MBLMechanicalSwitch.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLMechanicalSwitch.html; path = Docs/html/Classes/MBLMechanicalSwitch.html; sourceTree = ""; }; + 08902F62F43E100DBC6D8E2210A475FD /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh"; sourceTree = ""; }; + 08ACEA0EC6628DC3B276B9ECA6A62BEE /* MBLBarometerBoschFilter.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBarometerBoschFilter.html; path = Docs/html/Constants/MBLBarometerBoschFilter.html; sourceTree = ""; }; + 09BC8767D1463A5A9B4ABA773E0C6AA6 /* file_operations.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = file_operations.cpp; sourceTree = ""; }; + 0AD367817FFA9A2215311BC65D7E25AB /* MBLAccelerometerMMA8452Q.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerMMA8452Q.html; path = Docs/html/Classes/MBLAccelerometerMMA8452Q.html; sourceTree = ""; }; + 0AD9B4AE96B9446885844A4DB4245B2B /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig"; sourceTree = ""; }; + 0B21AC4E28269259DC1E7F16672E91C8 /* MBLStringData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLStringData.html; path = Docs/html/Classes/MBLStringData.html; sourceTree = ""; }; + 0BA519C617380F70E744607863ED703D /* Task+Delay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Task+Delay.swift"; path = "Sources/BoltsSwift/Task+Delay.swift"; sourceTree = ""; }; + 0BEABFA048E0E9D6CCB69878A8337F5A /* Pods-MetaWearIntegrationTests-tvOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-tvOS-resources.sh"; sourceTree = ""; }; + 0D281C2C0AB78B7AC04AB6D56652BD40 /* MBLHygrometer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLHygrometer.html; path = Docs/html/Classes/MBLHygrometer.html; sourceTree = ""; }; + 0EDADF7F64E4C98A6CA948025535C5EC /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap"; sourceTree = ""; }; + 0F3DA01845CCC8EF4095C821682AC2C7 /* MBLPhotometer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLPhotometer.html; path = Docs/html/Classes/MBLPhotometer.html; sourceTree = ""; }; + 0F8706FC56F8FB1387E55C7D75725857 /* MetaWear-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MetaWear-iOS.xcconfig"; sourceTree = ""; }; + 0F94A36E3AFA6EBEF7FB8A34A4352175 /* ManifestFirmwareInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ManifestFirmwareInfo.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/ManifestFirmwareInfo.swift; sourceTree = ""; }; + 0FBBB5230FF85BC2B7980D00FC64CD92 /* MBLGyroBMI160Range.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLGyroBMI160Range.html; path = Docs/html/Constants/MBLGyroBMI160Range.html; sourceTree = ""; }; + 10757DFF6BCC73CD3C6A2ADBCA5F960F /* Pods-MetaWearIntegrationTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-iOS.debug.xcconfig"; sourceTree = ""; }; + 10F8E5E31C218185FB0E128EDC33C27A /* fontawesome-webfont.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "fontawesome-webfont.ttf"; path = "Docs/build/html/_static/fonts/fontawesome-webfont.ttf"; sourceTree = ""; }; + 116203619F58C987920002EE6B37CE6E /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig"; sourceTree = ""; }; + 1196555855ACC3D415886D16DA3C2697 /* MBLAnonymousEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAnonymousEvent.html; path = Docs/html/Classes/MBLAnonymousEvent.html; sourceTree = ""; }; + 119B57EC95C4B2638815E0B6ABCD7174 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh"; sourceTree = ""; }; + 11CF78DD2D3C9076332F0B6FF5AC4695 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown"; sourceTree = ""; }; + 124C4E1DCF4F23F591D3A0FD34B983F6 /* MBLComparisonOutput.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLComparisonOutput.html; path = Docs/html/Constants/MBLComparisonOutput.html; sourceTree = ""; }; + 1279C736014DD5FFA015C2C9FCA9ED0D /* library_background.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = library_background.png; path = Docs/html/img/library_background.png; sourceTree = ""; }; + 12AE9AA947AF275B27C8883789D7B242 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.plist"; sourceTree = ""; }; + 12BF577CAE7BC994721AA252211F53DF /* barometer_bosch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = barometer_bosch.cpp; sourceTree = ""; }; + 12DDD6331860AB76E867A472FCCA4A15 /* MetaWear+Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MetaWear+Async.swift"; path = "MetaWear/AsyncUtils/MetaWear+Async.swift"; sourceTree = ""; }; + 144A33146586D80E595456D7FA762F5F /* MBLAccelerometerBMA255MotionEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBMA255MotionEvent.html; path = Docs/html/Classes/MBLAccelerometerBMA255MotionEvent.html; sourceTree = ""; }; + 1482265587727D68E5B335B391869EEF /* LegacyDFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUExecutor.swift; sourceTree = ""; }; + 151015D50ACCAB5DBE22A5BDE217457A /* threadpool.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = threadpool.cpp; sourceTree = ""; }; + 15DE2F540E6733F7B58EE8E4CEFBF517 /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1638CDB3FFAA0FAD1BD741E7A1789DCB /* Zip-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Zip-iOS-umbrella.h"; sourceTree = ""; }; + 1641E74D80DF7148698DE7B1F574FCB4 /* SecureDFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUService.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Services/SecureDFUService.swift; sourceTree = ""; }; + 169779CB04EDD25311BFBFF0A0DA212B /* MetaWear-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWear-macOS-dummy.m"; path = "../MetaWear-macOS/MetaWear-macOS-dummy.m"; sourceTree = ""; }; + 16D8FA9DB16A056D1184A9D39F2CF698 /* MBLDataNotificationHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLDataNotificationHandler.html; path = Docs/html/Blocks/MBLDataNotificationHandler.html; sourceTree = ""; }; + 179A55B9C457FA9A8D10AB87E80631ED /* Bolts-Swift-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-tvOS-umbrella.h"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h"; sourceTree = ""; }; + 17F9BC4775B3AC83A4B5A3EC8D1A0219 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig"; sourceTree = ""; }; + 18258ADE5BF8836097C56D26592629B8 /* MBLData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLData.html; path = Docs/html/Classes/MBLData.html; sourceTree = ""; }; + 19DE09EF16EFF2FD031FEC717665CC11 /* Bolts-Swift-watchOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-Swift-watchOS.xcconfig"; path = "../Bolts-Swift-watchOS/Bolts-Swift-watchOS.xcconfig"; sourceTree = ""; }; + 19E3890674BACA9128C1C1F9835FB048 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap"; sourceTree = ""; }; + 1B467B9BCA78B0BB519888E22BC5D2B4 /* event.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = event.cpp; sourceTree = ""; }; + 1CEEE277440B3915D1E813B248AC9497 /* MetaWear-watchOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-watchOS-umbrella.h"; path = "../MetaWear-watchOS/MetaWear-watchOS-umbrella.h"; sourceTree = ""; }; + 1DDEFF1315B4D148E9CA05364AD7DF4E /* LogDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LogDelegate.swift; sourceTree = ""; }; + 1F4AD0F21AEC06B27504E07071E55A3D /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = Zip/Zip.swift; sourceTree = ""; }; + 20414AC783F2C79421FC802B17AF6B37 /* DFUPeripheralSelectorDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralSelectorDelegate.swift; path = iOSDFULibrary/Classes/Implementation/DFUPeripheralSelectorDelegate.swift; sourceTree = ""; }; + 2074260BBDC712E4A6058966312A29B0 /* MBLTransmitPower.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLTransmitPower.html; path = Docs/html/Constants/MBLTransmitPower.html; sourceTree = ""; }; + 212F9A566555D55921AA2260DC39A008 /* MBLGyro.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLGyro.html; path = Docs/html/Classes/MBLGyro.html; sourceTree = ""; }; + 2222AA051A2657F05060085DC8B17562 /* cbindings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = cbindings.swift; sourceTree = ""; }; + 224573BEAB5C6F484091369A5C159860 /* Bolts-Swift-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-macOS-umbrella.h"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h"; sourceTree = ""; }; + 2324F9E4F7F62F924F878871A0776E7C /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m"; sourceTree = ""; }; + 23A6C12931CF3E63C32D04FB3BE20E4C /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m"; sourceTree = ""; }; + 23DA68CC3636116209C7A30BDAF6F0D2 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown"; sourceTree = ""; }; + 2408A3AA0166131C1F428B734EA0318D /* accelerometer_mma8452q.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = accelerometer_mma8452q.cpp; sourceTree = ""; }; + 24466BAD077FC4399E2267E2D2D376DA /* MBLNumericData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLNumericData.html; path = Docs/html/Classes/MBLNumericData.html; sourceTree = ""; }; + 25C05A3B25B23975A17107F661D73D5F /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist"; sourceTree = ""; }; + 25C83457451FD5A29DBFC9D7AA22E184 /* ZipUtilities.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZipUtilities.swift; path = Zip/ZipUtilities.swift; sourceTree = ""; }; + 261E15B9A189FDC032EF0C982C6CC0B1 /* searchtools.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = searchtools.js; path = Docs/build/html/_static/searchtools.js; sourceTree = ""; }; + 263B0B60310737A9FF3C124DE53AFFB7 /* haptic.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = haptic.cpp; sourceTree = ""; }; + 267B9BFB43936B8A1F8F089F1CA8D6F7 /* MBLSuccessBlock.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLSuccessBlock.html; path = Docs/html/Blocks/MBLSuccessBlock.html; sourceTree = ""; }; + 28377486B1AE9D151AFEC30E9F6259BE /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = index.html; path = Docs/build/html/index.html; sourceTree = ""; }; + 284B4A6F6E39D90D6337E081DA3B0812 /* gen_api_reference.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; name = gen_api_reference.sh; path = Docs/source/gen_api_reference.sh; sourceTree = ""; }; + 286F5E5CC7DD5293F5716A3458A3A4A0 /* MBLAmbientLightLTR329.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAmbientLightLTR329.html; path = Docs/html/Classes/MBLAmbientLightLTR329.html; sourceTree = ""; }; + 2876A82CCA679D66AE8319F4C7E86373 /* index.doctree */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = index.doctree; path = Docs/build/doctrees/index.doctree; sourceTree = ""; }; + 28EE2030BE47C702DD7CE5C350586B0B /* metawearboard.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = metawearboard.cpp; sourceTree = ""; }; + 29A92F6A0289BED184257ACBD3631DAE /* Zip-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Zip-iOS.xcconfig"; sourceTree = ""; }; + 2A15757A99F40F5AB20F50496D4AC44C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-Swift-macOS/Info.plist"; sourceTree = ""; }; + 2A3B003C2DFE7BF1303BA9C79FE30CEE /* _layout.scss */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = _layout.scss; path = Docs/html/css/scss/_layout.scss; sourceTree = ""; }; + 2A41E41020280AE830D0C743267F4744 /* memory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; + 2A9C56DC2C105C364D5B518FCDD49076 /* MBLBarometerBMP280.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBarometerBMP280.html; path = Docs/html/Classes/MBLBarometerBMP280.html; sourceTree = ""; }; + 2B048C14EC9DD111890D9059BB3BA90A /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B0C2BC1E24C581855B34E2C0275F1DB /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = index.html; path = Docs/html/index.html; sourceTree = ""; }; + 2B1A3680D86F0A9AE580D3DB67685636 /* MetaWear-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-tvOS-prefix.pch"; path = "../MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; sourceTree = ""; }; + 2B3B987F6C3DB81CD9222971F397FCB3 /* MBLANCSEventID.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLANCSEventID.html; path = Docs/html/Constants/MBLANCSEventID.html; sourceTree = ""; }; + 2B5A502C2CC9D4B6026DE3F997ED0B59 /* iOSDFULibrary-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "iOSDFULibrary-macOS.modulemap"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS.modulemap"; sourceTree = ""; }; + 2B86C849C0D94F518C891C30917C82F3 /* MetaWear+Mock.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MetaWear+Mock.swift"; path = "MetaWear/Mocks/MetaWear+Mock.swift"; sourceTree = ""; }; + 2BCB9415435C7AB5140138BC1EA46704 /* MBLHygrometerBME280Oversample.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLHygrometerBME280Oversample.html; path = Docs/html/Constants/MBLHygrometerBME280Oversample.html; sourceTree = ""; }; + 2BDA474B496651F2E06B88718CB964BA /* MBLiBeaconTransmitPower.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLiBeaconTransmitPower.html; path = Docs/html/Constants/MBLiBeaconTransmitPower.html; sourceTree = ""; }; + 2BE718E934BC39C97AD5E2837E249A27 /* MBLFilter.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLFilter.html; path = Docs/html/Classes/MBLFilter.html; sourceTree = ""; }; + 2C9800D5CDCE16198DA3ED62EE50AA0B /* MBLFirmwareVersion.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLFirmwareVersion.html; path = Docs/html/Constants/MBLFirmwareVersion.html; sourceTree = ""; }; + 2D828F6ED2220B60641C3A385A62528C /* MBLAccelerometerRange.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerRange.html; path = Docs/html/Constants/MBLAccelerometerRange.html; sourceTree = ""; }; + 2DB32D699148AA9B8E99EF48F686D1DF /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-resources.sh"; sourceTree = ""; }; + 2DC03425927039B06E86AF56E26EE0CA /* plus.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = plus.png; path = Docs/build/html/_static/plus.png; sourceTree = ""; }; + 2DEEABC9BEC8B962C5C71A939CF77ABA /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown"; sourceTree = ""; }; + 2E0F31138CE5CE79A7CA90F961C39363 /* MBLAccelerometerTapType.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerTapType.html; path = Docs/html/Constants/MBLAccelerometerTapType.html; sourceTree = ""; }; + 2EDD3D9D4160990AA22AC9137B4497BD /* datasignal.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = datasignal.cpp; sourceTree = ""; }; + 2EDF86AC577064CE4CF6F1313921D7AA /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh"; sourceTree = ""; }; + 2EE572DC7C528046DE3640C3CBF27016 /* MBLiBeacon.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLiBeacon.html; path = Docs/html/Classes/MBLiBeacon.html; sourceTree = ""; }; + 2F8B78FBF9264569E480AC71F3022D08 /* MBLAccelerometerBoschTapEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschTapEvent.html; path = Docs/html/Classes/MBLAccelerometerBoschTapEvent.html; sourceTree = ""; }; + 2F8D4EF839C0544F0B2ECE9AAD3699EE /* MBLANCSCategoryID.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLANCSCategoryID.html; path = Docs/html/Constants/MBLANCSCategoryID.html; sourceTree = ""; }; + 307665585CE41CD48896CEFF922CF592 /* MBLGPIO.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLGPIO.html; path = Docs/html/Classes/MBLGPIO.html; sourceTree = ""; }; + 3110D4F29F4939B331BA3DE7CBD93777 /* _xcode.scss */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = _xcode.scss; path = Docs/html/css/scss/_xcode.scss; sourceTree = ""; }; + 3128808BBD3D9A7F117E50386DF5ECCE /* zip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = zip.c; path = Zip/minizip/zip.c; sourceTree = ""; }; + 323A4A2EC826C62C5FEB2F183EF55F8B /* MBLBMI160FilterMode.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBMI160FilterMode.html; path = Docs/html/Constants/MBLBMI160FilterMode.html; sourceTree = ""; }; + 336F1A00204D8A6550C80D49F2E809E3 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.modulemap"; sourceTree = ""; }; + 34BF8063CA380F75084E3AB2C4ECA216 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 34DF8690647128CF747A18E6C2A3B0D0 /* _object.scss */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = _object.scss; path = Docs/html/css/scss/_object.scss; sourceTree = ""; }; + 34E4A445CE686B584E1F252ACC021203 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 35060D8ED6023D58DC2A5138CD773F28 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap"; sourceTree = ""; }; + 357FF1C44E9F5B6930D58E1D1E050A40 /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 360A270AD42F634D311376029E79307E /* MBLRotationDirection.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLRotationDirection.html; path = Docs/html/Constants/MBLRotationDirection.html; sourceTree = ""; }; + 3612B926ACAFB9BA635B260B7115B71A /* Pods-MetaWearIntegrationTests-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-tvOS-frameworks.sh"; sourceTree = ""; }; + 3679B8DC5C009AE10D92C7FF0C6B4EDB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig"; sourceTree = ""; }; + 36BA56DE9428635EE783CD7EB626B05C /* MBLAccelerometerBosch.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBosch.html; path = Docs/html/Classes/MBLAccelerometerBosch.html; sourceTree = ""; }; + 36CF7185434DDAA3375939572580C558 /* MBLANCSNotificationAttributeID.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLANCSNotificationAttributeID.html; path = Docs/html/Constants/MBLANCSNotificationAttributeID.html; sourceTree = ""; }; + 38D854413BA7877B89126C626034B847 /* Bolts-Swift-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-Swift-macOS-dummy.m"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m"; sourceTree = ""; }; + 390AEB7172C87A8ABB81C9EFB4785701 /* MBLAmbientLightLTR329Gain.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAmbientLightLTR329Gain.html; path = Docs/html/Constants/MBLAmbientLightLTR329Gain.html; sourceTree = ""; }; + 3940B6C36ECC870E8A7A1594F55BB606 /* MetaWear-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MetaWear-iOS-umbrella.h"; sourceTree = ""; }; + 39AB8B49107DEA312211CF59603711F7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWear-watchOS/Info.plist"; sourceTree = ""; }; + 39C193F482E2D876192526D01572D72C /* accelerometer_bosch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = accelerometer_bosch.cpp; sourceTree = ""; }; + 3A180304775B85648F47121CA96B1EB4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3AD6F9ADF08B67FFA34BDE21719B1117 /* version.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = version.cpp; sourceTree = ""; }; + 3B1C6B2E346D4D6BE37D9665C5A560A5 /* Pods-MetaWearIntegrationTests-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWearIntegrationTests-iOS-umbrella.h"; sourceTree = ""; }; + 3BAB95B24CEFB2216423263B2F6C4D12 /* environment.pickle */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = environment.pickle; path = Docs/build/doctrees/environment.pickle; sourceTree = ""; }; + 3C2B49ED7F1FFA0D76778ADC2A3FD917 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3D45D1272B1860B206A44BE30D4966B8 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + 3D800605874384681EB4E6EBB3A9B165 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh"; sourceTree = ""; }; + 3D8408087170F0518772556A0BCEC09A /* Pods-MetaWearIntegrationTests-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWearIntegrationTests-iOS-acknowledgements.markdown"; sourceTree = ""; }; + 3E1C90244D3201D1A6AF1B64007447B0 /* MBLCalibrationAccuracy.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLCalibrationAccuracy.html; path = Docs/html/Constants/MBLCalibrationAccuracy.html; sourceTree = ""; }; + 3E38D128DAC4636BC0CC175F0881F8A6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 3E8B45EBF83DFC62B51A9876BEC25FCA /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 40A5845BC83C2E50CBD33B4B11397D33 /* MBLConductanceRange.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLConductanceRange.html; path = Docs/html/Constants/MBLConductanceRange.html; sourceTree = ""; }; + 40BF6C6A0FEDA4DFF9CEAD42ED2281F4 /* jquery-3.2.1.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = "jquery-3.2.1.js"; path = "Docs/build/html/_static/jquery-3.2.1.js"; sourceTree = ""; }; + 40F2D386A2D49038493E715A68DAD06B /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 40F3A73B21BF78DA32D32BEB8D16465F /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 410829F7F590EE0D9D34C429EA346CD1 /* websupport.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = websupport.js; path = Docs/build/html/_static/websupport.js; sourceTree = ""; }; + 416C01C0947BDD9802EC0C416EC9BF52 /* down-pressed.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "down-pressed.png"; path = "Docs/build/html/_static/down-pressed.png"; sourceTree = ""; }; + 4202A38531A5F241B16C77D5E758F4E2 /* MBLArithmeticOperation.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLArithmeticOperation.html; path = Docs/html/Constants/MBLArithmeticOperation.html; sourceTree = ""; }; + 429E6E3CF69870B5E4953FA8F6091C74 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig"; sourceTree = ""; }; + 42F9D17A5FE570DEEA06700102689958 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh"; sourceTree = ""; }; + 436FDBC3E5D46266015EEE80C9B342B5 /* DFUFirmware.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUFirmware.swift; path = iOSDFULibrary/Classes/Implementation/Firmware/DFUFirmware.swift; sourceTree = ""; }; + 4415884ECCB7AE0764CAA265AAF4159D /* index.rst.txt */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = index.rst.txt; path = Docs/build/html/_sources/index.rst.txt; sourceTree = ""; }; + 441DA5864008D13EECD7D2ADEBBA477F /* MblMwDataSignal+Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MblMwDataSignal+Async.swift"; path = "MetaWear/AsyncUtils/MblMwDataSignal+Async.swift"; sourceTree = ""; }; + 442785F52975C0A54D634862B58852DF /* timer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = ""; }; + 44D4FCFC60A79AC7BEF826AEAA886ABE /* Pods-MetaWearIntegrationTests-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWearIntegrationTests-macOS-acknowledgements.plist"; sourceTree = ""; }; + 451E8B587720F2BEF3BE88868AA9CEB4 /* Executor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Executor.swift; path = Sources/BoltsSwift/Executor.swift; sourceTree = ""; }; + 458A3992B98FDF97203DCE9D31CB9C0D /* MetaWear-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWear-tvOS-dummy.m"; path = "../MetaWear-tvOS/MetaWear-tvOS-dummy.m"; sourceTree = ""; }; + 45E35F25EFF05C3924C3CF2956D9FB24 /* iOSDFULibrary-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "iOSDFULibrary-macOS-prefix.pch"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS-prefix.pch"; sourceTree = ""; }; + 462BD5D6B1A2D23CE59764974A984046 /* MBLBarometer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBarometer.html; path = Docs/html/Classes/MBLBarometer.html; sourceTree = ""; }; + 46342162168E87FE5F7167677AB0321C /* utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = utils.cpp; sourceTree = ""; }; + 476F80F9C060E5C0AB90B8C7CA652D08 /* MBLAccelerometerSleepSampleFrequency.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerSleepSampleFrequency.html; path = Docs/html/Constants/MBLAccelerometerSleepSampleFrequency.html; sourceTree = ""; }; + 47CEDAFFE6C4CB3D1AB0C6349D13B5FA /* Inconsolata-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Inconsolata-Regular.ttf"; path = "Docs/build/html/_static/fonts/Inconsolata-Regular.ttf"; sourceTree = ""; }; + 4854153EAC949C2DAF0FBCCB81822784 /* MBLCentralManagerStateHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLCentralManagerStateHandler.html; path = Docs/html/Blocks/MBLCentralManagerStateHandler.html; sourceTree = ""; }; + 49205E57F906E181D8FBE66F0BDD6396 /* MBLBarometerBoschOversample.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBarometerBoschOversample.html; path = Docs/html/Constants/MBLBarometerBoschOversample.html; sourceTree = ""; }; + 4A0AAD6C234CD1B7A057BBDB758F1D27 /* MBLProximity.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLProximity.html; path = Docs/html/Classes/MBLProximity.html; sourceTree = ""; }; + 4AB0C476B4DF7448961AA16E2943837B /* DFUStreamHex.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamHex.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamHex.swift; sourceTree = ""; }; + 4B31127F6A9B12AD9FDFDD7E6C51BDE3 /* neopixel.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = neopixel.cpp; sourceTree = ""; }; + 4B70937C31CEC0BCA790C3061A8E2C96 /* MBLMetaWear.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLMetaWear.html; path = Docs/html/Classes/MBLMetaWear.html; sourceTree = ""; }; + 4B881AF4D487065D1770F89AAD90360E /* MetaWear-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-tvOS-umbrella.h"; path = "../MetaWear-tvOS/MetaWear-tvOS-umbrella.h"; sourceTree = ""; }; + 4BB7BE34183B121BB5BB03F3B7D8DA55 /* MBLPinChangeType.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLPinChangeType.html; path = Docs/html/Constants/MBLPinChangeType.html; sourceTree = ""; }; + 4C877840A3F8F69B16D4815B289EE4B4 /* IntelHex2BinConverter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IntelHex2BinConverter.h; path = iOSDFULibrary/Classes/Utilities/HexToBinConverter/IntelHex2BinConverter.h; sourceTree = ""; }; + 4CE0A304A77CE43DEE4A79DE5CD8D9A0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 4D7A49244E97A3681E878DC978B44D3B /* _normalize.scss */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = _normalize.scss; path = Docs/html/css/scss/_normalize.scss; sourceTree = ""; }; + 4ED0DEA8544770D6D05B3A9F0C3A85A9 /* iOSDFULibrary-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSDFULibrary-iOS-prefix.pch"; sourceTree = ""; }; + 4F30EDFE01E5E1B640B4A32654D0F155 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig"; sourceTree = ""; }; + 4F7F8ECC52D2095B93F8F28622E85477 /* MBLOrientationData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLOrientationData.html; path = Docs/html/Classes/MBLOrientationData.html; sourceTree = ""; }; + 5039379A2661F404DA56621E40AF94EB /* MBLAccelerometerBMI160.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBMI160.html; path = Docs/html/Classes/MBLAccelerometerBMI160.html; sourceTree = ""; }; + 5049F9A6F027739FFD413A63653E8620 /* MBLEntityEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLEntityEvent.html; path = Docs/html/Classes/MBLEntityEvent.html; sourceTree = ""; }; + 505657139C15274AA9DFFA6B200D42D7 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig"; sourceTree = ""; }; + 50C10FB5C18BC3D9B6CBB7AEC5F0B6CF /* DFUControlPoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUControlPoint.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUControlPoint.swift; sourceTree = ""; }; + 51A16496FE7111EA2A48413961D8E2E7 /* Pods-MetaWearIntegrationTests-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWearIntegrationTests-iOS.modulemap"; sourceTree = ""; }; + 534CA9369313E93EB921DD890CCBA9F9 /* MBLAccelerometerFacingDirection.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerFacingDirection.html; path = Docs/html/Constants/MBLAccelerometerFacingDirection.html; sourceTree = ""; }; + 5394449ACFB624056F0385758C7EA263 /* DFUStreamZip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamZip.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamZip.swift; sourceTree = ""; }; + 53A5F86F228E1FC44D6BB62174D0FAD1 /* gpio.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = gpio.cpp; sourceTree = ""; }; + 53AF414AABC51FADC5F04FC9948ED862 /* MetaWear-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWear-macOS.xcconfig"; path = "../MetaWear-macOS/MetaWear-macOS.xcconfig"; sourceTree = ""; }; + 546C16D718B651D515C6381ECE7D4C13 /* dfu_operations_details.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dfu_operations_details.cpp; sourceTree = ""; }; + 546E629C97767156AC9A9B49E3594818 /* comment-close.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "comment-close.png"; path = "Docs/build/html/_static/comment-close.png"; sourceTree = ""; }; + 54A22C2782B1C0C819A8C6C89D54D6CF /* MBLConductanceGain.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLConductanceGain.html; path = Docs/html/Constants/MBLConductanceGain.html; sourceTree = ""; }; + 54A90763F0AE07A7C425334A9A130FC2 /* MBLBarometerBosch.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBarometerBosch.html; path = Docs/html/Classes/MBLBarometerBosch.html; sourceTree = ""; }; + 55ADF8DB6E71D4CA117584B3A7FC1A3E /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh"; sourceTree = ""; }; + 56C7C03696EF6F13667F6C690FB8CDD9 /* MBLAccelerometerBMA255.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBMA255.html; path = Docs/html/Classes/MBLAccelerometerBMA255.html; sourceTree = ""; }; + 56DB0E38B0E61575732A35183A5116AA /* MetaWear-watchOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "MetaWear-watchOS.modulemap"; path = "../MetaWear-watchOS/MetaWear-watchOS.modulemap"; sourceTree = ""; }; + 585E1A8F08EEB8811014157B69C31D5D /* MBLFirmwareUpdateInfo.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLFirmwareUpdateInfo.html; path = Docs/html/Classes/MBLFirmwareUpdateInfo.html; sourceTree = ""; }; + 588ECDCB1395901F31C88192F30922FC /* pygments.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = pygments.css; path = Docs/build/html/_static/pygments.css; sourceTree = ""; }; + 58CDAEAACBA394AEA56B73D12D13F8D9 /* MBLHapticBuzzer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLHapticBuzzer.html; path = Docs/html/Classes/MBLHapticBuzzer.html; sourceTree = ""; }; + 58EF9C79AB820B6F9761DB4455B19D8E /* MetaWear-watchOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-watchOS-prefix.pch"; path = "../MetaWear-watchOS/MetaWear-watchOS-prefix.pch"; sourceTree = ""; }; + 5997402F4329D853E7BCB603CE25BA3F /* LoggerDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerDelegate.swift; path = iOSDFULibrary/Classes/Utilities/Logging/LoggerDelegate.swift; sourceTree = ""; }; + 59FD274485858C170022143FF7ECFF2E /* Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A10B2EA553069C796888CFC9DF799A8 /* QuickZip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickZip.swift; path = Zip/QuickZip.swift; sourceTree = ""; }; + 5A501F99C53E65214336B57BF8C15FCF /* SoftdeviceBootloaderInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SoftdeviceBootloaderInfo.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/SoftdeviceBootloaderInfo.swift; sourceTree = ""; }; + 5B3CC78DF058537FAA7642F32DF5E0BB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap"; sourceTree = ""; }; + 5B6511866AFA1D91F9311C7E013E63A0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 5BAE0ABA0A6F538E868254D9F101BE09 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Zip-macOS/Info.plist"; sourceTree = ""; }; + 5C0A95FCF8D76DCEF9840C7D0346CA0E /* MBLLED.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLLED.html; path = Docs/html/Classes/MBLLED.html; sourceTree = ""; }; + 5C5265920442C3F5E551E1CCF4D18182 /* sensor_fusion.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = sensor_fusion.cpp; sourceTree = ""; }; + 5CA8D32B9C323FA419ED9B0FE21A7481 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m"; sourceTree = ""; }; + 5D309696A6B188576EA54A5834846886 /* Pods-MetaWearIntegrationTests-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWearIntegrationTests-iOS-dummy.m"; sourceTree = ""; }; + 5D659A54AFE195D24B85CFC70F8F6734 /* SecureDFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUServiceInitiator.swift; sourceTree = ""; }; + 5D9D78A668A89C64803144239FD3E9BF /* DFUController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUController.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUController.swift; sourceTree = ""; }; + 5EFC15AB3BD8B826657CD5776901780E /* Task.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Task.swift; path = Sources/BoltsSwift/Task.swift; sourceTree = ""; }; + 5F20CCA1080D95AC2685FCFE88CAFA8E /* MBLNeopixel.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLNeopixel.html; path = Docs/html/Classes/MBLNeopixel.html; sourceTree = ""; }; + 5F90E21E1EC32E577938414EC8DD8ED8 /* debug.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = debug.cpp; sourceTree = ""; }; + 6007B14F565FF154037111E7604F2A18 /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = zip.h; path = Zip/minizip/zip.h; sourceTree = ""; }; + 6010474B46BE6F4981080BE3A52E3A98 /* MBLAccelerometerBoschFlatTime.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschFlatTime.html; path = Docs/html/Constants/MBLAccelerometerBoschFlatTime.html; sourceTree = ""; }; + 60A372C6651ED5E753DEF691288E2F7B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWear-tvOS/Info.plist"; sourceTree = ""; }; + 61667BB723C754370E8D90CBD5D4C71D /* MBLAccelerometerBoschRange.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschRange.html; path = Docs/html/Constants/MBLAccelerometerBoschRange.html; sourceTree = ""; }; + 6203AC6028A7572E52B5B01AF085BD98 /* Lato-Italic.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Lato-Italic.ttf"; path = "Docs/build/html/_static/fonts/Lato-Italic.ttf"; sourceTree = ""; }; + 627516D8B2000EDBB9363EA11AF4A0A4 /* Pods-MetaWearIntegrationTests-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWearIntegrationTests-macOS.modulemap"; sourceTree = ""; }; + 638340E73003B3641A29363DEBA5E5A0 /* settings.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = settings.cpp; sourceTree = ""; }; + 63BD66F0058B68A8F0A048B9B93F17D7 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m"; sourceTree = ""; }; + 63C0A966C9D2B0230B7C3A9DBA900040 /* MBLPhotometerTCS3472Gain.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLPhotometerTCS3472Gain.html; path = Docs/html/Constants/MBLPhotometerTCS3472Gain.html; sourceTree = ""; }; + 6447B847713316FF16EEFCB14B84342A /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + 646C3E00A59C92FD42A78D18DCA253B6 /* Pods-MetaWearIntegrationTests-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-iOS-frameworks.sh"; sourceTree = ""; }; + 66E14CE143A947E19091B8A03F233B29 /* Bolts-Swift-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-Swift-iOS-dummy.m"; sourceTree = ""; }; + 67404A7A57B76FE39D4E138021CEB794 /* theme.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = theme.css; path = Docs/build/html/_static/css/theme.css; sourceTree = ""; }; + 6743A877F9EFD5B3B72015810B075E8D /* Zip-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Zip-macOS.modulemap"; path = "../Zip-macOS/Zip-macOS.modulemap"; sourceTree = ""; }; + 67A004C058CA6A4E4E5785CE990A602E /* LegacyDFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheral.swift; sourceTree = ""; }; + 67C3523E890BD3724EA15F0D1440F083 /* MetaWear+LED.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MetaWear+LED.swift"; path = "MetaWear/AsyncUtils/MetaWear+LED.swift"; sourceTree = ""; }; + 67D3CE7C33CF5DDCCFFACDB7E73DF3EF /* DFUStreamBin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStreamBin.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStreamBin.swift; sourceTree = ""; }; + 6983CD1C0A1B54CA11B21A351889624C /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig"; sourceTree = ""; }; + 6AC08B6615CCD65CDB2AF05218F5A044 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist"; sourceTree = ""; }; + 6AD3C77FD886DEC9D5C811CA4B8A73B2 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh"; sourceTree = ""; }; + 6B7E1599FB05F27AE17850BDDC7A9426 /* SecureDFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Peripheral/SecureDFUPeripheralDelegate.swift; sourceTree = ""; }; + 6BC58E36191CECF7987AD5864ADE841C /* up-pressed.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "up-pressed.png"; path = "Docs/build/html/_static/up-pressed.png"; sourceTree = ""; }; + 6C88ECC6E463BE960178E950DF7C7E5B /* Lato-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Lato-Bold.ttf"; path = "Docs/build/html/_static/fonts/Lato-Bold.ttf"; sourceTree = ""; }; + 6C9DD81FF1A8E78242F5803924BF2BD0 /* Lato-BoldItalic.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Lato-BoldItalic.ttf"; path = "Docs/build/html/_static/fonts/Lato-BoldItalic.ttf"; sourceTree = ""; }; + 6CA866C02F89D931A4C1A0F21386A1C1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6CA8FB8C0FBF0E19A1ECEE2B571FEE38 /* Zip-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Zip-macOS-prefix.pch"; path = "../Zip-macOS/Zip-macOS-prefix.pch"; sourceTree = ""; }; + 6CB4B0FE993F664045BAA9B5D5C572B7 /* SecureDFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/DFU/SecureDFUExecutor.swift; sourceTree = ""; }; + 6CD21509EC01C5B8E755BA079CDED9CC /* Pods-MetaWearIntegrationTests-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWearIntegrationTests-tvOS-acknowledgements.plist"; sourceTree = ""; }; + 6D76A8C38CCE3D14D143CA80FE197E7D /* MBLGyroBMI160.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLGyroBMI160.html; path = Docs/html/Classes/MBLGyroBMI160.html; sourceTree = ""; }; + 6DBE3E77D7E156330FD7558A2651C6FF /* DFUPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPacket.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUPacket.swift; sourceTree = ""; }; + 6DFAD7C475E651F8FA4249D7CC4D42E1 /* MBLBoolHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBoolHandler.html; path = Docs/html/Blocks/MBLBoolHandler.html; sourceTree = ""; }; + 6E3A54EE61A51028CFD21C1FAABD0DB9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6EF04B1F4004A55B398C7B6DAD581543 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7029E72314B132D43FDFA47549C85FD2 /* MBLI2CData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLI2CData.html; path = Docs/html/Classes/MBLI2CData.html; sourceTree = ""; }; + 707D5C5A850374E84093B35D5F050ECC /* DFUVersion.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUVersion.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUVersion.swift; sourceTree = ""; }; + 70AC435F59E13F0125F0E789D041C1C3 /* Bolts-Swift-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-Swift-iOS-umbrella.h"; sourceTree = ""; }; + 722B391E0EEAAAC58B70C7A6186FCBF6 /* miniz.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = miniz.cpp; sourceTree = ""; }; + 73773D924A89C1E9AB93E8F17326075A /* MBLSerial.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLSerial.html; path = Docs/html/Classes/MBLSerial.html; sourceTree = ""; }; + 74299291E704C4E70B5B938FE71CCD5C /* Zip-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Zip-macOS-umbrella.h"; path = "../Zip-macOS/Zip-macOS-umbrella.h"; sourceTree = ""; }; + 750B1F2C0E004206E66A28955A554D06 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown"; sourceTree = ""; }; + 752B418A31C1FB5B505E37688EE54173 /* MetaWear-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "MetaWear-tvOS.modulemap"; path = "../MetaWear-tvOS/MetaWear-tvOS.modulemap"; sourceTree = ""; }; + 7611AC300A31C6DDDF2ABE9ED299CA37 /* conf.py */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.python; name = conf.py; path = Docs/source/conf.py; sourceTree = ""; }; + 762C34D2C8717E0CD10CBFB8FB056A1B /* Zip-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Zip-iOS-prefix.pch"; sourceTree = ""; }; + 7635660F953D911A2D781EFEEEEA892F /* disclosure.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = disclosure.png; path = Docs/html/img/disclosure.png; sourceTree = ""; }; + 76C6DA6427752A0B49FCD4F46FD110B9 /* CBUUID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CBUUID.swift; sourceTree = ""; }; + 77BD5E4E466C25D780F8005383032CF0 /* DFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/DFUServiceInitiator.swift; sourceTree = ""; }; + 77C1DCEAA748BFEF258FEB8998977233 /* iOSDFULibrary-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "iOSDFULibrary-iOS.modulemap"; sourceTree = ""; }; + 78126490128D25ECCD974BF203258C6C /* MBLEulerAngleData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLEulerAngleData.html; path = Docs/html/Classes/MBLEulerAngleData.html; sourceTree = ""; }; + 78169E520778F3CCC6BA3B12B3192ACC /* DFUPeripheralSelector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralSelector.swift; path = iOSDFULibrary/Classes/Implementation/DFUPeripheralSelector.swift; sourceTree = ""; }; + 78512E0CF77AB3829ACF14DFCD5E0A21 /* MBLAccelerometerBoschLowOrHighGEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschLowOrHighGEvent.html; path = Docs/html/Classes/MBLAccelerometerBoschLowOrHighGEvent.html; sourceTree = ""; }; + 78748BDD9FFF9A14842BA5570DF1F905 /* MBLSPIData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLSPIData.html; path = Docs/html/Classes/MBLSPIData.html; sourceTree = ""; }; + 79554846837812E127D72A9CB268E4CF /* Bolts-Swift-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-Swift-macOS.xcconfig"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig"; sourceTree = ""; }; + 7B00126BBCE5E505A3C2E8E01524E2F6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 7BBEADCADB6F366F6932BB5F4999C7EB /* iOSDFULibrary-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "iOSDFULibrary-iOS-dummy.m"; sourceTree = ""; }; + 7BFECE015E2B533FB9709D69122BD1E7 /* MetaWear-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "MetaWear-iOS.modulemap"; sourceTree = ""; }; + 7C5D1E2C3D4937EA68C6088E5822450C /* badge_only.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = badge_only.css; path = Docs/build/html/_static/css/badge_only.css; sourceTree = ""; }; + 7C9F8FC61ED5ED63EE0BC12C2F3B70FA /* _variables.scss */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = _variables.scss; path = Docs/html/css/scss/_variables.scss; sourceTree = ""; }; + 7D23F8746D820815E172F36BAC2CFA22 /* MBLDecimalNumberHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLDecimalNumberHandler.html; path = Docs/html/Blocks/MBLDecimalNumberHandler.html; sourceTree = ""; }; + 7D9FD19B7C8CFDEF53C2D6864760B129 /* task.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = task.cpp; sourceTree = ""; }; + 7DA08702C225F41628CCB9A097606AAD /* MBLVoidHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLVoidHandler.html; path = Docs/html/Blocks/MBLVoidHandler.html; sourceTree = ""; }; + 7E1FE541F8CD2E9742656ACC1C515216 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7E80E1C8291F15526FE0AA13C571F17A /* Bolts-Swift-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Bolts-Swift-macOS.modulemap"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap"; sourceTree = ""; }; + 7EFAEE1DD0D043EEDE1A682E8BE5CA25 /* MBLBarometerBME280Standby.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBarometerBME280Standby.html; path = Docs/html/Constants/MBLBarometerBME280Standby.html; sourceTree = ""; }; + 802BE0A9C05F9821C765A83D502FF677 /* Pods-MetaWearIntegrationTests-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-macOS-frameworks.sh"; sourceTree = ""; }; + 802E04888760B1537AA0B65E4F1EF78C /* MBLAccelerometerOrientation.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerOrientation.html; path = Docs/html/Constants/MBLAccelerometerOrientation.html; sourceTree = ""; }; + 80FDFC1FEED0B4BB45D59B833E3CC0AA /* Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 81181FE2E6CE49A9C329469C5C5DC6F4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 81546B48ED29178160B847633CA7BD47 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig"; sourceTree = ""; }; + 828B24087C6AAF197EF911D9FB2D6672 /* Makefile */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.make; name = Makefile; path = Docs/Makefile; sourceTree = ""; }; + 82CAD8BF247E05BE3819D6EAE4463B4A /* FirmwareBuild.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FirmwareBuild.swift; sourceTree = ""; }; + 82E5A7D22933C28ED44425993F6C7759 /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 83265893F83E49698EDBE65CD6E8CB42 /* dataprocessor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dataprocessor.cpp; sourceTree = ""; }; + 8380A1EF78B30ECA6F9BB67B1FC6B8DD /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig"; sourceTree = ""; }; + 83D0D061B70942D7D21B3F65A7FD29CE /* MBLSensorFusionMode.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLSensorFusionMode.html; path = Docs/html/Constants/MBLSensorFusionMode.html; sourceTree = ""; }; + 84929BD8F880EF879B8F16D92DAC6B50 /* MBLErrorBlock.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLErrorBlock.html; path = Docs/html/Blocks/MBLErrorBlock.html; sourceTree = ""; }; + 84CEDD0976BEF72826B195E5577F9940 /* MBLAmbientLightLTR329Integration.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAmbientLightLTR329Integration.html; path = Docs/html/Constants/MBLAmbientLightLTR329Integration.html; sourceTree = ""; }; + 84FA3557295165787949D6D36AC9699A /* SecureDFUPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPacket.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/SecureDFUPacket.swift; sourceTree = ""; }; + 857A49B325CE1FC467136648CDD25462 /* Pods-MetaWearIntegrationTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-macOS.debug.xcconfig"; sourceTree = ""; }; + 8615C73E8660C084F5B1FF7770B6A10A /* MBLDeltaValueOutput.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLDeltaValueOutput.html; path = Docs/html/Constants/MBLDeltaValueOutput.html; sourceTree = ""; }; + 86E0388FAE85AC6F327B64085E2874AC /* MBLNeopixelStrand.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLNeopixelStrand.html; path = Docs/html/Classes/MBLNeopixelStrand.html; sourceTree = ""; }; + 8706F18B8F3CDE019087AE1B20857249 /* ajax-loader.gif */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.gif; name = "ajax-loader.gif"; path = "Docs/build/html/_static/ajax-loader.gif"; sourceTree = ""; }; + 872DC736B9BC7971029F0575FB5ADDCE /* Bolts-Swift-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-macOS-prefix.pch"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch"; sourceTree = ""; }; + 877A85E3E0BF54E52BF701108B14C637 /* ioapi.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = ioapi.c; path = Zip/minizip/ioapi.c; sourceTree = ""; }; + 87B23CA6B555C2D2E459958935BB5610 /* MetaWearScanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MetaWearScanner.swift; sourceTree = ""; }; + 88A851CD3BC5965A003619E9FCE7C8F7 /* Bolts-Swift-watchOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-Swift-watchOS-dummy.m"; path = "../Bolts-Swift-watchOS/Bolts-Swift-watchOS-dummy.m"; sourceTree = ""; }; + 88DEA0BED980E224B35BACC8CDC6A84A /* LegacyDFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUService.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Services/LegacyDFUService.swift; sourceTree = ""; }; + 890AB877953EF60E5615B9AE04D485F7 /* multichanneltemperature.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = multichanneltemperature.cpp; sourceTree = ""; }; + 8921E73C47A7033F211248D94A0E4F97 /* MetaWearData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MetaWearData.swift; sourceTree = ""; }; + 89A8070752394806C2ECAED7E9258000 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 8B44FFC3E844745DB54F8F901F4CC117 /* MBLArrayHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLArrayHandler.html; path = Docs/html/Blocks/MBLArrayHandler.html; sourceTree = ""; }; + 8B57E16E0559EF261C49CD6ED9BD11B9 /* script.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = script.js; path = Docs/html/js/script.js; sourceTree = ""; }; + 8B75BB7F4B860A1FD268AAA86C08F840 /* Zip-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Zip-macOS-dummy.m"; path = "../Zip-macOS/Zip-macOS-dummy.m"; sourceTree = ""; }; + 8C2EC55135D596343E0DB64B3D2C31D2 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h"; sourceTree = ""; }; + 8C5C6DFB62084D2404EBF1C9A10B7C9D /* DFUServiceSelector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceSelector.swift; path = iOSDFULibrary/Classes/Implementation/DFUSelector/DFUServiceSelector.swift; sourceTree = ""; }; + 8CCC781F822557D57EC68EEAA7AA8410 /* gen_api_reference.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; name = gen_api_reference.sh; path = Docs/gen_api_reference.sh; sourceTree = ""; }; + 8CD5FF81C06773E0C0B179E63CAD2F9D /* switch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = switch.cpp; sourceTree = ""; }; + 8CF7DEF4AB8BB21EF312CE14AD791082 /* objects.inv */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = objects.inv; path = Docs/build/html/objects.inv; sourceTree = ""; }; + 8D86AF3C0BEFEFD447E283E23DFFBFF1 /* style.scss */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = style.scss; path = Docs/html/css/scss/style.scss; sourceTree = ""; }; + 8D99AB5185B5A18A44E9A6737B20577C /* MBLRegister.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLRegister.html; path = Docs/html/Classes/MBLRegister.html; sourceTree = ""; }; + 8D9F6E07B310AD2A19E55F6D09AB5096 /* DFUStarterPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStarterPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/DFUSelector/DFUStarterPeripheral.swift; sourceTree = ""; }; + 8DBA77DDE41335EE5A80363F57028783 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWear-macOS/Info.plist"; sourceTree = ""; }; + 8E05445F23AC388AD0C5B7286F5C3FB4 /* RobotoSlab-Regular.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "RobotoSlab-Regular.ttf"; path = "Docs/build/html/_static/fonts/RobotoSlab-Regular.ttf"; sourceTree = ""; }; + 8E84CFA4C7336D7F5632BACC5471B88C /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8E8FA59A59519F6DB0472AB4DA158B04 /* LegacyDFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheralDelegate.swift; sourceTree = ""; }; + 8F92E58A3F6AB05594E04E312A87C225 /* IntelHex2BinConverter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IntelHex2BinConverter.m; path = iOSDFULibrary/Classes/Utilities/HexToBinConverter/IntelHex2BinConverter.m; sourceTree = ""; }; + 8FB95CF28FEFDF373A66C344F5C15874 /* crc32.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = crc32.swift; path = iOSDFULibrary/Classes/Utilities/crc32.swift; sourceTree = ""; }; + 90C20DFE18FB7A6936DD7E4A628B5621 /* macro.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = macro.cpp; sourceTree = ""; }; + 9160164C2E7AE75FC2BE3F71A71CFB65 /* Bolts-Swift-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-Swift-tvOS-dummy.m"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m"; sourceTree = ""; }; + 91B5F3A78CA0EF18C4C671C01D1D8DD5 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh"; sourceTree = ""; }; + 9239C764D1933DCCBA6A7EC6D5CF4612 /* title_background.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = title_background.png; path = Docs/html/img/title_background.png; sourceTree = ""; }; + 92A8288C71F90961F65F4365A191DAEC /* Zip-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Zip-iOS.modulemap"; sourceTree = ""; }; + 92D4723CD9F80E1CBD10BB878B33199B /* fontawesome-webfont.woff2 */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "fontawesome-webfont.woff2"; path = "Docs/build/html/_static/fonts/fontawesome-webfont.woff2"; sourceTree = ""; }; + 92D99E333EB4C58D0F8D5F9869B15FBD /* Pods-MetaWearIntegrationTests-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWearIntegrationTests-tvOS.modulemap"; sourceTree = ""; }; + 9334FCD6A7AACF6835FD3F779309FA4D /* DFUStream.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStream.swift; path = iOSDFULibrary/Classes/Utilities/Streams/DFUStream.swift; sourceTree = ""; }; + 9351F17519CF4667C5A9F4ED278C4D26 /* down.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = down.png; path = Docs/build/html/_static/down.png; sourceTree = ""; }; + 93561C60735D757CFEB0726C4B0B10A6 /* MBLModule.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLModule.html; path = Docs/html/Classes/MBLModule.html; sourceTree = ""; }; + 936451DCEA13546D6BE6E5FFA458347C /* MBLConnectionState.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLConnectionState.html; path = Docs/html/Constants/MBLConnectionState.html; sourceTree = ""; }; 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 93C0E0581DAD528234FCEE879C73103C /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 93EAE20DC31EBE286C11FBC0F8E11117 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m"; sourceTree = ""; }; - 9415EA9965A6D5B1AEB2660964C616EC /* Pods-MetaWearIntegrationTests-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWearIntegrationTests-tvOS-acknowledgements.plist"; sourceTree = ""; }; - 9447C9E2EE7B1F292D335549BCE3E09E /* MBLAccelerometerMMA8452QFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerMMA8452QFormat.h; sourceTree = ""; }; - 94E08C3E838F46065D9A579E08D26F1F /* MBLModuleMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLModuleMock.h; sourceTree = ""; }; - 9546553D3384341D486A3FAB7C84D155 /* iOSDFULibrary-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "iOSDFULibrary-macOS-prefix.pch"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS-prefix.pch"; sourceTree = ""; }; - 9582ADFE04E59FB00FC2EB1B9CDF781A /* MBLMockPeripheralFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMockPeripheralFactory.h; sourceTree = ""; }; - 95A16C0B5246929397FC32751C828771 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; - 96CC9E4509349DDAC2824D4440B9875E /* SecureDFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Peripheral/SecureDFUPeripheralDelegate.swift; sourceTree = ""; }; - 9742179AAB1CA120568E4E5F3166A262 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap"; sourceTree = ""; }; - 979ACF1F1DE594A63C4BE9F280278332 /* Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 97EED75612896E793A8196DE13BFBA02 /* MBLNumericData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNumericData.m; sourceTree = ""; }; - 984CCC87F279AA94306E80AA33255F86 /* zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = zip.h; path = Zip/minizip/zip.h; sourceTree = ""; }; - 988D40BB92611BCE21D54846268F245A /* MBLAccelerometerBoschRMSFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschRMSFormat.m; sourceTree = ""; }; - 98C47CE1D122703C24105329925CAFB2 /* Bolts-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-tvOS-prefix.pch"; path = "../Bolts-tvOS/Bolts-tvOS-prefix.pch"; sourceTree = ""; }; - 9951ED4CE84E530835A1BBE12C8A58BB /* MBLMagnetometerBMM150.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150.m; sourceTree = ""; }; - 9977E32052A13484C58D0C63FFDC0CFD /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../iOSDFULibrary-macOS/Info.plist"; sourceTree = ""; }; - 9982051824570B77E625938FED58988B /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; - 999087A8E82DEB1645CA98E755D515BA /* Pods_MetaWearIntegrationTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 99C09A3AC008BF7FA56EEB4385A3C3DB /* MBLGyroBMI160PackedDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160PackedDataReadyEvent.m; sourceTree = ""; }; - 9A51D4DCDE886B0384051CC90D92067B /* MBLDispatchQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDispatchQueue.h; sourceTree = ""; }; - 9AA750E66901ECE028D826B3D8DA9552 /* MBLGyroBMI160Format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160Format.h; sourceTree = ""; }; - 9AAFD4E4609EAE8A3637DD8B1CBB0C77 /* MBLMetaWear+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMetaWear+Private.h"; sourceTree = ""; }; - 9AF439C209114525130FC395432345CF /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h"; sourceTree = ""; }; - 9BEBDF15B99A76AB465BBDA0C0529628 /* MBLTestDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTestDebug.h; sourceTree = ""; }; - 9CB89E36AEE3848001C95666AAB53B64 /* MBLAccelerometerBMI160MotionEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMI160MotionEvent.m; sourceTree = ""; }; - 9D144E6E435DBDDDD0D91240069800D3 /* MBLMacro.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMacro.m; sourceTree = ""; }; - 9D97DC608F174F938F952EB74C98E824 /* MBLAccelerometerAxisReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerAxisReadyEvent.h; sourceTree = ""; }; - 9D9F27AC6AB836D9EA2E44026BD96E55 /* Pods-MetaWearIntegrationTests-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWearIntegrationTests-tvOS-acknowledgements.markdown"; sourceTree = ""; }; - 9DA3F69C410FE2F6B0CD19DBB492E7CB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9E17C60212960E5BD204BBD874B9C3A1 /* MBLBarometerBME280.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBME280.h; sourceTree = ""; }; - 9F174995E7374F2FE0CD5EABCA84CBC2 /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 9F35860B6ADC7900C6DAFDBEB2B0EDDA /* MBLDeviceLookup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDeviceLookup.m; sourceTree = ""; }; - 9F5479EAA668064130D02812F59E306C /* MBLProximity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLProximity.m; sourceTree = ""; }; - 9F8F783E140BB600631BF26096F6498C /* bmi160.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bmi160.h; sourceTree = ""; }; - 9FCA26FF093F156E325A7B83CC6F09F3 /* MBLAccelerometerBoschFlatFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFlatFormat.m; sourceTree = ""; }; - A0DAFCFCA37D81B01944B09B50BD2EF8 /* MBLNonVolatileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNonVolatileState.m; sourceTree = ""; }; - A2F0E57E1990CED91D153D6BCA97B4B8 /* mma8452q.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mma8452q.h; sourceTree = ""; }; - A447138E6A37AE547D765D9B8ADC109F /* Bolts-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-tvOS.xcconfig"; path = "../Bolts-tvOS/Bolts-tvOS.xcconfig"; sourceTree = ""; }; - A487D9615078F8F70198C070FAF0058C /* MBLRegister.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLRegister.m; sourceTree = ""; }; - A496183A4668C26A08A67495675B4D7F /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh"; sourceTree = ""; }; - A613E6BF9606CBB4CD455C470297B98A /* FastCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FastCoder.h; path = FastCoder/FastCoder.h; sourceTree = ""; }; - A942A8CCFF9CC397055244A0615C421B /* QuickZip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = QuickZip.swift; path = Zip/QuickZip.swift; sourceTree = ""; }; - A9567FF1928DF11AEA825E0A436250C7 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - A9946177777926628D585F20B3365C41 /* ZipArchive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZipArchive.swift; path = iOSDFULibrary/Classes/Utilities/ZipArchive.swift; sourceTree = ""; }; - A9A428AC43F78AE9A82E6B2E060F3494 /* MBLMockPeripheralFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMockPeripheralFactory.m; sourceTree = ""; }; - AA829F30CBE3BF2C3B818F7939EB917B /* MBLFilter+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLFilter+Private.h"; sourceTree = ""; }; - AA9B5368DD40A1D0D01B94023D7EC72B /* MBLAccelerometerData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerData.h; sourceTree = ""; }; - AB4B55BD141F864F663A2BE6B25969E0 /* MBLCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLCommand.h; sourceTree = ""; }; - ABB225B11C55D8185DACB2639597735A /* FastCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FastCoding.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - ABF694E5002B9296413AA84DDC5B0D02 /* MBLPhotometerTCS3472.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLPhotometerTCS3472.m; sourceTree = ""; }; - AC165D8BECA691BFCA6C6045C8C5762C /* MBLAccelerometerBMA255+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMA255+Private.h"; sourceTree = ""; }; - AC54B32E4666B6C1892004CAB3F5F4F7 /* MBLMetaWearManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMetaWearManager.h; sourceTree = ""; }; - ACA6CFBF6B7B67C7C297FAFFE38AD1F4 /* MetaWearPrivate-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "MetaWearPrivate-macOS.modulemap"; path = "../MetaWearPrivate-macOS/MetaWearPrivate-macOS.modulemap"; sourceTree = ""; }; - ACCF7CA22DE0EE99184FAFF40C4412D1 /* MBLHygrometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLHygrometer+Private.h"; sourceTree = ""; }; - AD6A182159DB824EC701C4F5CECF3593 /* BFTask+MBLExtensions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BFTask+MBLExtensions.h"; sourceTree = ""; }; - AD87D9452AD5DFA34EAE953736420189 /* MBLCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLCommand.m; sourceTree = ""; }; - AD8EF5FF275DB50EA6F98F6CE294C071 /* MBLAccelerometerFreeFallEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerFreeFallEvent.m; sourceTree = ""; }; - ADAF3CB39C8B2D17FB5EB8ABD62A07A9 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap"; sourceTree = ""; }; - AE1010EE66D1FDA5F86AD0D8493B7D87 /* MBLNeopixelStrand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNeopixelStrand.m; sourceTree = ""; }; - AE70D8C3F080CAE5CD2BD059325B35B0 /* MBLGPIOData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIOData.h; sourceTree = ""; }; - AF442C42590A7C1759F86A2C54EE7027 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - AF4CD04C1CA0C935C555B4F0D3E0CFA2 /* MBLBarometerBoschPeriodicPressureEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBoschPeriodicPressureEvent.h; sourceTree = ""; }; - B0054890AF2606207216F2072858B5AE /* SecureDFUPacket.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPacket.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/SecureDFUPacket.swift; sourceTree = ""; }; - B00D1E78C7013DB32308E26A9FD9D26E /* IntelHex2BinConverter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = IntelHex2BinConverter.h; path = iOSDFULibrary/Classes/Utilities/HexToBinConverter/IntelHex2BinConverter.h; sourceTree = ""; }; - B07D1B0B6DF8A01D116A3576CB0F9480 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B15B8B7233158DEF0B3316939ABF9E3B /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown"; sourceTree = ""; }; - B170794DD226B26CAD7042834F2EE58A /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - B1B786E36962E36D6B767C3324078E7D /* MBLBluetoothCentral.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothCentral.h; sourceTree = ""; }; - B1D78E38F964F3EDDA0C7B1B3EF2DA0E /* LegacyDFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUExecutor.swift; sourceTree = ""; }; - B3636860C28B508BB1F56D19BCC6574A /* MBLMagnetometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometer.h; sourceTree = ""; }; - B3A0F41A9C9F3D4A6BAEE5B16DA8E124 /* MBLMockUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMockUtils.m; sourceTree = ""; }; - B49F585CCFF6430654E83FD8277557F7 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - B4C74EF9EB41D6A6C9BFF4EF7F64F663 /* MBLTemperature.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTemperature.h; sourceTree = ""; }; - B5599DBB7CE6CAB36387851BD32B12CA /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; - B61904FA69F262DCB1BBB472F3910237 /* MBLNonVolatileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNonVolatileState.h; sourceTree = ""; }; - B661370B50F2E66A283AEFD0060A25D5 /* MBLBluetoothCentralMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothCentralMock.h; sourceTree = ""; }; - B6E223E489B7EAE8996BDDE53C67E45F /* iOSDFULibrary-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "iOSDFULibrary-macOS-dummy.m"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS-dummy.m"; sourceTree = ""; }; - B702BC7B58A912AAF4251270635CF62A /* ManifestFirmwareInfo.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ManifestFirmwareInfo.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/ManifestFirmwareInfo.swift; sourceTree = ""; }; - B7936CE338860DFA286D2DF6F83BB0E4 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; - B90E3A5C2959459174C720292B111ACD /* MBLDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDeviceInfo.h; sourceTree = ""; }; - B9676FFAADD54AD787A3022BA543B95D /* MBLFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFilter.m; sourceTree = ""; }; - BAD999AF844115DA8A50A968030408C1 /* MBLAccelerometerBMI160+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMI160+Private.h"; sourceTree = ""; }; - BB0992D5084797FE10F678A4D2FE31D2 /* MBLStringData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLStringData.m; sourceTree = ""; }; - BB2393946755F5852638E025B4E4DCAE /* Pods-MetaWearIntegrationTests-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-macOS.debug.xcconfig"; sourceTree = ""; }; - BB3630C4C23448737131CCDFA574952F /* MBLDataSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDataSwitch.m; sourceTree = ""; }; - BB3F32928EB651F4C4CE72952F313C1F /* MetaWearPrivate-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MetaWearPrivate-iOS-prefix.pch"; sourceTree = ""; }; - BBA69F3B3472ABC188162666FEA7E552 /* MBLAccelerometerMMA8452QFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerMMA8452QFormat.m; sourceTree = ""; }; - BBC4EE879733B6643D4330B3DC8C441E /* MetaWearPrivate-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWearPrivate-macOS.xcconfig"; path = "../MetaWearPrivate-macOS/MetaWearPrivate-macOS.xcconfig"; sourceTree = ""; }; - BBD2CD5AC9C224EF7A5EC8606ACED6BE /* MBLAccelerometerBMI160.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMI160.h; sourceTree = ""; }; - BBD9064F331E787EA528361CC49E519D /* Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BBFA2A124C5CF5541408059671A33F65 /* MBLAccelerometerBMI160StepEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMI160StepEvent.m; sourceTree = ""; }; - BC3CE63F66ACC9ECA525B2C889395E9B /* MBLAccelerometerBoschFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFormat.m; sourceTree = ""; }; - BC7EC23F7DA1F1EF030CBD0B82701411 /* MBLOnDieTemperature0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLOnDieTemperature0.h; sourceTree = ""; }; - BC8E5506693A8AD4210AFC4F04630DB5 /* MBLSPIData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLSPIData.m; sourceTree = ""; }; - BCC9170647CEAB49B708B47C9BD11B38 /* Zip-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Zip-iOS.xcconfig"; sourceTree = ""; }; - BD464CA835615E18659BEB5C94E2000D /* MBLQuaternionData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLQuaternionData.h; sourceTree = ""; }; - BF2E767804BD42B576C2524C72D082F7 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh"; sourceTree = ""; }; - BF37B13956F515D176ED1150BBA2BF23 /* MBLTemperature+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLTemperature+Private.h"; sourceTree = ""; }; - BF5BC13734A7063650C064D4527068B9 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; - BFC36007D603EB397A8D9F35CABC6E62 /* Zip-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Zip-iOS-dummy.m"; sourceTree = ""; }; - BFE41FD08D80647E835161681D60921A /* MBLANCSEventData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLANCSEventData+Private.h"; sourceTree = ""; }; - C00606375314EB5180797E7794603591 /* MBLAccelerometerBMI160StepEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMI160StepEvent.h; sourceTree = ""; }; - C0B574039288B136D02D4D4AA7A41748 /* DFUStarterPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUStarterPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/DFUSelector/DFUStarterPeripheral.swift; sourceTree = ""; }; - C0EFF565875ED8594A6CA0453C6B76FF /* FastCoding-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FastCoding-macOS-dummy.m"; path = "../FastCoding-macOS/FastCoding-macOS-dummy.m"; sourceTree = ""; }; - C0F1DD0100FE7F87C5D186A165C20E9B /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh"; sourceTree = ""; }; - C1EDCB210888571A4674E8E85C415DAC /* MBLAccelerometerBosch+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBosch+Private.h"; sourceTree = ""; }; - C1EF115116AB8B59067199C1E099CC9E /* Zip-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Zip-iOS-prefix.pch"; sourceTree = ""; }; - C23EE3F1FACF9A4C1ACF113B7106D470 /* MBLAccelerometerMMA8452QOrientationFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerMMA8452QOrientationFormat.h; sourceTree = ""; }; - C31C3C37A5B28C48919E378674655A95 /* MBLI2CData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLI2CData.h; sourceTree = ""; }; - C3F37BD6E8C1B5B209223A4403C6820B /* MBLAccelerometerBoschTapEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschTapEvent.h; sourceTree = ""; }; - C3FF22CA55CEDA7F854443FF7BDB86C8 /* MBLData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLData.m; sourceTree = ""; }; - C44502A1C3E2BDFC2E9944376182C74D /* MBLLoggingV0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLoggingV0.m; sourceTree = ""; }; - C4D3E8D3552BF4D21F94B06673BDD0F3 /* Zip-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Zip-macOS-umbrella.h"; path = "../Zip-macOS/Zip-macOS-umbrella.h"; sourceTree = ""; }; - C5038CCCAD9C3B1597C329422A04A10F /* MBLBarometerBosch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBosch.m; sourceTree = ""; }; - C590EB5B1CE87FD3A67FA18AF43053D9 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh"; sourceTree = ""; }; - C5B0A790FBDDC8943DD967E22F5E6484 /* MBLBarometerBMP280.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBMP280.m; sourceTree = ""; }; - C5C3D444B2477CF94813F5793A553734 /* FastCoding-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding-tvOS-prefix.pch"; path = "../FastCoding-tvOS/FastCoding-tvOS-prefix.pch"; sourceTree = ""; }; - C5DE43A24BC32E8EE90C94105AF19F80 /* MBLAccelerometerMMA8452Q+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerMMA8452Q+Private.h"; sourceTree = ""; }; - C68ED4B0184AB99F750D04E9F54595CB /* LegacyDFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUServiceInitiator.swift; sourceTree = ""; }; - C6DE6A5AC0A49A3E487037A11D03F9E0 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - C6EF3DD06DCF465CB6B9BF1E1C048270 /* MBLGyroBMI160PackedDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160PackedDataReadyEvent.h; sourceTree = ""; }; - C778CE095A0DBF3235157B58561F1329 /* MBLGyroBMI160AxisReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160AxisReadyEvent.m; sourceTree = ""; }; - C78C6DCAA18927FE63D0D8C43B0CFF2F /* MBLRegister.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLRegister.h; sourceTree = ""; }; - C830F6C50185B585F4EB59E43DC8DD8F /* MBLGyroData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroData.h; sourceTree = ""; }; - C8A8C332D979B4ADF41ED76152831508 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../FastCoding-macOS/Info.plist"; sourceTree = ""; }; - C8C11128C262C180924828B3A2D0A19B /* Bolts-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-macOS-dummy.m"; path = "../Bolts-macOS/Bolts-macOS-dummy.m"; sourceTree = ""; }; - C8D814FF23AF9233769F9E031893135E /* Pods-MetaWearIntegrationTests-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWearIntegrationTests-iOS-acknowledgements.plist"; sourceTree = ""; }; - C926B3FBE54B3DF99DD7B12C0402933C /* Pods-MetaWearIntegrationTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-iOS.release.xcconfig"; sourceTree = ""; }; - C9D693443D18F04CD16EC8D21B3265B7 /* MBLI2CData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLI2CData+Private.h"; sourceTree = ""; }; - CA1245D808F6BCC15B8A902CE557F9AA /* MBLMechanicalSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMechanicalSwitch.m; sourceTree = ""; }; - CA2B309AECBFE6D4E1FAC166D236C338 /* MBLMagnetometerData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerData.m; sourceTree = ""; }; - CC2590BCF019C29AF98FD6A75EDBCABA /* Pods-MetaWearIntegrationTests-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-iOS-resources.sh"; sourceTree = ""; }; - CCE5B9B41483C36E8C622F930C9310BB /* MBLAccelerometerBoschOrientationEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschOrientationEvent.m; sourceTree = ""; }; - CD80956417A14D56D8D27D71A192F8DA /* MBLMetaWearManager+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMetaWearManager+Private.h"; sourceTree = ""; }; - CD82AD8A7C657338F4987435E20EB388 /* MBLNumericFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNumericFormatter.h; sourceTree = ""; }; - CDC48CA96245E09799A29D95AD8C8C71 /* MBLTimerEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTimerEvent.h; sourceTree = ""; }; - CDE37A784C87668D3E890C6704A31321 /* MBLTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTimer.m; sourceTree = ""; }; - CE1EDADCFE8155984972FD1A2B4CFD4F /* MBLDeviceLookup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDeviceLookup.h; sourceTree = ""; }; - CE96572C4CF67BCAD56B742C54A03FEC /* FastCoding-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FastCoding-iOS-dummy.m"; sourceTree = ""; }; - CF11CDDD171CAD8715AD95DFF1BF1992 /* MBLFirmwareUpdateInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFirmwareUpdateInfo.h; sourceTree = ""; }; - CF73187F3F6E0F4E6FC6E5710081DBA4 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - CF9F74DB820671AFBE5EF84A20FFF98A /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig"; sourceTree = ""; }; - D015AFF3E32DB592E65FF30976F85E80 /* MBLMagnetometerData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerData.h; sourceTree = ""; }; - D0942491B7067C7470A15A264D186D4D /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - D09F8208C59945BF9BCA2E29C547665D /* MBLQuaternionData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLQuaternionData.m; sourceTree = ""; }; - D0FED9CA66384F76DECF70F875B7267B /* MBLDataSample+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLDataSample+Private.h"; sourceTree = ""; }; - D2123231BBE668070DC5FD64138BA715 /* MBLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLogger.h; sourceTree = ""; }; - D2182E483FD05DCE8941DE26DA14FE7A /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m; sourceTree = ""; }; - D2A0C4EBC219C36288D8D895258EAB81 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist"; sourceTree = ""; }; - D382C7ED86B3A4044E9BC7FE7B808E0C /* MBLSerial+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLSerial+Private.h"; sourceTree = ""; }; - D40F487EB7317900E4F1BE3F5E7C3240 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - D4C71EC1407F5E40D46788C5806EBAC1 /* MBLAmbientLight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAmbientLight.h; sourceTree = ""; }; - D57BE345C3B103A8511DD25E291757E4 /* MBLHapticBuzzer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLHapticBuzzer.m; sourceTree = ""; }; - D633E42D18A3857B8B2BFD7976D967DC /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap"; sourceTree = ""; }; - D638CE0D4E71C4047F8878745F8486D7 /* MBLAccelerometerBoschAxisReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschAxisReadyEvent.h; sourceTree = ""; }; - D71F96F841281B595282C44BF5FF857F /* MBLBluetoothPeripheralMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBluetoothPeripheralMock.m; sourceTree = ""; }; - D7967BAF7931F027BAE955610A758EE9 /* iOSDFULibrary-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSDFULibrary-iOS-prefix.pch"; sourceTree = ""; }; - D7A2BBD6DD7144921CBFA24FE2770E9C /* MBLDispatchQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDispatchQueue.m; sourceTree = ""; }; - D7CEF79F64A30505A4E517BC428854FA /* MBLMacAddressFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMacAddressFormat.h; sourceTree = ""; }; - D7EAC0BC994FB7611A298DE937C3E8BF /* IntelHex2BinConverter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = IntelHex2BinConverter.m; path = iOSDFULibrary/Classes/Utilities/HexToBinConverter/IntelHex2BinConverter.m; sourceTree = ""; }; - DA2F44F7E9F9EE61C3C5A26ED8A8050C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - DA6E5CE6CE505DF838D77C452AD13B6F /* MBLAccelerometerBoschPackedDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschPackedDataReadyEvent.m; sourceTree = ""; }; - DA9014116B9939EB265A41191D67F069 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.modulemap"; sourceTree = ""; }; - DABD5D15B57D8F075CA743D1528D890E /* MBLLoggingV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLoggingV1.h; sourceTree = ""; }; - DB5898A42A321FD0618A921C0E77E8A4 /* MBLAccelerometerBoschTapEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschTapEvent+Private.h"; sourceTree = ""; }; - DBCEE7FBDB19D37FCD244D897C836B59 /* MBLMacro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMacro.h; sourceTree = ""; }; - DBFEE45C1C99E983F9455CFCCD543E36 /* MetaWearPrivate-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "MetaWearPrivate-iOS.modulemap"; sourceTree = ""; }; - DC0744A2E6338C410DA551C06E11E55C /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist"; sourceTree = ""; }; - DC7D0B2E65A380068EC3FEF2957C2A44 /* MBLAccelerometerAxisReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerAxisReadyEvent.m; sourceTree = ""; }; - DD6729180F6F0B1CF1BAD9E58FF09B2D /* FastCoding-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; name = "FastCoding-macOS.modulemap"; path = "../FastCoding-macOS/FastCoding-macOS.modulemap"; sourceTree = ""; }; - DE30062ABD960E8C08676300ACD20D29 /* MBLEulerAngleData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEulerAngleData.m; sourceTree = ""; }; - DF122BCA44DEBD8F20F96652F7A2EA94 /* MBLAccelerometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometer+Private.h"; sourceTree = ""; }; - DF37D3E8E70A2D9EE860B2877A1F368D /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - DF6C7C2B5B872E4AF65C6CF01BEBE459 /* DFUControlPoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUControlPoint.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUControlPoint.swift; sourceTree = ""; }; - DF8E3C12A71CB3E4174655FDA95A0093 /* MBLBarometerBoschPeriodicPressureEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBoschPeriodicPressureEvent.m; sourceTree = ""; }; - DFD327E643DD1A34007F37CE8094CEE1 /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - E093B6225A0D37B00C1C5B9CD123B21E /* DFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/DFUServiceInitiator.swift; sourceTree = ""; }; - E122F691BE8C2320CFFA602948F9C652 /* MBLDataSample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDataSample.h; sourceTree = ""; }; - E16579A392E68FDA1887AE338EF23A3A /* MBLBitmaskEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBitmaskEvent.h; sourceTree = ""; }; - E16E857553131544D16A9490053C5F07 /* MBLAnonymousEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAnonymousEvent.m; sourceTree = ""; }; - E1A24E34E7C4C5E621D62C5156E3F752 /* MBLAccelerometerBoschFlatEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschFlatEvent+Private.h"; sourceTree = ""; }; - E1F99EA3788B5E9782EFAD09BB202F11 /* MBLFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFormat.h; sourceTree = ""; }; - E204C43B60ED89EA350BB1CAE65A6551 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh"; sourceTree = ""; }; - E2973DEE2198C544E205D3FB1EEE9C59 /* MBLHygrometerBME280PeriodicHumidityEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLHygrometerBME280PeriodicHumidityEvent.m; sourceTree = ""; }; - E2A407E8B8FCC68152BFE4827C4D30C3 /* Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig"; sourceTree = ""; }; - E33E51117A7906AD725BC5896DAF7AB9 /* MBLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLogger.m; sourceTree = ""; }; - E3423964A8005D7B6EFA277C19C0AD04 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh"; sourceTree = ""; }; - E3AD1BAB629ECA814247A5E73B8CD685 /* MBLEulerAngleData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEulerAngleData.h; sourceTree = ""; }; - E4682D51E341672CE83B830F1F7E405E /* MBLPhotometerTCS3472Format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLPhotometerTCS3472Format.h; sourceTree = ""; }; - E4B1A1FBAE850F03A849FAD0119AB5B4 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - E4CFCB7B9A81296DDC19BE717B547395 /* MBLAccelerometerBMI160MotionEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMI160MotionEvent+Private.h"; sourceTree = ""; }; - E4EDFCEE5B72864E7DA91A1762E564CD /* MBLMagnetometerBMM150.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerBMM150.h; sourceTree = ""; }; - E4EE35E05B06402DE0951FDFC4AF4A9C /* MBLMagnetometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMagnetometer+Private.h"; sourceTree = ""; }; - E5D6598CDDBF33488FC69B5DFF58C57C /* MBLPhotometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLPhotometer.m; sourceTree = ""; }; - E636B03D39B8D1267925102A2AFFAFC9 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; - E65129647907D6602565EDEA64B50EC5 /* MBLNeopixelStrand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNeopixelStrand.h; sourceTree = ""; }; - E72170D3AC6D512DCC948B28D038E74F /* SecureDFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Peripheral/SecureDFUPeripheral.swift; sourceTree = ""; }; - E7B3B505C3DF2A9686DA9127CE950FA0 /* Bolts-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-macOS-prefix.pch"; path = "../Bolts-macOS/Bolts-macOS-prefix.pch"; sourceTree = ""; }; - E7D602B321217BDA6117F5D3E8535B0F /* Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E83EF69901AB4A54B1F0F417FF13BF56 /* MBLDependentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDependentData.m; sourceTree = ""; }; - E8B316769B25CA5CFF1037BB6E6C5DFA /* BFTask+MBLExtensions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BFTask+MBLExtensions.m"; sourceTree = ""; }; - E927F7FE18500C742246D5144E4869AD /* MBLConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLConversion.h; sourceTree = ""; }; - E95B4734AA96D0221CFDDE954406F997 /* MBLAccelerometerShakeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerShakeEvent.h; sourceTree = ""; }; - E973F3314FC759A38CF4BA61101BB3BF /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - E9A04EC0A77D40BFA9A26340EBD99D8C /* MBLProximityTSL2671.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLProximityTSL2671.m; sourceTree = ""; }; - EA36C50735014AE4014007C7F1826E08 /* Zip.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Zip.swift; path = Zip/Zip.swift; sourceTree = ""; }; - EA8956DD984CD12941D9C8124A4C9C11 /* MBLDataProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDataProcessor.h; sourceTree = ""; }; - EAAE3E2C5294FB4D702F158809A0913D /* MBLAccelerometerPackedDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerPackedDataReadyEvent.m; sourceTree = ""; }; - EB0F3127CA80D2F446D1A1CAAF111A24 /* MBLQuaternionFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLQuaternionFormat.m; sourceTree = ""; }; - EB1D49F95D43D02E56017B6BC3737041 /* MBLGPIOPinChangeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIOPinChangeEvent.h; sourceTree = ""; }; - EB5771483BE42EC3D5F131B912DD7DF2 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h; sourceTree = ""; }; - EBA10E6994425E3176CC4206DFB8741C /* MBLAccelerometerBoschRMSFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschRMSFormat.h; sourceTree = ""; }; - EBEC212D44D43B47238899E8C471B834 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist"; sourceTree = ""; }; - EC3D3272810170DC75367A98CF7776DB /* Pods-MetaWearIntegrationTests-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-iOS.debug.xcconfig"; sourceTree = ""; }; - ECE2D48F521913315EA2CAD6D1DBFD62 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh"; sourceTree = ""; }; - ED7F0459D000BE9D78FF3F5B0B65825E /* FastCoding-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "FastCoding-iOS.xcconfig"; sourceTree = ""; }; - EDA1A8E4F627CEA9CA9B633568C2F524 /* MBLExternalThermistor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLExternalThermistor.m; sourceTree = ""; }; - EE604D5D1F79811D66866CD63073922E /* LegacyDFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUService.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/Services/LegacyDFUService.swift; sourceTree = ""; }; - EEE2C38FE1144B7A77E1150FCC48FF3A /* MBLProximityTSL2671.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLProximityTSL2671.h; sourceTree = ""; }; - EF440399F90D6B4DB44A6BA3387CC979 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - EFC64ABBE5E34175B525CC0AF9B7AD46 /* MBLSettings+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLSettings+Private.h"; sourceTree = ""; }; - F010B45A4744AEA32F8622B4D117B191 /* Pods-MetaWearIntegrationTests-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Pods-MetaWearIntegrationTests-macOS.modulemap"; sourceTree = ""; }; - F013CA0DDB1E61B01BB7F12437CE8D85 /* iOSDFULibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iOSDFULibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F12B911756D24E4437801B5DC7B003EC /* MBLAccelerometerBoschPackedDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschPackedDataReadyEvent.h; sourceTree = ""; }; - F1950DB31EFF9511CAAD020DE490A290 /* MBLFirmwareBuild.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFirmwareBuild.m; sourceTree = ""; }; - F30B2B3B63182A49C671A0BBD1815F0A /* Pods-MetaWearIntegrationTests-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-iOS-frameworks.sh"; sourceTree = ""; }; - F352EEA80E24C897DFE65410ECEBAF80 /* MBLAnonymousEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAnonymousEvent+Private.h"; sourceTree = ""; }; - F36840C4CAE22288200B199380FC8D63 /* MetaWearPrivate-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWearPrivate-tvOS-umbrella.h"; path = "../MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-umbrella.h"; sourceTree = ""; }; - F3A1010153F1DDFAD7D18AAAB73FE5EF /* ButtonlessDFU.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonlessDFU.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/ButtonlessDFU.swift; sourceTree = ""; }; - F3F34062091C9404748734E16CBEE8CF /* iOSDFULibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iOSDFULibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - F452562548AA032277EDAF36A3C1F4EA /* MBLNeopixelStrand+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLNeopixelStrand+Private.h"; sourceTree = ""; }; - F45A66ECEBA284E996860512FB072EDA /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - F611D503A35A2C29A17EFE78CFEA593D /* MBLSensorFusion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLSensorFusion.m; sourceTree = ""; }; - F618C9DF00DDF47D5EEEAAFDFC613948 /* MBLI2C.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLI2C.h; sourceTree = ""; }; - F61ADA81358BD29F6A7666B1BE1781D5 /* Zip-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "sourcecode.module-map"; path = "Zip-iOS.modulemap"; sourceTree = ""; }; - F6D3364746F3DED3DE07DF2BE018E314 /* MBLBarometerBosch+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLBarometerBosch+Private.h"; sourceTree = ""; }; - F8377C35EAFAB0104A5A3DD36FB8ECE5 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist"; sourceTree = ""; }; - F874621735C718745BB4247927DBB372 /* MBLModuleInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLModuleInfo.h; sourceTree = ""; }; - F906C88D677F6440EA3F1A5FA691E7D4 /* MBLAccelerometerBoschOrientationFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschOrientationFormat.m; sourceTree = ""; }; - F9243C73A502B4C0654BF88F02CF9732 /* BFTask+MBLPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BFTask+MBLPrivate.m"; sourceTree = ""; }; - F950DFDB30AD3DFE41EBB7542B85C70A /* DFUService.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUService.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUService.swift; sourceTree = ""; }; - F9C227AA6932602ED1E3B2AFC30A1D10 /* MBLAccelerometerDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerDataReadyEvent.m; sourceTree = ""; }; - FB1D3BBE2E126BC29F81415209EF8F1A /* BFTask+Exceptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Exceptions.m"; path = "Bolts/Common/BFTask+Exceptions.m"; sourceTree = ""; }; - FB298BFE18C28B6FEF04976E7FCEF422 /* Pods-MetaWearIntegrationTests-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-macOS-frameworks.sh"; sourceTree = ""; }; - FB441AC5891DDB749070A4DEC74B4B13 /* iOSDFULibrary-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "iOSDFULibrary-macOS.xcconfig"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS.xcconfig"; sourceTree = ""; }; - FB5582120CF0EA27230E08D94D529650 /* DFUServiceSelector.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceSelector.swift; path = iOSDFULibrary/Classes/Implementation/DFUSelector/DFUServiceSelector.swift; sourceTree = ""; }; - FBB66D000CC25B48165954C2C99799DF /* MBLModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLModule.m; sourceTree = ""; }; - FC4EDA409628927FB17680F4F9C569F2 /* Bolts-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-macOS.xcconfig"; path = "../Bolts-macOS/Bolts-macOS.xcconfig"; sourceTree = ""; }; - FC6612B69C9D0CE8EE2D7A066A56C221 /* MBLRegister+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLRegister+Private.h"; sourceTree = ""; }; - FD0678238589E8C13FE790345E57C574 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m"; sourceTree = ""; }; - FD5DC3572BFE19B2936387A0FACF2149 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschLowOrHighGEvent+Private.h"; sourceTree = ""; }; - FE0D8515949C9861487F28B146EEA3C0 /* MBLLED.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLED.h; sourceTree = ""; }; - FE6E81CB78094B771484EE152018C0A1 /* MetaWearPrivate-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MetaWearPrivate-iOS.xcconfig"; sourceTree = ""; }; - FE796D43C89FDC00CA2F72795FB07D9D /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FE8969BAE4E23F3DFE16E1BD087E5A9D /* MBLBluetoothPeripheral.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothPeripheral.h; sourceTree = ""; }; - FEC56A03F55AA17876748C41D7F7F9F3 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FECFBC4F9F95E5A09CC21E2F8A80B38E /* MBLEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEvent.m; sourceTree = ""; }; - FFFD05307348ED7C574EF3859B422B0B /* MBLAccelerometerBoschTapEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschTapEvent.m; sourceTree = ""; }; + 93F964DDAC8BD026D683BF54FD168B21 /* Double.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Double.swift; path = iOSDFULibrary/Classes/Utilities/Double.swift; sourceTree = ""; }; + 9459F36E351F7D12D8B731211B9BD030 /* Bolts-Swift-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-tvOS-prefix.pch"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch"; sourceTree = ""; }; + 94B0F7A8ADAFE2D840A81E4E98B4B48E /* String+VersionCompare.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+VersionCompare.swift"; sourceTree = ""; }; + 94D6646C95EC7CE601758BE1A79E9ED6 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig"; sourceTree = ""; }; + 953F868403F7599FBC730DE758E31175 /* Pods-MetaWearIntegrationTests-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWearIntegrationTests-macOS-acknowledgements.markdown"; sourceTree = ""; }; + 95445EEF9E827EC8E9F63E655AF31BA2 /* MetaWear-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWear-tvOS.xcconfig"; path = "../MetaWear-tvOS/MetaWear-tvOS.xcconfig"; sourceTree = ""; }; + 956E11F13DF77F8D1720B83F4A6BEF9A /* MetaWear.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MetaWear.swift; sourceTree = ""; }; + 957DC977FA7499B0E2E1A5111013F4EF /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h"; sourceTree = ""; }; + 96FB3E0F7A75B50B55A0226778BDBAE9 /* MBLStrandSpeed.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLStrandSpeed.html; path = Docs/html/Constants/MBLStrandSpeed.html; sourceTree = ""; }; + 97EB2B045A99C2C928869FB0B34B0EAC /* _index.scss */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = _index.scss; path = Docs/html/css/scss/_index.scss; sourceTree = ""; }; + 97FE0428CAC266D6962FC0DDA09AE0C1 /* iOSDFULibrary-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "iOSDFULibrary-macOS.xcconfig"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS.xcconfig"; sourceTree = ""; }; + 9856E8FB8B810E380564A3CA90923D86 /* _print.scss */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = _print.scss; path = Docs/html/css/scss/_print.scss; sourceTree = ""; }; + 985C1BC287B7E62ADEE189880E321831 /* MetaWear-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-macOS-prefix.pch"; path = "../MetaWear-macOS/MetaWear-macOS-prefix.pch"; sourceTree = ""; }; + 99EC49F29652400A0032121DC4C6C174 /* MBLMetaWearManager.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLMetaWearManager.html; path = Docs/html/Classes/MBLMetaWearManager.html; sourceTree = ""; }; + 9A0EA4898D2E15CFDE928E63212D4DC5 /* Zip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Zip.h; path = Zip/Zip.h; sourceTree = ""; }; + 9A25E726BBBDC42DAD5305F6AC627028 /* Pods-MetaWearIntegrationTests-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-iOS.release.xcconfig"; sourceTree = ""; }; + 9AEB96CFB86A8E187868523F74EB566E /* gyro_bmi160.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = gyro_bmi160.cpp; sourceTree = ""; }; + 9B29DCF80EC1B476962ED99AA3B2B470 /* FirmwareServer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FirmwareServer.swift; sourceTree = ""; }; + 9C27F87C7E1F692779C1640071FE108E /* DeviceInformation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeviceInformation.swift; sourceTree = ""; }; + 9D4E5BB449C5462A48E3E2BF7C911B70 /* ioapi.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ioapi.h; path = Zip/minizip/ioapi.h; sourceTree = ""; }; + 9D6FEC3C86DBBC69C0D23FF4C84222E2 /* DFUExecutor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUExecutor.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUExecutor.swift; sourceTree = ""; }; + 9DECAEB140DED8ED1C4C5ED0B66BF79D /* MBLANCSEventData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLANCSEventData.html; path = Docs/html/Classes/MBLANCSEventData.html; sourceTree = ""; }; + 9E942A292BF531CBC63CAC9ADB90ED49 /* humidity_bme280.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = humidity_bme280.cpp; sourceTree = ""; }; + 9EA7628EF4A795EAE5D4D002846CD49E /* MetaWear-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-macOS-umbrella.h"; path = "../MetaWear-macOS/MetaWear-macOS-umbrella.h"; sourceTree = ""; }; + 9EB8744344934AE9EE2BF17D3C397A42 /* SecureDFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Peripheral/SecureDFUPeripheral.swift; sourceTree = ""; }; + 9EF747CE4C8BDB360891F16F7BBDAB15 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h"; sourceTree = ""; }; + 9F0ECCF212202FA663DF384098BAF2B7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 9F649CC7DF130FE79A3D89BB09895F5A /* MBLThresholdValueOutput.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLThresholdValueOutput.html; path = Docs/html/Constants/MBLThresholdValueOutput.html; sourceTree = ""; }; + A0084E9B421EE009FB73F5F108351CE4 /* MBLCorrectedGyroData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLCorrectedGyroData.html; path = Docs/html/Classes/MBLCorrectedGyroData.html; sourceTree = ""; }; + A00BE0BA37A0D4A41C17CC345EEF03A6 /* Bolts-Swift-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Bolts-Swift-tvOS.modulemap"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap"; sourceTree = ""; }; + A0226D49D32B5062FBBD8850B9C86E5F /* MBLMagnetometerBMM150.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLMagnetometerBMM150.html; path = Docs/html/Classes/MBLMagnetometerBMM150.html; sourceTree = ""; }; + A226C67538A554288EF59597D18E6F89 /* MBLRMSAccelerometerData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLRMSAccelerometerData.html; path = Docs/html/Classes/MBLRMSAccelerometerData.html; sourceTree = ""; }; + A30B865D115DD7F25E61ABE2A186A488 /* LegacyDFUServiceInitiator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LegacyDFUServiceInitiator.swift; path = iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUServiceInitiator.swift; sourceTree = ""; }; + A35623B9EF0544A2D8E438A2CD4B76ED /* MBLGPIOPin.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLGPIOPin.html; path = Docs/html/Classes/MBLGPIOPin.html; sourceTree = ""; }; + A428FF06274A10743F084C0FC139B173 /* dfu_operations.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dfu_operations.cpp; sourceTree = ""; }; + A56B08D73511BC75F1F7A6603D469DB0 /* MBLDataSample.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLDataSample.html; path = Docs/html/Classes/MBLDataSample.html; sourceTree = ""; }; + A5AF6AD1FACCAF801B63B1F1F9E784C0 /* MetaWear-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MetaWear-iOS-dummy.m"; sourceTree = ""; }; + A63072581BA7AB4DA69E0FC13BE06A57 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap"; sourceTree = ""; }; + A68505B62486622F416FFE0D5BEFDD46 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.2.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + A7CFC9099267EC880772C85661A5D2BE /* Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig"; sourceTree = ""; }; + A8403836D213E20B9E6DCF6B9B510490 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + A973EDFDFFC64A9B54CEF3EBD264BDB0 /* logging.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = logging.cpp; sourceTree = ""; }; + A9922467199938CE801890DE50A6EFCE /* Pods-MetaWearIntegrationTests-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-iOS-resources.sh"; sourceTree = ""; }; + AA12F25E7F88CF0B20B517FAA9D4DF07 /* button_bar_background.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = button_bar_background.png; path = Docs/html/img/button_bar_background.png; sourceTree = ""; }; + AA27B5203BE6194F6754E1CE038CB1D0 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh"; sourceTree = ""; }; + AA5DA30419B0A544014D9021E46503C2 /* dfu_utility.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dfu_utility.cpp; sourceTree = ""; }; + AACF78CD875F60708898FEC9B8D0F896 /* file.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = file.png; path = Docs/build/html/_static/file.png; sourceTree = ""; }; + AC67A70A32D5AFE893EB3592A7770578 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh"; sourceTree = ""; }; + AD0D98D5F395C66B45D645F2D34DCD97 /* MBLAccelerometerBoschFlatEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschFlatEvent.html; path = Docs/html/Classes/MBLAccelerometerBoschFlatEvent.html; sourceTree = ""; }; + AD577463773AFADC54ADA55DB726687A /* MBLTemperature.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLTemperature.html; path = Docs/html/Classes/MBLTemperature.html; sourceTree = ""; }; + ADC3D7C3F0700C7CC728E7133E62C2AE /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh"; sourceTree = ""; }; + ADF54CB52C3ABCB80505EF30F76268F9 /* BFExecutor+MBLExtensions.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = "BFExecutor+MBLExtensions.html"; path = "Docs/html/Categories/BFExecutor+MBLExtensions.html"; sourceTree = ""; }; + AEA293E22CF366C65AE4B10D380CE65A /* Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AF0D496C0D429A207DAE3A6FDE554FCF /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.markdown"; sourceTree = ""; }; + AF2C5B03ECA79DEBC2F2B50D9D905EFB /* MBLANCSEventFlag.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLANCSEventFlag.html; path = Docs/html/Constants/MBLANCSEventFlag.html; sourceTree = ""; }; + AF6161C0A9C2FBFF67EFB12369DE3F85 /* hierarchy.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = hierarchy.html; path = Docs/html/hierarchy.html; sourceTree = ""; }; + B1219D30097FBEBA3C94B3C30CCDD0EE /* MBLAccelerometerBoschFlatData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschFlatData.html; path = Docs/html/Classes/MBLAccelerometerBoschFlatData.html; sourceTree = ""; }; + B1EC2046690B94B05B26D8412F1702DE /* MBLSensorFusion.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLSensorFusion.html; path = Docs/html/Classes/MBLSensorFusion.html; sourceTree = ""; }; + B30A8904C199C5E7BCDB0709DF06AE8D /* DFUServiceDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceDelegate.swift; path = iOSDFULibrary/Classes/Implementation/DFUServiceDelegate.swift; sourceTree = ""; }; + B35B48A3C2CA07A097D36491B6477526 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h"; sourceTree = ""; }; + B36FC4E48CEE0F33F3231BD8BA112318 /* magnetometer_bmm150.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = magnetometer_bmm150.cpp; sourceTree = ""; }; + B40CF6B087FAD8F23589C6B130F26A2B /* iOSDFULibrary-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "iOSDFULibrary-iOS-umbrella.h"; sourceTree = ""; }; + B4FCE0E7F0E726EB847022BF1BF48A30 /* MBLDeviceInfo.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLDeviceInfo.html; path = Docs/html/Classes/MBLDeviceInfo.html; sourceTree = ""; }; + B5EEE30CA311A653E0730CFD5A60BD45 /* Bolts-Swift-watchOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-watchOS-umbrella.h"; path = "../Bolts-Swift-watchOS/Bolts-Swift-watchOS-umbrella.h"; sourceTree = ""; }; + B64A1AE3BB22076191888EF58A22F449 /* MBLExternalThermistor.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLExternalThermistor.html; path = Docs/html/Classes/MBLExternalThermistor.html; sourceTree = ""; }; + B6D410282D6F5301B98BCB8E0EE4923A /* ScannerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScannerModel.swift; path = MetaWear/UI/ScannerModel.swift; sourceTree = ""; }; + B70E25EA2DB1CFC2D6487AB5F682F08F /* SecureDFUControlPoint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = SecureDFUControlPoint.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/SecureDFUControlPoint.swift; sourceTree = ""; }; + B7D91230EF89EB32D557B88640790C40 /* MBLAccelerometerData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerData.html; path = Docs/html/Classes/MBLAccelerometerData.html; sourceTree = ""; }; + B8116B0DA13696D0ED387F9A8DE7B004 /* RobotoSlab-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "RobotoSlab-Bold.ttf"; path = "Docs/build/html/_static/fonts/RobotoSlab-Bold.ttf"; sourceTree = ""; }; + B81FDC55651EAC43BCE5D7DD163C478A /* MBLAccelerometerAxis.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerAxis.html; path = Docs/html/Constants/MBLAccelerometerAxis.html; sourceTree = ""; }; + B83D13D00BF66865A8AE9CC6CC71891A /* MBLLogLevel.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLLogLevel.html; path = Docs/html/Constants/MBLLogLevel.html; sourceTree = ""; }; + B904E64B2B5A8C9A27EA09B8F935B698 /* underscore.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = underscore.js; path = Docs/build/html/_static/underscore.js; sourceTree = ""; }; + B98C6F46BB0AA3EB2B2A7B07DFD30E7A /* crypt.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = crypt.h; path = Zip/minizip/crypt.h; sourceTree = ""; }; + B9DB7B50CD89784148792030F07C5024 /* jquery.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = jquery.js; path = Docs/build/html/_static/jquery.js; sourceTree = ""; }; + BA50C23F13D67CCE58236F733A0D64FD /* MBLUrlHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLUrlHandler.html; path = Docs/html/Blocks/MBLUrlHandler.html; sourceTree = ""; }; + BAE4FE07E1C3FFEDAAD85F515E91C8EA /* MBLSettings.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLSettings.html; path = Docs/html/Classes/MBLSettings.html; sourceTree = ""; }; + BAFD64F4103B6CA1EEC440CF540C8E32 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m"; sourceTree = ""; }; + BB54CAD0406267890D7E456B18B08CE5 /* MBLConductance.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLConductance.html; path = Docs/html/Classes/MBLConductance.html; sourceTree = ""; }; + BB6565BA5B85EFB397511A3DFD9D7C87 /* Task+WhenAll.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Task+WhenAll.swift"; path = "Sources/BoltsSwift/Task+WhenAll.swift"; sourceTree = ""; }; + BB657E01D53B91E5C2025F409EE79341 /* fontawesome-webfont.eot */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "fontawesome-webfont.eot"; path = "Docs/build/html/_static/fonts/fontawesome-webfont.eot"; sourceTree = ""; }; + BBE21CE54FED38CB658F8DEE794CA269 /* MBLANCS.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLANCS.html; path = Docs/html/Classes/MBLANCS.html; sourceTree = ""; }; + BC035182E4920C4BF68853295F21200C /* ZipArchive.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ZipArchive.swift; path = iOSDFULibrary/Classes/Utilities/ZipArchive.swift; sourceTree = ""; }; + BC34CD80D60AD90CAAAC950FA4031972 /* MBLAccelerometerBoschTapShock.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschTapShock.html; path = Docs/html/Constants/MBLAccelerometerBoschTapShock.html; sourceTree = ""; }; + BC75C820DBE7595868D2C03791739134 /* Pods-MetaWearIntegrationTests-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWearIntegrationTests-macOS-umbrella.h"; sourceTree = ""; }; + BD0766CF780610D401CC416B4E794D12 /* iOSDFULibrary-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "iOSDFULibrary-macOS-umbrella.h"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS-umbrella.h"; sourceTree = ""; }; + BD466D110ED928D07D728E3ED95208F6 /* disclosure_open.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = disclosure_open.png; path = Docs/html/img/disclosure_open.png; sourceTree = ""; }; + BD7470128AE0031029EBF587D53D0BCF /* MetaWear.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; path = MetaWear.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + BDC859CA7938AF835B718231608B3706 /* Bridging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Bridging.swift; sourceTree = ""; }; + BDF39EB8BCD91D9022CA39969105AAFD /* genindex.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = genindex.html; path = Docs/build/html/genindex.html; sourceTree = ""; }; + BE0C4936B67E485798B9FADAEFB3F962 /* iOSDFULibrary-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "iOSDFULibrary-macOS-dummy.m"; path = "../iOSDFULibrary-macOS/iOSDFULibrary-macOS-dummy.m"; sourceTree = ""; }; + BE4E8BF5B5B1A1B4DE5D8C356701F76D /* Bolts-Swift-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Swift-iOS.xcconfig"; sourceTree = ""; }; + BE9ACE81A3CCB7F551207CADFBF0A385 /* Pods_MetaWearIntegrationTests_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BF330D6FE956A1D589D8A8860EA73154 /* MBLI2C.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLI2C.html; path = Docs/html/Classes/MBLI2C.html; sourceTree = ""; }; + BF432B434BADB6E8392DE30A6AB193BA /* Task+ContinueWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Task+ContinueWith.swift"; path = "Sources/BoltsSwift/Task+ContinueWith.swift"; sourceTree = ""; }; + C012ED63F904055460A33B0501436CA3 /* MBLCorrectedMagnetometeData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLCorrectedMagnetometeData.html; path = Docs/html/Classes/MBLCorrectedMagnetometeData.html; sourceTree = ""; }; + C16BD3D9EDD8EB87EE1DC75A24665511 /* comment-bright.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = "comment-bright.png"; path = "Docs/build/html/_static/comment-bright.png"; sourceTree = ""; }; + C431B76C0095B9213F871704369432C3 /* responseheader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = responseheader.cpp; sourceTree = ""; }; + C4441E516BEA95769BFBFB24AF730C0A /* proximity_tsl2671.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = proximity_tsl2671.cpp; sourceTree = ""; }; + C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + C535466B0C74F32D41C301D3558FABCA /* Pods-MetaWearIntegrationTests-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWearIntegrationTests-iOS-acknowledgements.plist"; sourceTree = ""; }; + C5C9D3C7F4ED6D71887257593DC39FAE /* Pods-MetaWearIntegrationTests-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-macOS.release.xcconfig"; sourceTree = ""; }; + C5E1A45818A3870EDDC0C4A0591916DD /* ambientlight_ltr329.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ambientlight_ltr329.cpp; sourceTree = ""; }; + C63B31D3C47772EEA98A3658BFA3929D /* Bolts-Swift-watchOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Bolts-Swift-watchOS.modulemap"; path = "../Bolts-Swift-watchOS/Bolts-Swift-watchOS.modulemap"; sourceTree = ""; }; + C63CC5DD0B1327893C59A98FDD0383A5 /* MBLRGBData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLRGBData.html; path = Docs/html/Classes/MBLRGBData.html; sourceTree = ""; }; + C645D8E39A7F591C903260BB3C48C15A /* dataprocessor_config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dataprocessor_config.cpp; sourceTree = ""; }; + C64F7598BE155DA2BC2937CFAF358BAE /* serialpassthrough.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = serialpassthrough.cpp; sourceTree = ""; }; + C700CA6AED620858A00A8F2BB3B85151 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown"; sourceTree = ""; }; + C718079A817784DC3D82A74838EFD787 /* Bolts-Swift-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-Swift-iOS-prefix.pch"; sourceTree = ""; }; + C743D0A5845E523BA1629F6197814983 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig"; sourceTree = ""; }; + C7B0C5BCD6957DDD27DE75BD1234FA1F /* search.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = search.html; path = Docs/build/html/search.html; sourceTree = ""; }; + C7F15C91EE3979177A6CE2D5466D6B0F /* MetaBootFinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MetaBootFinder.swift; sourceTree = ""; }; + C9AE782CE6D24BD908587C0786B6155B /* MBLNumberHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLNumberHandler.html; path = Docs/html/Blocks/MBLNumberHandler.html; sourceTree = ""; }; + CA149339E7773AFE1CF574C5A0CF422B /* MBLEntityModule.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLEntityModule.html; path = Docs/html/Classes/MBLEntityModule.html; sourceTree = ""; }; + CAE37AE698E88ACAD4DC141A8B285F34 /* MBLAccelerometerCutoffFreq.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerCutoffFreq.html; path = Docs/html/Constants/MBLAccelerometerCutoffFreq.html; sourceTree = ""; }; + CAF2A8E429407A78576C79FC06722F77 /* led.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = led.cpp; sourceTree = ""; }; + CB1E7575441476F45722A743BD2EC13D /* Task+WhenAny.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Task+WhenAny.swift"; path = "Sources/BoltsSwift/Task+WhenAny.swift"; sourceTree = ""; }; + CBA4F653FA6111664B560DC023801ED9 /* MetaWear-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "MetaWear-macOS.modulemap"; path = "../MetaWear-macOS/MetaWear-macOS.modulemap"; sourceTree = ""; }; + CBC155B27976C90466F81D8B0A272CF1 /* MBLPhotometerTCS3472.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLPhotometerTCS3472.html; path = Docs/html/Classes/MBLPhotometerTCS3472.html; sourceTree = ""; }; + CBD239E3C57B4340F230A30612B49C5E /* MBLGyroAxis.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLGyroAxis.html; path = Docs/html/Constants/MBLGyroAxis.html; sourceTree = ""; }; + CC51D8C20E056DD5444916DF631736E6 /* async_creator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = async_creator.cpp; sourceTree = ""; }; + CC6A7883A09EBA7E48C12D70D538AFD3 /* documentation_options.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = documentation_options.js; path = Docs/build/html/_static/documentation_options.js; sourceTree = ""; }; + CC72940F0D96C27CEF22C8C89C1CD22C /* fontawesome-webfont.svg */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xml; name = "fontawesome-webfont.svg"; path = "Docs/build/html/_static/fonts/fontawesome-webfont.svg"; sourceTree = ""; }; + CC9FAFBC7C89F2F3ACF67B02080B1073 /* TaskCompletionSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskCompletionSource.swift; path = Sources/BoltsSwift/TaskCompletionSource.swift; sourceTree = ""; }; + CCA31563A6863A27B0140FFB7937B044 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../iOSDFULibrary-macOS/Info.plist"; sourceTree = ""; }; + CCFA2CA5A3EE62CB726950C4F7E84E44 /* upload.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; name = upload.sh; path = Docs/upload.sh; sourceTree = ""; }; + CE777B23C2FE7FFB36E42E139E276219 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m"; sourceTree = ""; }; + CE9B5E6295C40FF6F99DBC89B1166449 /* minus.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = minus.png; path = Docs/build/html/_static/minus.png; sourceTree = ""; }; + CEC545805D751A5C972ED91D1325FF3F /* MBLProximityTSL2671.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLProximityTSL2671.html; path = Docs/html/Classes/MBLProximityTSL2671.html; sourceTree = ""; }; + CF27EA308EC035F99FD55C80DC6F48A3 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = index.html; path = Docs/index.html; sourceTree = ""; }; + D16DAB578B737936BF6962CF9E54139F /* BFTask.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = BFTask.html; path = Docs/html/Classes/BFTask.html; sourceTree = ""; }; + D1A500B5923AD88C4C0B929AFAC78532 /* MBLNotificationHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLNotificationHandler.html; path = Docs/html/Blocks/MBLNotificationHandler.html; sourceTree = ""; }; + D25EBE53494D758DB3CB78E2403DCCD9 /* doctools.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = doctools.js; path = Docs/build/html/_static/doctools.js; sourceTree = ""; }; + D389E7FF73A3ADA791ECBE58D9048097 /* MBLMagnetometerData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLMagnetometerData.html; path = Docs/html/Classes/MBLMagnetometerData.html; sourceTree = ""; }; + D3FAC3EA41F19EE12F9F6BE054A3E10D /* MetaWear-watchOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWear-watchOS-dummy.m"; path = "../MetaWear-watchOS/MetaWear-watchOS-dummy.m"; sourceTree = ""; }; + D4A3068CC272233F9977BD20929C4132 /* Pods_MetaWearIntegrationTests_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D4EE2A9ECB28B9A3D098F32D9DF9290F /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWearIntegrationTests-tvOS.release.xcconfig"; sourceTree = ""; }; + D4EE765D2C66B8411C822F1EAB9D8727 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D51AA130BE255802CC44122EFBD9D837 /* DFUPeripheralDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheralDelegate.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheralDelegate.swift; sourceTree = ""; }; + D52B44AEC007834C75B70564C1C44875 /* MBLLogRemainingHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLLogRemainingHandler.html; path = Docs/html/Blocks/MBLLogRemainingHandler.html; sourceTree = ""; }; + D60CA57C6B4F75BBDE2638293AEF261D /* MBLAccelerometer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometer.html; path = Docs/html/Classes/MBLAccelerometer.html; sourceTree = ""; }; + D618EA3710D7BC3425F692902AFFEB85 /* MetaWear-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MetaWear-iOS-prefix.pch"; sourceTree = ""; }; + D64A71884F6F13BA5601C13B4DAB2265 /* Manifest.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Manifest.swift; path = iOSDFULibrary/Classes/Utilities/DFUPackage/Manifest/Manifest.swift; sourceTree = ""; }; + D6CF7408C117FC21CEAF3797F9EF592A /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D6EC9B2806D28BF52043D77FBD4563EC /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h"; sourceTree = ""; }; + D6FEF3AAEF8FB2320D371F03FEA1CD56 /* MBLProximityTSL2671TransmitterDrive.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLProximityTSL2671TransmitterDrive.html; path = Docs/html/Constants/MBLProximityTSL2671TransmitterDrive.html; sourceTree = ""; }; + D83DA06622784011EB0A064E16688ADB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/WatchOS.platform/Developer/SDKs/WatchOS3.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + D85291666C9C85CA66AECE892ECB6B54 /* modernizr.min.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = modernizr.min.js; path = Docs/build/html/_static/js/modernizr.min.js; sourceTree = ""; }; + D9BED488100335A367F523F2DAC37E31 /* underscore-1.3.1.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = "underscore-1.3.1.js"; path = "Docs/build/html/_static/underscore-1.3.1.js"; sourceTree = ""; }; + DA457849EC8E8226A65817B1A96B66C1 /* Pods-MetaWearIntegrationTests-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWearIntegrationTests-tvOS-dummy.m"; sourceTree = ""; }; + DAF920DACC755F5344DB7D343E000502 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap"; sourceTree = ""; }; + DAFD906B0F2FCAF1C6DC95634145FB67 /* unzip.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = unzip.h; path = Zip/minizip/unzip.h; sourceTree = ""; }; + DC07C2F3FC0BF05B6E45042BBD2123F7 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h"; sourceTree = ""; }; + DC2E1208907C08474DDD29A908141761 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + DC519413C55CC83EE4CBB41DB666CF3A /* MBLAmbientLightLTR329Rate.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAmbientLightLTR329Rate.html; path = Docs/html/Constants/MBLAmbientLightLTR329Rate.html; sourceTree = ""; }; + DC8B36600B03C65C1E9B5D9474AF9337 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-Swift-watchOS/Info.plist"; sourceTree = ""; }; + DC90AB989D24B251DC6EA37A5E23D723 /* Bolts-Swift-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Bolts-Swift-iOS.modulemap"; sourceTree = ""; }; + DD03A653270B8F24D06ACCC4E7FFA544 /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWearIntegrationTests-tvOS-umbrella.h"; sourceTree = ""; }; + DDB0564C3BCFB74DE96005255A0B8226 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h"; sourceTree = ""; }; + DE2E973AA59062BFB4BC5A0508A4D5F9 /* MBLCorrectedAccelerometerData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLCorrectedAccelerometerData.html; path = Docs/html/Classes/MBLCorrectedAccelerometerData.html; sourceTree = ""; }; + DEAD4BD44E8B10479242DB64BF8E603A /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh"; sourceTree = ""; }; + DED9482F7D81C719B97D07AAE8DE0C20 /* anonymous_datasignal.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = anonymous_datasignal.cpp; sourceTree = ""; }; + DEE317798530342DA8A13844DD62F8F3 /* MBLAccelerometerBoschTapQuiet.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschTapQuiet.html; path = Docs/html/Constants/MBLAccelerometerBoschTapQuiet.html; sourceTree = ""; }; + DFD169C7C8224F15D9C2CF9C37A2B978 /* MBLTimer.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLTimer.html; path = Docs/html/Classes/MBLTimer.html; sourceTree = ""; }; + E04ACC3B28579B1D43C0C14F9515D5EF /* Inconsolata-Bold.ttf */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "Inconsolata-Bold.ttf"; path = "Docs/build/html/_static/fonts/Inconsolata-Bold.ttf"; sourceTree = ""; }; + E117E5E032CDEEA2221232E5DD9CE060 /* Pods-MetaWearIntegrationTests-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWearIntegrationTests-macOS-dummy.m"; sourceTree = ""; }; + E2203FE6F9585852CB77087245E8C6A6 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh"; sourceTree = ""; }; + E23471A307615D81C0E013AA0C031BD9 /* index.rst */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = index.rst; path = Docs/source/index.rst; sourceTree = ""; }; + E2CC13195E4BA07D4E0C45FA6F85411F /* MBLHygrometerBME280.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLHygrometerBME280.html; path = Docs/html/Classes/MBLHygrometerBME280.html; sourceTree = ""; }; + E339DE730E4FD6F7F7456077054ABB73 /* layout.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = layout.html; path = Docs/source/_templates/layout.html; sourceTree = ""; }; + E411A5E5593092129FD8DBF4E70F00CC /* LoggerHelper.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LoggerHelper.swift; path = iOSDFULibrary/Classes/Utilities/Logging/LoggerHelper.swift; sourceTree = ""; }; + E47D66AC6E7A74134E35FC8A1F1B9DE6 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E49FFCE6327183EAF6934E95717D4C82 /* Pods-MetaWearIntegrationTests-macOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-MetaWearIntegrationTests-macOS-resources.sh"; sourceTree = ""; }; + E6054C312848AABFA25BA3E2FED7C30C /* Pods_MetaWearIntegrationTests_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWearIntegrationTests_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E6401588989350CBC1E3C97081535C49 /* moduleinfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = moduleinfo.cpp; sourceTree = ""; }; + E67419CF7B3C071CA1C3E89CD847EBF2 /* unzip.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = unzip.c; path = Zip/minizip/unzip.c; sourceTree = ""; }; + E6B0A4DA0CEB36E84829B2DC3E0E30E4 /* MBLEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLEvent.html; path = Docs/html/Classes/MBLEvent.html; sourceTree = ""; }; + E6BDCA2CFB6CEE8E984A9B55B232A63D /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown"; sourceTree = ""; }; + E70959117815002F51A0AAAD41C4AECE /* ButtonlessDFU.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ButtonlessDFU.swift; path = iOSDFULibrary/Classes/Implementation/SecureDFU/Characteristics/ButtonlessDFU.swift; sourceTree = ""; }; + E7852608063A2F0EE91A0044583622FB /* DFUServiceController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUServiceController.swift; path = iOSDFULibrary/Classes/Implementation/DFUServiceController.swift; sourceTree = ""; }; + E7BBEAD096BE4EBB2BD3DD059086F703 /* MBLModel.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLModel.html; path = Docs/html/Constants/MBLModel.html; sourceTree = ""; }; + E7D8B7B46020266F8E9CD877186482C1 /* MBLBarometerBME280.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLBarometerBME280.html; path = Docs/html/Classes/MBLBarometerBME280.html; sourceTree = ""; }; + E7EB771DD6FEE884EEC99D3E68000B76 /* MBLAccelerometerPowerScheme.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerPowerScheme.html; path = Docs/html/Constants/MBLAccelerometerPowerScheme.html; sourceTree = ""; }; + E811027370D8719568194C65349B1746 /* MBLDataSwitch.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLDataSwitch.html; path = Docs/html/Classes/MBLDataSwitch.html; sourceTree = ""; }; + E82512F4F2249F20A9C7852E5E62707C /* accelerometer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = accelerometer.cpp; sourceTree = ""; }; + E89668BE7C1318F60E25D8D1162DC9A4 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig"; sourceTree = ""; }; + E904F81BE9147A7D7773BF65CCBAB155 /* MblMwGattChar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MblMwGattChar.swift; sourceTree = ""; }; + E91EE43985C266185345FA0155C456D6 /* MBLPinConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLPinConfiguration.html; path = Docs/html/Constants/MBLPinConfiguration.html; sourceTree = ""; }; + EB520BD41AD876A595B8178F5106B2E0 /* up.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = up.png; path = Docs/build/html/_static/up.png; sourceTree = ""; }; + EBDE9A1CA6F13D55B0E00898C7C1E25E /* DFUPeripheral.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = DFUPeripheral.swift; path = iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheral.swift; sourceTree = ""; }; + ED2B6A4064162681467B89484AE73313 /* MBLAccelerometerBMI160MotionEvent.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBMI160MotionEvent.html; path = Docs/html/Classes/MBLAccelerometerBMI160MotionEvent.html; sourceTree = ""; }; + ED3C769D328FC40F3B23DDE7A9764CFE /* fontawesome-webfont.woff */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file; name = "fontawesome-webfont.woff"; path = "Docs/build/html/_static/fonts/fontawesome-webfont.woff"; sourceTree = ""; }; + EDEF014D9A7B4606B3A0546001324ADE /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-Swift-tvOS/Info.plist"; sourceTree = ""; }; + EDF35CC36FE684CAFD7BE8D93CAA0A22 /* MetaWear-watchOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWear-watchOS.xcconfig"; path = "../MetaWear-watchOS/MetaWear-watchOS.xcconfig"; sourceTree = ""; }; + EE65C167DB35A0CB62A062AD89F8587D /* MBLStringHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLStringHandler.html; path = Docs/html/Blocks/MBLStringHandler.html; sourceTree = ""; }; + EEF90505B26DB812496AD81CC1C27F17 /* MBLComparisonOperation.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLComparisonOperation.html; path = Docs/html/Constants/MBLComparisonOperation.html; sourceTree = ""; }; + EF62D1D2496DAEDF7252309D09F07517 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/BoltsSwift/Errors.swift; sourceTree = ""; }; + F06016114C77514BE44F29A7F8C329C1 /* MBLQuaternionData.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLQuaternionData.html; path = Docs/html/Classes/MBLQuaternionData.html; sourceTree = ""; }; + F07E6586BCC4481D5EFC5B0DABF699F6 /* MBLLEDColorChannel.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLLEDColorChannel.html; path = Docs/html/Constants/MBLLEDColorChannel.html; sourceTree = ""; }; + F1078A41F31E195EDA693B08672AFA72 /* MBLPulseOutput.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLPulseOutput.html; path = Docs/html/Constants/MBLPulseOutput.html; sourceTree = ""; }; + F1708C1B6853985E89FF7F09FB889ED1 /* MBLAmbientLight.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAmbientLight.html; path = Docs/html/Classes/MBLAmbientLight.html; sourceTree = ""; }; + F2AEC1BD8F817359114D5C3E968702D0 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig"; sourceTree = ""; }; + F2B2981664E907326B8CD8F38DB337BE /* Zip-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Zip-iOS-dummy.m"; sourceTree = ""; }; + F2BCBD578463EB88BC90A62C0FCA1EBA /* datainterpreter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = datainterpreter.cpp; sourceTree = ""; }; + F4B4B40C946FB16305A459A2423559C7 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist"; sourceTree = ""; }; + F4DDC6F51422EE5F25915C11674B5DB7 /* Zip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Zip.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F50C3640A838BCBB46D8CF23513D3007 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + F53F8C7409B132E6DA31316781A16890 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F6BADB08B39E768D55996606A798F6EC /* Zip-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Zip-macOS.xcconfig"; path = "../Zip-macOS/Zip-macOS.xcconfig"; sourceTree = ""; }; + F6C6E70A6B9FF1527732B007AD398BC5 /* iOSDFULibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iOSDFULibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F6E0C90918D425EAD5026E7345F55BC9 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m"; sourceTree = ""; }; + F75A61590D622B53FCDC5B3C15E03856 /* basic.css */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.css; name = basic.css; path = Docs/build/html/_static/basic.css; sourceTree = ""; }; + F7A41AAF7E4EB252150FB1025C4FB518 /* MBLAccelerometerHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerHandler.html; path = Docs/html/Blocks/MBLAccelerometerHandler.html; sourceTree = ""; }; + F7FF689685B72A5F8D472F60F4CBBBF9 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist"; sourceTree = ""; }; + F88F69444220D5A7036E534A2F2D0CB8 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist"; sourceTree = ""; }; + F89C2F45B49937B8DC54B83AD180192B /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F947481C1C7FF189BD55A476AE4F69B8 /* MBLAccelerometerBoschTapDuration.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAccelerometerBoschTapDuration.html; path = Docs/html/Constants/MBLAccelerometerBoschTapDuration.html; sourceTree = ""; }; + F991F106B384C1650B23A6749D396B1C /* theme.js */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.javascript; name = theme.js; path = Docs/build/html/_static/js/theme.js; sourceTree = ""; }; + FACCC8C428108BD5E6C5E487ED382A89 /* comment.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = comment.png; path = Docs/build/html/_static/comment.png; sourceTree = ""; }; + FAF73B6BEF05A0FFE34C4BFF663D564F /* MBLDataHandler.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLDataHandler.html; path = Docs/html/Blocks/MBLDataHandler.html; sourceTree = ""; }; + FB458CC12F6A69BA25944B9070C0E135 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FBD75C377E5C19538DFEEDE18F70C848 /* iOSDFULibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = iOSDFULibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FC1496E8EFDBD4D4D25A3223585BED20 /* MBLColorOrdering.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLColorOrdering.html; path = Docs/html/Constants/MBLColorOrdering.html; sourceTree = ""; }; + FC2B233BDA0CDDBB0162B7D4960DA961 /* ibeacon.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ibeacon.cpp; sourceTree = ""; }; + FCC5F9E3F3BDACA487485AA78FA35DD7 /* colordetector_tcs34725.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = colordetector_tcs34725.cpp; sourceTree = ""; }; + FCC7F155A239579A1A9EDA4B5235E7D8 /* iOSDFULibrary-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "iOSDFULibrary-iOS.xcconfig"; sourceTree = ""; }; + FD113CD5D3759D2B7B070CF9E76EDDF6 /* MBLConductanceVoltage.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLConductanceVoltage.html; path = Docs/html/Constants/MBLConductanceVoltage.html; sourceTree = ""; }; + FF05433A7BC182D73D8584070B66B27B /* MBLRestorable.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLRestorable.html; path = Docs/html/Protocols/MBLRestorable.html; sourceTree = ""; }; + FF9EBFEAE09B1F5E1EBF6C1CD45FB60A /* MBLAnalogReadMode.html */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.html; name = MBLAnalogReadMode.html; path = Docs/html/Constants/MBLAnalogReadMode.html; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 3114F932C15CCEE243E3B7B0D909C109 /* Frameworks */ = { + 05C37991236503D53F51AD92CB36B8FA /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3866AB500837CC210CAC556A03C68897 /* Cocoa.framework in Frameworks */, + DEA86052E87C2EEA52B14F9E30096D6A /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 352A7ECCD028822F9667AE0A54491243 /* Frameworks */ = { + 07D3EB2B2272CB051ED77901EC2E434C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0FB29EDD7DED2E5226A7DFF56AFB32DC /* Cocoa.framework in Frameworks */, + 75EA3DEDCA003248BA3969350E1FFFA6 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4BB0C6B5A8B29E928103AD8F3E26CBD1 /* Frameworks */ = { + 3FCEC326012E3419AE2474FB7296D9A7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 815DEAC0590F3E615548559652E36F6E /* Bolts.framework in Frameworks */, - 77BA229F197537BBD6CCE575896B3DD8 /* CoreBluetooth.framework in Frameworks */, - 471F5C746388F6EBA3ECF773C1A0C0FF /* CoreData.framework in Frameworks */, - B21105827ECA916DAABEF186EC4CD413 /* FastCoding.framework in Frameworks */, - DC2956A646FEC5D598AF833CE07BE38A /* Foundation.framework in Frameworks */, + 1B90ADB4D6387338C97209083E115827 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 4D43792182B061DFD1AADB367E41972D /* Frameworks */ = { + 48E1E59518774D26EF1E422941FDA163 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B119F8D7CD7D4424E020CED222F4C6EF /* Bolts.framework in Frameworks */, - EEB95570BF960880D2FDCD2B989928FA /* Cocoa.framework in Frameworks */, - B6B7AAED50116284CED3190FB3039C83 /* CoreBluetooth.framework in Frameworks */, - DB14B194C2AD7358B9A948704CE1F977 /* CoreData.framework in Frameworks */, - 33037EBC309103226127A3AE4D297FE8 /* FastCoding.framework in Frameworks */, + DE6C90CB5A57C07A7711BEB81949DE47 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 578A96E55739CE6E56BAB550849216FF /* Frameworks */ = { + 52D8007792955226E299963CE6E7B2B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A0CF7FBBA3C54D7B825E0E1294FC9B6A /* Foundation.framework in Frameworks */, + 2671E54E7AEE5CF3373FDA1B86CB561F /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5A0702E4EAE9DE569AF175068C4A2AEC /* Frameworks */ = { + 578A96E55739CE6E56BAB550849216FF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D105FE9BCC556C79B6BDABED77B48E9 /* Foundation.framework in Frameworks */, + A0CF7FBBA3C54D7B825E0E1294FC9B6A /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5CAE3222942BEB15EC4174B1DEA32A27 /* Frameworks */ = { + 5E6AB88245DF515BF76A21E7F07A551C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1116BC72F7C510D17292B26F9C3EC330 /* Cocoa.framework in Frameworks */, + 3048C93D0D73996E4D54A09B6AD9686D /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2251,2565 +1293,1407 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 7C1B90F7111F98A3C30F3CF7EB3F4906 /* Frameworks */ = { + 6B51B39146B221A6A16BE7279489872F /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2BD9FAA853719523852DC93963109292 /* Cocoa.framework in Frameworks */, - 28132611E3E7DED4CA6B1E9F18B89FD8 /* Zip.framework in Frameworks */, + C4898EBA8C06A2D5AFC6E743B622FD16 /* BoltsSwift.framework in Frameworks */, + 60C80573208EB87BFE7DD09C5C3CE0D9 /* CoreBluetooth.framework in Frameworks */, + 473AA87BB298B6368D647C6A4F386508 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 80D69EF943238FEBF67C35FF9B6A0488 /* Frameworks */ = { + 77A07D823BA8FEA988078A6A08112155 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B6E0E83AF092A58EDF8A6ED1077DA894 /* Foundation.framework in Frameworks */, + AD32A07C16134B6638329FBAD6C39160 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 90E333167C4738579C50C2D317CCBC7A /* Frameworks */ = { + 7C1B90F7111F98A3C30F3CF7EB3F4906 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - C7B331956AF3191FDDF8D4E79E5944D9 /* Cocoa.framework in Frameworks */, + 6E16FB1085D18A183728DC9D8A4A0CF1 /* Cocoa.framework in Frameworks */, + 28132611E3E7DED4CA6B1E9F18B89FD8 /* Zip.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - B658E63502323819E88FF6D622A873AF /* Frameworks */ = { + 7D118543057A5154EB9012CBCAFF8236 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2404D14D2F246A434EE0C1A5B84D6DDE /* Foundation.framework in Frameworks */, + 5001765206FE2F194E6FBEBBDEC5C8D6 /* BoltsSwift.framework in Frameworks */, + CBFDBC15440AF785AFEDE9D14C15FB66 /* CoreBluetooth.framework in Frameworks */, + 43695E4581D60DF316442099D179CC0E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - BC580FE2F2CED265196A724ADE90EE71 /* Frameworks */ = { + 7E400A6572B56DC43FB793B930A064E3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 244864B8B34E1D2D9145D844B34EDCB8 /* Foundation.framework in Frameworks */, + CA31B2A51919A8900FBDA26FDF2FCA94 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - C332911743205E03FB2826D085544317 /* Frameworks */ = { + 7EFB227DEAC78F9755FE9219450F6DF7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 119474CFBBE15FDF3E6C116AF852E3C3 /* Foundation.framework in Frameworks */, + E2DAB53DB500DB5C018F41DC3559EB9E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - CD8180521DDBBE54BE4FEE8AD8502EC2 /* Frameworks */ = { + 9D7FCA1716CA4AD350CA3ECD5D51B895 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 55B9DF414CE8B0E290B73BDF6DB2C0A9 /* Bolts.framework in Frameworks */, - 031DEE7720E17279E13483835585971B /* CoreBluetooth.framework in Frameworks */, - ABAE4EA88D39980E9A12C89799952FA4 /* CoreData.framework in Frameworks */, - B64660800E1059233F05E401353AE092 /* FastCoding.framework in Frameworks */, - 411E1B8FE70E4C6F3ADC024D26C1FECC /* Foundation.framework in Frameworks */, + 609417A0AADA9A60224EF948BECE0159 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D0B0520422EAD308ED39299390887B57 /* Frameworks */ = { + C107DC355B3A2C4AE7A9EA0E49987443 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BD7E13F6FBD53D9B99299B0E09D6DC7F /* Foundation.framework in Frameworks */, + 6BDF2ECB5B6038E122197201D2BA5DD3 /* BoltsSwift.framework in Frameworks */, + 8CD942945446A79765BBF3E74BC38E9C /* Cocoa.framework in Frameworks */, + ACB063C3999BBBD91B976C904C2EFC27 /* CoreBluetooth.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D4FCB708E30657BCF8E37542457C1C2F /* Frameworks */ = { + C631E9DF4E48CAC605A01D97C887FF89 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5365D530008115AAF9C20AE2394C32CF /* Cocoa.framework in Frameworks */, + D906AFE35B3EFFC40A36C8887B277A2B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D8131048A970F431E57EED3DBECB68F3 /* Frameworks */ = { + C7BE0E71DBADCCD437507EBF6AAFDEAF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B91794259B1BC2F0BECF65782789CDD4 /* Foundation.framework in Frameworks */, + 5F89D00D3D868B747539CCEAFC94E07F /* BoltsSwift.framework in Frameworks */, + 445A972E0EFED2BED4952E917C4896AC /* CoreBluetooth.framework in Frameworks */, + 3A320188B8D201A2E0E1AF0F977EDC58 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E3445EDCA7149EAA731D4ED963C5C657 /* Frameworks */ = { + CDA56ED5B820E84588480A781C57B0EE /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 4FA5913D498543A16F5D752B50E198DF /* Foundation.framework in Frameworks */, + 16B312A2B9909B85E239C99C321BA251 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F2B71EB728F14327B4F2B6DB8E9D63FD /* Frameworks */ = { + E3E8DB4DA5964BC6649EDE2A77149661 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 56418FB54A7A9BBF663C6EAA71F58609 /* Cocoa.framework in Frameworks */, + D3CBFF49B4D5256615339B9342AEC062 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - F4123120D9BEEFC7DD9BAF5A002B9F30 /* Frameworks */ = { + E3F8C8E331D5A934A10A756385865B70 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - BA64167445566BED4FEB166068F07F64 /* Foundation.framework in Frameworks */, + 967BAA066CB060453F5FF91900E7970E /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - FA02C51B412143161CAD4336E9E6AF43 /* Frameworks */ = { + F2B71EB728F14327B4F2B6DB8E9D63FD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D953A39EB4738EC7847F50ACB2A39BF8 /* Foundation.framework in Frameworks */, + 4A196F15C24662AB2E21EC7551D6F21D /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 0451275DCA0A323C41810855680268B2 /* Pods-MetaWearIntegrationTests-macOS */ = { + 00DAE1784C337140EF057442E9C8D8B5 /* Support Files */ = { isa = PBXGroup; children = ( - 2BD3F32DFE1CDFAE06311345D55F5ED5 /* Info.plist */, - F010B45A4744AEA32F8622B4D117B191 /* Pods-MetaWearIntegrationTests-macOS.modulemap */, - 49818250F85344D59243E60F743522F2 /* Pods-MetaWearIntegrationTests-macOS-acknowledgements.markdown */, - 12C9DC23F0B487B7DEE634B37A340BD7 /* Pods-MetaWearIntegrationTests-macOS-acknowledgements.plist */, - 0122E791DE37E81ECB642809DD4C9BD2 /* Pods-MetaWearIntegrationTests-macOS-dummy.m */, - FB298BFE18C28B6FEF04976E7FCEF422 /* Pods-MetaWearIntegrationTests-macOS-frameworks.sh */, - 7420DE7FF33B58C5DB851F3A44534E10 /* Pods-MetaWearIntegrationTests-macOS-resources.sh */, - 807664938D5F50F865A9545BCD2FE1BA /* Pods-MetaWearIntegrationTests-macOS-umbrella.h */, - BB2393946755F5852638E025B4E4DCAE /* Pods-MetaWearIntegrationTests-macOS.debug.xcconfig */, - 08A30E73050089FE33EF3E462555FFA5 /* Pods-MetaWearIntegrationTests-macOS.release.xcconfig */, + 60A372C6651ED5E753DEF691288E2F7B /* Info.plist */, + 6E3A54EE61A51028CFD21C1FAABD0DB9 /* Info.plist */, + 8DBA77DDE41335EE5A80363F57028783 /* Info.plist */, + 39AB8B49107DEA312211CF59603711F7 /* Info.plist */, + 7BFECE015E2B533FB9709D69122BD1E7 /* MetaWear-iOS.modulemap */, + 0F8706FC56F8FB1387E55C7D75725857 /* MetaWear-iOS.xcconfig */, + A5AF6AD1FACCAF801B63B1F1F9E784C0 /* MetaWear-iOS-dummy.m */, + D618EA3710D7BC3425F692902AFFEB85 /* MetaWear-iOS-prefix.pch */, + 3940B6C36ECC870E8A7A1594F55BB606 /* MetaWear-iOS-umbrella.h */, + CBA4F653FA6111664B560DC023801ED9 /* MetaWear-macOS.modulemap */, + 53AF414AABC51FADC5F04FC9948ED862 /* MetaWear-macOS.xcconfig */, + 169779CB04EDD25311BFBFF0A0DA212B /* MetaWear-macOS-dummy.m */, + 985C1BC287B7E62ADEE189880E321831 /* MetaWear-macOS-prefix.pch */, + 9EA7628EF4A795EAE5D4D002846CD49E /* MetaWear-macOS-umbrella.h */, + 752B418A31C1FB5B505E37688EE54173 /* MetaWear-tvOS.modulemap */, + 95445EEF9E827EC8E9F63E655AF31BA2 /* MetaWear-tvOS.xcconfig */, + 458A3992B98FDF97203DCE9D31CB9C0D /* MetaWear-tvOS-dummy.m */, + 2B1A3680D86F0A9AE580D3DB67685636 /* MetaWear-tvOS-prefix.pch */, + 4B881AF4D487065D1770F89AAD90360E /* MetaWear-tvOS-umbrella.h */, + 56DB0E38B0E61575732A35183A5116AA /* MetaWear-watchOS.modulemap */, + EDF35CC36FE684CAFD7BE8D93CAA0A22 /* MetaWear-watchOS.xcconfig */, + D3FAC3EA41F19EE12F9F6BE054A3E10D /* MetaWear-watchOS-dummy.m */, + 58EF9C79AB820B6F9761DB4455B19D8E /* MetaWear-watchOS-prefix.pch */, + 1CEEE277440B3915D1E813B248AC9497 /* MetaWear-watchOS-umbrella.h */, ); - name = "Pods-MetaWearIntegrationTests-macOS"; - path = "Target Support Files/Pods-MetaWearIntegrationTests-macOS"; + name = "Support Files"; + path = "MetaWear/Pods/Target Support Files/MetaWear-iOS"; sourceTree = ""; }; - 045F81E5A54CF56F77DEAC7E250EA8F3 /* Mocks */ = { + 015627B9EFD17FB1361F93B10A2ED757 /* processor */ = { isa = PBXGroup; children = ( - B1B786E36962E36D6B767C3324078E7D /* MBLBluetoothCentral.h */, - B661370B50F2E66A283AEFD0060A25D5 /* MBLBluetoothCentralMock.h */, - 32E5E18A48C5398D932D406B8D506A1F /* MBLBluetoothCentralMock.m */, - FE8969BAE4E23F3DFE16E1BD087E5A9D /* MBLBluetoothPeripheral.h */, - 2622409A6E1318E8A16282456B61FAAA /* MBLBluetoothPeripheralMock.h */, - D71F96F841281B595282C44BF5FF857F /* MBLBluetoothPeripheralMock.m */, - CE1EDADCFE8155984972FD1A2B4CFD4F /* MBLDeviceLookup.h */, - 9F35860B6ADC7900C6DAFDBEB2B0EDDA /* MBLDeviceLookup.m */, - 9582ADFE04E59FB00FC2EB1B9CDF781A /* MBLMockPeripheralFactory.h */, - A9A428AC43F78AE9A82E6B2E060F3494 /* MBLMockPeripheralFactory.m */, - 66BD7978E06A8765D037FC38B585C13E /* MBLMockUtils.h */, - B3A0F41A9C9F3D4A6BAEE5B16DA8E124 /* MBLMockUtils.m */, - 94E08C3E838F46065D9A579E08D26F1F /* MBLModuleMock.h */, - 18EADF7AF343005056845D551D588501 /* MBLModuleMock.m */, - ); - path = Mocks; + AD3CB6711E948C8FBB7EEE43724FE78C /* cpp */, + ); + path = processor; sourceTree = ""; }; - 073D72B028A7DDED215D2F4E4ED6DEAF /* AmbientLight */ = { + 10514F5395F2D8BB565900EEDEDB89AC /* swift */ = { isa = PBXGroup; children = ( - D4C71EC1407F5E40D46788C5806EBAC1 /* MBLAmbientLight.h */, - 3CA104EEA8E4AEA2C3540CC3CE284922 /* MBLAmbientLight.m */, - FC97A1D538612AA0C8F64D8A60282A1C /* AmbientLightLTR329 */, + 2222AA051A2657F05060085DC8B17562 /* cbindings.swift */, ); - path = AmbientLight; + path = swift; sourceTree = ""; }; - 07D7C6467087B882AF581A8870CA5DE1 /* HygrometerBME280 */ = { + 1BD9DE3DAC85D04F4FC6BB981D695128 /* MetaWear-SDK-Cpp */ = { isa = PBXGroup; children = ( - 5C2FDEE37CF41DE80256A00DFCF4163C /* MBLHygrometerBME280PeriodicHumidityEvent.h */, - E2973DEE2198C544E205D3FB1EEE9C59 /* MBLHygrometerBME280PeriodicHumidityEvent.m */, + 8193E3AFD2BA5A67712CF8AD539D56DF /* bindings */, + 4FD0BAEC31A1D73E6B73AF6DE165ABCB /* src */, ); - path = HygrometerBME280; + name = "MetaWear-SDK-Cpp"; + path = "MetaWear/MetaWear-SDK-Cpp"; sourceTree = ""; }; - 091D423CFC2D6F90DF77CEC4EA6E1C91 /* Support Files */ = { + 1C0D1224CA95E529C8A8B61CAE0B6CC1 /* Zip */ = { isa = PBXGroup; children = ( - 68F71FF3F5BC24A81DEB63AA5A239D81 /* FastCoding-iOS.modulemap */, - ED7F0459D000BE9D78FF3F5B0B65825E /* FastCoding-iOS.xcconfig */, - CE96572C4CF67BCAD56B742C54A03FEC /* FastCoding-iOS-dummy.m */, - 66179F0A74E73AD51E178F4348E9010C /* FastCoding-iOS-prefix.pch */, - 34A642826D000F75A8AEFAEABBD9F854 /* FastCoding-iOS-umbrella.h */, - DD6729180F6F0B1CF1BAD9E58FF09B2D /* FastCoding-macOS.modulemap */, - 5DA6D487C81E989C28B492074E5CB4C7 /* FastCoding-macOS.xcconfig */, - C0EFF565875ED8594A6CA0453C6B76FF /* FastCoding-macOS-dummy.m */, - 14AE7AE72BE71A3D06974D109F077A39 /* FastCoding-macOS-prefix.pch */, - 6F82E3B681C52C4896CAF8BD58F4FE3E /* FastCoding-macOS-umbrella.h */, - 02EF70860EBA4BFD0F7274FC624AC2AD /* FastCoding-tvOS.modulemap */, - 606066652CE57A58078BEACCA8C31CDA /* FastCoding-tvOS.xcconfig */, - 8BD970ADE60CB77738A77DF291E9B9E1 /* FastCoding-tvOS-dummy.m */, - C5C3D444B2477CF94813F5793A553734 /* FastCoding-tvOS-prefix.pch */, - 2D985519D28309D26CC3988FCAB4381B /* FastCoding-tvOS-umbrella.h */, - 8BE067E304FF87CD70F110630548F0B8 /* Info.plist */, - 91B1BDE2BBD36B29D3C6088CB96920BC /* Info.plist */, - C8A8C332D979B4ADF41ED76152831508 /* Info.plist */, + B98C6F46BB0AA3EB2B2A7B07DFD30E7A /* crypt.h */, + 877A85E3E0BF54E52BF701108B14C637 /* ioapi.c */, + 9D4E5BB449C5462A48E3E2BF7C911B70 /* ioapi.h */, + 5A10B2EA553069C796888CFC9DF799A8 /* QuickZip.swift */, + E67419CF7B3C071CA1C3E89CD847EBF2 /* unzip.c */, + DAFD906B0F2FCAF1C6DC95634145FB67 /* unzip.h */, + 3128808BBD3D9A7F117E50386DF5ECCE /* zip.c */, + 6007B14F565FF154037111E7604F2A18 /* zip.h */, + 9A0EA4898D2E15CFDE928E63212D4DC5 /* Zip.h */, + 1F4AD0F21AEC06B27504E07071E55A3D /* Zip.swift */, + 25C83457451FD5A29DBFC9D7AA22E184 /* ZipUtilities.swift */, + 8B292DC29341602222D268E6AB4AD7B2 /* Support Files */, ); - name = "Support Files"; - path = "../Target Support Files/FastCoding-iOS"; + path = Zip; sourceTree = ""; }; - 0BFF115DAC2714764AEA4C3D41EDB4A5 /* FastCoding */ = { + 1ED0DDC446686567D7A62A8633E27E45 /* OS X */ = { isa = PBXGroup; children = ( - A613E6BF9606CBB4CD455C470297B98A /* FastCoder.h */, - 868950A0C4FCD94559DEF6B5FBF4AAEB /* FastCoder.m */, - 091D423CFC2D6F90DF77CEC4EA6E1C91 /* Support Files */, + C4CA5AF2006597CE19BC2D692482FD77 /* Cocoa.framework */, + 6447B847713316FF16EEFCB14B84342A /* CoreBluetooth.framework */, ); - path = FastCoding; + name = "OS X"; sourceTree = ""; }; - 15DC4CF509E1EA4197EBC7D4CE5C597E /* Neopixel */ = { + 223B3EA2E9FE2CDE2E75233820C79AFC /* Core */ = { isa = PBXGroup; children = ( - 6B96BB66E32A76C37714BD32108877E8 /* MBLNeopixel+Private.h */, - F452562548AA032277EDAF36A3C1F4EA /* MBLNeopixelStrand+Private.h */, - ); - path = Neopixel; + BDC859CA7938AF835B718231608B3706 /* Bridging.swift */, + 76C6DA6427752A0B49FCD4F46FD110B9 /* CBUUID.swift */, + 9C27F87C7E1F692779C1640071FE108E /* DeviceInformation.swift */, + 82CAD8BF247E05BE3819D6EAE4463B4A /* FirmwareBuild.swift */, + 9B29DCF80EC1B476962ED99AA3B2B470 /* FirmwareServer.swift */, + 1DDEFF1315B4D148E9CA05364AD7DF4E /* LogDelegate.swift */, + E904F81BE9147A7D7773BF65CCBAB155 /* MblMwGattChar.swift */, + C7F15C91EE3979177A6CE2D5466D6B0F /* MetaBootFinder.swift */, + 956E11F13DF77F8D1720B83F4A6BEF9A /* MetaWear.swift */, + 8921E73C47A7033F211248D94A0E4F97 /* MetaWearData.swift */, + 87B23CA6B555C2D2E459958935BB5610 /* MetaWearScanner.swift */, + 94B0F7A8ADAFE2D840A81E4E98B4B48E /* String+VersionCompare.swift */, + ); + name = Core; + path = MetaWear/Core; sourceTree = ""; }; - 16505AFA1A2A92BFB892ACEB680A21E5 /* iBeacon */ = { + 2343EDE6A6F906EE55FD9F7F74EAC210 /* cpp */ = { isa = PBXGroup; children = ( - 4B5A2DB9C21AB3E46343707203DB8703 /* MBLiBeacon.h */, - 6E0D65D220AC16FD37B5C370498E1556 /* MBLiBeacon.m */, + F2BCBD578463EB88BC90A62C0FCA1EBA /* datainterpreter.cpp */, + 28EE2030BE47C702DD7CE5C350586B0B /* metawearboard.cpp */, ); - path = iBeacon; + path = cpp; sourceTree = ""; }; - 1865A7BDE339829F3046DF7A7EC1FF28 /* BarometerBMP280 */ = { + 262B6275242CDF40C1495208B0F3242E /* cpp */ = { isa = PBXGroup; children = ( - 2813B6E415AA511D8A27433A7E7567D7 /* MBLBarometerBMP280.h */, - C5B0A790FBDDC8943DD967E22F5E6484 /* MBLBarometerBMP280.m */, - ); - path = BarometerBMP280; + DED9482F7D81C719B97D07AAE8DE0C20 /* anonymous_datasignal.cpp */, + 2EDD3D9D4160990AA22AC9137B4497BD /* datasignal.cpp */, + 5F90E21E1EC32E577938414EC8DD8ED8 /* debug.cpp */, + 1B467B9BCA78B0BB519888E22BC5D2B4 /* event.cpp */, + A973EDFDFFC64A9B54CEF3EBD264BDB0 /* logging.cpp */, + 90C20DFE18FB7A6936DD7E4A628B5621 /* macro.cpp */, + E6401588989350CBC1E3C97081535C49 /* moduleinfo.cpp */, + C431B76C0095B9213F871704369432C3 /* responseheader.cpp */, + 638340E73003B3641A29363DEBA5E5A0 /* settings.cpp */, + 442785F52975C0A54D634862B58852DF /* timer.cpp */, + 3AD6F9ADF08B67FFA34BDE21719B1117 /* version.cpp */, + ); + path = cpp; sourceTree = ""; }; - 18BAF70F42B255334DB9B3A8BD73DD4E /* Serial */ = { + 29C9A7B75E89EAE098573010F1D3461B /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */ = { isa = PBXGroup; children = ( - C31C3C37A5B28C48919E378674655A95 /* MBLI2CData.h */, - 18D0C4AE392CD54EE51E540B5D17D335 /* MBLI2CData.m */, - 2EC3430CE59F55B7ECCD181718DED63F /* MBLSerial.h */, - 04CBB3EAF42BB1BE4A3C1BCF71A83A84 /* MBLSerial.m */, - 3A11D978BD98802C632FA253271B5EF2 /* MBLSPIData.h */, - BC8E5506693A8AD4210AFC4F04630DB5 /* MBLSPIData.m */, - ); - path = Serial; + 6EF04B1F4004A55B398C7B6DAD581543 /* Info.plist */, + A63072581BA7AB4DA69E0FC13BE06A57 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap */, + E6BDCA2CFB6CEE8E984A9B55B232A63D /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown */, + 25C05A3B25B23975A17107F661D73D5F /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist */, + 2324F9E4F7F62F924F878871A0776E7C /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m */, + 55ADF8DB6E71D4CA117584B3A7FC1A3E /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh */, + ADC3D7C3F0700C7CC728E7133E62C2AE /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh */, + 8C2EC55135D596343E0DB64B3D2C31D2 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h */, + 6983CD1C0A1B54CA11B21A351889624C /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig */, + C743D0A5845E523BA1629F6197814983 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig */, + ); + name = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; + path = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; sourceTree = ""; }; - 18D8F1A09F08888197CFCBBC7A418C61 /* Accelerometer */ = { + 2D50A0956851FAF01E57E03DCA447F73 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension */ = { isa = PBXGroup; children = ( - DF122BCA44DEBD8F20F96652F7A2EA94 /* MBLAccelerometer+Private.h */, - 2DD1DF3FEB5553DD83EB3595CEC0F84F /* MBLAccelerometerData+Private.h */, - 2EE1FB0DD41BD31701FDA36D7A577E33 /* MBLOrientationData+Private.h */, - 89508313CD903B64125F4A956E656897 /* MBLRMSAccelerometerData+Private.h */, - 2F8BE36E7F86685E4D23F4A3FF189B70 /* AccelerometerBosch */, - 3FD4A702DA1D91C1C90A3B3F3E631805 /* MMA8452Q */, - ); - path = Accelerometer; + 34E4A445CE686B584E1F252ACC021203 /* Info.plist */, + DAF920DACC755F5344DB7D343E000502 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap */, + AF0D496C0D429A207DAE3A6FDE554FCF /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.markdown */, + 12AE9AA947AF275B27C8883789D7B242 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.plist */, + 63BD66F0058B68A8F0A048B9B93F17D7 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m */, + AA27B5203BE6194F6754E1CE038CB1D0 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh */, + 2DB32D699148AA9B8E99EF48F686D1DF /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-resources.sh */, + 9EF747CE4C8BDB360891F16F7BBDAB15 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h */, + 17F9BC4775B3AC83A4B5A3EC8D1A0219 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig */, + E89668BE7C1318F60E25D8D1162DC9A4 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig */, + ); + name = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension"; + path = "Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension"; sourceTree = ""; }; - 19936AD76816ECEF4E7EBF58AF69A1BE /* SensorFusion */ = { + 38B449290907C3A207F6617A8027FE14 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */ = { isa = PBXGroup; children = ( - E3AD1BAB629ECA814247A5E73B8CD685 /* MBLEulerAngleData.h */, - DE30062ABD960E8C08676300ACD20D29 /* MBLEulerAngleData.m */, - BD464CA835615E18659BEB5C94E2000D /* MBLQuaternionData.h */, - D09F8208C59945BF9BCA2E29C547665D /* MBLQuaternionData.m */, - 1C3629650A5E90D12D7E8D34CB7524F6 /* MBLSensorFusion.h */, - F611D503A35A2C29A17EFE78CFEA593D /* MBLSensorFusion.m */, - ); - path = SensorFusion; + 81181FE2E6CE49A9C329469C5C5DC6F4 /* Info.plist */, + 0EDADF7F64E4C98A6CA948025535C5EC /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap */, + 11CF78DD2D3C9076332F0B6FF5AC4695 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown */, + 02B331627190C631A4DB30D511522F44 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist */, + CE777B23C2FE7FFB36E42E139E276219 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m */, + 42F9D17A5FE570DEEA06700102689958 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh */, + 3D800605874384681EB4E6EBB3A9B165 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh */, + DDB0564C3BCFB74DE96005255A0B8226 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h */, + 94D6646C95EC7CE601758BE1A79E9ED6 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig */, + 81546B48ED29178160B847633CA7BD47 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig */, + ); + name = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; + path = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; sourceTree = ""; }; - 1B7C3F0649A8AC2D3533CD916D57B519 /* Targets Support Files */ = { + 3CA388A0601C60A04964D3B3CB5E51A7 /* Core */ = { isa = PBXGroup; children = ( - EE3B865A56593ECF632B195B27BE2DF8 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */, - 334F166F54C1AC92980928563EA1F40E /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS */, - 8878C26BC4E02A597AABB507764D5DE1 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */, - 20E749BB6495394E51C63384B0ECF69D /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS */, - 316DE1DF0EFF16F0BA91383150A2E044 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */, - 34AFF3552BF96E3A8F6EB56CBFB51522 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS */, - 2C49F467F5334306DD4804FB95A9C859 /* Pods-MetaWearIntegrationTests-iOS */, - 0451275DCA0A323C41810855680268B2 /* Pods-MetaWearIntegrationTests-macOS */, - 4138A7DA3053EB1326081FDD1DAB0756 /* Pods-MetaWearIntegrationTests-tvOS */, + 223B3EA2E9FE2CDE2E75233820C79AFC /* Core */, + 1BD9DE3DAC85D04F4FC6BB981D695128 /* MetaWear-SDK-Cpp */, ); - name = "Targets Support Files"; + name = Core; sourceTree = ""; }; - 1C2B3801A20B9AB33704B5EB24837077 /* Core */ = { + 4230870DCF2FAF8F07989C09ABBAD8EE /* metawear */ = { isa = PBXGroup; children = ( - 077DD2BC11F0A7ADDD507D7CFD5E9B3D /* MBLAnalytics.h */, - 5C045425809353C9AC26BC4A22FCF39F /* MBLAnalytics.m */, - F352EEA80E24C897DFE65410ECEBAF80 /* MBLAnonymousEvent+Private.h */, - 728A14598DFA2E0ADAC364544A685C3C /* MBLConstants+Private.h */, - E927F7FE18500C742246D5144E4869AD /* MBLConversion.h */, - 259124F1E7A1A8378E3FAC98644EE69A /* MBLConversion.m */, - 79ACB3EAB67424B932181CC2ADD04624 /* MBLData+Private.h */, - D0FED9CA66384F76DECF70F875B7267B /* MBLDataSample+Private.h */, - 4F00482E0E8C8ADE2E784192F4043661 /* MBLDependentData.h */, - E83EF69901AB4A54B1F0F417FF13BF56 /* MBLDependentData.m */, - 9A51D4DCDE886B0384051CC90D92067B /* MBLDispatchQueue.h */, - D7A2BBD6DD7144921CBFA24FE2770E9C /* MBLDispatchQueue.m */, - 61DA23203D750582CEBB4DDB7B099285 /* MBLDownloadOnlyEvent.h */, - 33264FC0B93C70A504D49AC7A66C41FF /* MBLDownloadOnlyEvent.m */, - 18DDDD5E1E2ADE29C7D340B61A72DAD1 /* MBLEntityEvent+Private.h */, - 249139FB8D137FD0841B19206867C7EB /* MBLEntityModule+Private.h */, - 78621B24EBE86A94377658DA1B69BA7E /* MBLEvent+Private.h */, - AA829F30CBE3BF2C3B818F7939EB917B /* MBLFilter+Private.h */, - 4D36A4050ABE4AE245A52AA00EB0277F /* MBLFirmwareBuild.h */, - F1950DB31EFF9511CAAD020DE490A290 /* MBLFirmwareBuild.m */, - E1F99EA3788B5E9782EFAD09BB202F11 /* MBLFormat.h */, - 583A609E5ACE78382C84ED5EF0EDE7C8 /* MBLFormat.m */, - D2123231BBE668070DC5FD64138BA715 /* MBLLogger.h */, - E33E51117A7906AD725BC5896DAF7AB9 /* MBLLogger.m */, - D7CEF79F64A30505A4E517BC428854FA /* MBLMacAddressFormat.h */, - 1ADE8BBAE5CCB97867FB931B9D024F2B /* MBLMacAddressFormat.m */, - 9AAFD4E4609EAE8A3637DD8B1CBB0C77 /* MBLMetaWear+Private.h */, - CD80956417A14D56D8D27D71A192F8DA /* MBLMetaWearManager+Private.h */, - 87F19309204F07BA1A90389E5292BAA1 /* MBLModule+Private.h */, - F874621735C718745BB4247927DBB372 /* MBLModuleInfo.h */, - 00E67CA86BA4A4BD60EEBB7E3325B212 /* MBLModuleInfo.m */, - 79D6876CB5FB9E0B295970DD856F7D37 /* MBLMovingAverage.h */, - 2DFA861A03763BE92BA107951F76F0A0 /* MBLMovingAverage.m */, - B61904FA69F262DCB1BBB472F3910237 /* MBLNonVolatileState.h */, - A0DAFCFCA37D81B01944B09B50BD2EF8 /* MBLNonVolatileState.m */, - 03C9247E893E625B829FE942FD1F6FF3 /* MBLNumericData+Private.h */, - CD82AD8A7C657338F4987435E20EB388 /* MBLNumericFormatter.h */, - 04A4C08307A0807A13DF6337A194A7A9 /* MBLNumericFormatter.m */, - FC6612B69C9D0CE8EE2D7A066A56C221 /* MBLRegister+Private.h */, - 30380F8CC34F2968DCC11BFA184B2CE8 /* MBLStringData+Private.h */, - 80522ABAB30A84102A4A1F9F6171D7F8 /* MBLTriggeredRead.h */, - 2775F63A5885A6560DF256662375885D /* MBLTriggeredRead.m */, - ); - path = Core; + 432A2D61FB8C8529FF32D0F52375E7BE /* core */, + 4A7053CFC8F7A24290C2F01959FF28E1 /* dfu */, + A832E12ADC2B00CED464789EBF58920B /* impl */, + D5BFABC4B6163D58C896AAC8A33E028B /* peripheral */, + 770002BF34683729E89F938C31725F7B /* platform */, + 015627B9EFD17FB1361F93B10A2ED757 /* processor */, + 96AA8AF6421D4EE35AB52B549897FF51 /* sensor */, + ); + path = metawear; sourceTree = ""; }; - 1DBE4F205C81BFD8A021FC0B239736A4 /* Barometer */ = { + 432A2D61FB8C8529FF32D0F52375E7BE /* core */ = { isa = PBXGroup; children = ( - 5FEE9DAF27B41AC971847EFB87011210 /* MBLBarometer.h */, - 55B5F56299B15AFD2D2404B34E225E67 /* MBLBarometer.m */, - AF9DE890B55EE16771C6F34E8E56493E /* BarometerBosch */, + 262B6275242CDF40C1495208B0F3242E /* cpp */, ); - path = Barometer; + path = core; sourceTree = ""; }; - 20E749BB6495394E51C63384B0ECF69D /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS */ = { + 4A7053CFC8F7A24290C2F01959FF28E1 /* dfu */ = { isa = PBXGroup; children = ( - 9DA3F69C410FE2F6B0CD19DBB492E7CB /* Info.plist */, - 68E0F9521AF535BF9D8E414EEB4D4F8C /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap */, - 20F79B1DFA93D6C8DEC2C4D417376E27 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown */, - 0D3D08752EA5E69B3441973DD6666A61 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist */, - 93EAE20DC31EBE286C11FBC0F8E11117 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m */, - 0B6540D1EE45C53A675AB7C1B6B33FF1 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh */, - A496183A4668C26A08A67495675B4D7F /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh */, - 146C6F2EFE7859BBE990B6949EEB29FE /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h */, - 096AC0C7692D6AFC9F02212305518A51 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig */, - 77B18F36C85923BD0966BB5B3F4366C5 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig */, + 5AED251E810BBDFBB7EEBD8991DE6EE8 /* cpp */, ); - name = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS"; - path = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS"; + path = dfu; sourceTree = ""; }; - 214DE6365ABA09E1AD6EF8A2A6A11492 /* GyroBMI160 */ = { + 4B4B8F7F6036C9743CC5D30624775884 /* Development Pods */ = { isa = PBXGroup; children = ( - 9F8F783E140BB600631BF26096F6498C /* bmi160.h */, - 876E22D020687C840F45B60CBE75C97A /* MBLGyroBMI160.h */, - 342B40755E2FFB37E7739C0F867B357B /* MBLGyroBMI160.m */, + 7246DAE837F93722CE63F195660EB687 /* MetaWear */, ); - path = GyroBMI160; + name = "Development Pods"; sourceTree = ""; }; - 21B4BBB10283CF7188B440DBC241C88B /* AccelerometerBMA255 */ = { + 4FD0BAEC31A1D73E6B73AF6DE165ABCB /* src */ = { isa = PBXGroup; children = ( - 23D453257F06A73A5C8CD0F590FB2534 /* MBLAccelerometerBMA255.h */, - 60078A5252316CA448069CA15B7675C3 /* MBLAccelerometerBMA255.m */, - 18BB70CAC175503B0836D3D7EF3C1AE8 /* MBLAccelerometerBMA255MotionEvent.h */, - 446871FDEF6BE23071F1C4D30C83656D /* MBLAccelerometerBMA255MotionEvent.m */, + 4230870DCF2FAF8F07989C09ABBAD8EE /* metawear */, ); - path = AccelerometerBMA255; + path = src; sourceTree = ""; }; - 2BA4B205435F6027D259F1811CFE447D /* GPIO */ = { + 5AED251E810BBDFBB7EEBD8991DE6EE8 /* cpp */ = { isa = PBXGroup; children = ( - 8FB11F20516E10D5392A8FD9A19FCAF4 /* MBLGPIO.h */, - 5D540DE91D9349411A42CBFA9E1817D2 /* MBLGPIO.m */, - 5F0E221620B947BDDB6ED38CF1DFC44C /* MBLGPIOPin.h */, - 5F1BC518C4E1FB3BC352030FB4FECD49 /* MBLGPIOPin.m */, + A428FF06274A10743F084C0FC139B173 /* dfu_operations.cpp */, + 546C16D718B651D515C6381ECE7D4C13 /* dfu_operations_details.cpp */, + AA5DA30419B0A544014D9021E46503C2 /* dfu_utility.cpp */, + 09BC8767D1463A5A9B4ABA773E0C6AA6 /* file_operations.cpp */, + 722B391E0EEAAAC58B70C7A6186FCBF6 /* miniz.cpp */, ); - path = GPIO; + path = cpp; sourceTree = ""; }; - 2C49F467F5334306DD4804FB95A9C859 /* Pods-MetaWearIntegrationTests-iOS */ = { + 65B1944D6E883B7CB8D41908AB04104B /* watchOS */ = { isa = PBXGroup; children = ( - 064E1E70344FD893965888C0643D028F /* Info.plist */, - 8DF9B3DC4C18DFE10D8244ADD40CBA5B /* Pods-MetaWearIntegrationTests-iOS.modulemap */, - 13A32AA096E9CC779B36C686BD2CF253 /* Pods-MetaWearIntegrationTests-iOS-acknowledgements.markdown */, - C8D814FF23AF9233769F9E031893135E /* Pods-MetaWearIntegrationTests-iOS-acknowledgements.plist */, - 6F89ABEB7CA98ACDE9FFA0DED841DC6B /* Pods-MetaWearIntegrationTests-iOS-dummy.m */, - F30B2B3B63182A49C671A0BBD1815F0A /* Pods-MetaWearIntegrationTests-iOS-frameworks.sh */, - CC2590BCF019C29AF98FD6A75EDBCABA /* Pods-MetaWearIntegrationTests-iOS-resources.sh */, - 1E28082BF970536C53DA5166708B1599 /* Pods-MetaWearIntegrationTests-iOS-umbrella.h */, - EC3D3272810170DC75367A98CF7776DB /* Pods-MetaWearIntegrationTests-iOS.debug.xcconfig */, - C926B3FBE54B3DF99DD7B12C0402933C /* Pods-MetaWearIntegrationTests-iOS.release.xcconfig */, + A68505B62486622F416FFE0D5BEFDD46 /* CoreBluetooth.framework */, + D83DA06622784011EB0A064E16688ADB /* Foundation.framework */, ); - name = "Pods-MetaWearIntegrationTests-iOS"; - path = "Target Support Files/Pods-MetaWearIntegrationTests-iOS"; + name = watchOS; sourceTree = ""; }; - 2EBAE173418A9B63BA771A6E82CC82D5 /* Bolts */ = { + 7057763BE0B7A195448C8941FFF97EAA /* tvOS */ = { isa = PBXGroup; children = ( - EBFBC50DB93BA18C03FECCC190CF6118 /* Support Files */, - A2A8936E641389546AD6A558B1200E87 /* Tasks */, + 3D45D1272B1860B206A44BE30D4966B8 /* CoreBluetooth.framework */, + 5B6511866AFA1D91F9311C7E013E63A0 /* Foundation.framework */, ); - path = Bolts; + name = tvOS; sourceTree = ""; }; - 2F8BE36E7F86685E4D23F4A3FF189B70 /* AccelerometerBosch */ = { + 7246DAE837F93722CE63F195660EB687 /* MetaWear */ = { isa = PBXGroup; children = ( - C1EDCB210888571A4674E8E85C415DAC /* MBLAccelerometerBosch+Private.h */, - D638CE0D4E71C4047F8878745F8486D7 /* MBLAccelerometerBoschAxisReadyEvent.h */, - 2173E09EFD7D86F6C58907D0B83C31AF /* MBLAccelerometerBoschAxisReadyEvent.m */, - 3B9D42A88DE615131B26D7E3AB2D4A34 /* MBLAccelerometerBoschDataReadyEvent.h */, - 19DAA050BDB87A1D6C1937CD796A986C /* MBLAccelerometerBoschDataReadyEvent.m */, - 09BF9E44AFC699AC453CFBD3C548CC3B /* MBLAccelerometerBoschFlatData+Private.h */, - E1A24E34E7C4C5E621D62C5156E3F752 /* MBLAccelerometerBoschFlatEvent+Private.h */, - 32E8CABE3E44CDFE2329BE40AAC4FFB6 /* MBLAccelerometerBoschFlatFormat.h */, - 9FCA26FF093F156E325A7B83CC6F09F3 /* MBLAccelerometerBoschFlatFormat.m */, - 494205A39329FF5AE2B079EE3125B617 /* MBLAccelerometerBoschFormat.h */, - BC3CE63F66ACC9ECA525B2C889395E9B /* MBLAccelerometerBoschFormat.m */, - FD5DC3572BFE19B2936387A0FACF2149 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */, - 05F20F10D01757768F6504900F09E5B5 /* MBLAccelerometerBoschOrientationEvent.h */, - CCE5B9B41483C36E8C622F930C9310BB /* MBLAccelerometerBoschOrientationEvent.m */, - 2AA27DD31D148E7D4FE4B088798FD73F /* MBLAccelerometerBoschOrientationFormat.h */, - F906C88D677F6440EA3F1A5FA691E7D4 /* MBLAccelerometerBoschOrientationFormat.m */, - F12B911756D24E4437801B5DC7B003EC /* MBLAccelerometerBoschPackedDataReadyEvent.h */, - DA6E5CE6CE505DF838D77C452AD13B6F /* MBLAccelerometerBoschPackedDataReadyEvent.m */, - EBA10E6994425E3176CC4206DFB8741C /* MBLAccelerometerBoschRMSFormat.h */, - 988D40BB92611BCE21D54846268F245A /* MBLAccelerometerBoschRMSFormat.m */, - DB5898A42A321FD0618A921C0E77E8A4 /* MBLAccelerometerBoschTapEvent+Private.h */, - 53EE9E0F92480BAB83C39FD641139F64 /* AccelerometerBMA255 */, - 672675BFE4E23661663E014B459F8555 /* AccelerometerBMI160 */, - ); - path = AccelerometerBosch; + A4A3EB8FD8AB46D8A8A3E0E7BA2BD3A9 /* AsyncUtils */, + 3CA388A0601C60A04964D3B3CB5E51A7 /* Core */, + C277C16304A35C32BBE45C1E3D79A112 /* Mocks */, + 7560F4B81553C8BF124FB63FF1F5DE69 /* Pod */, + 00DAE1784C337140EF057442E9C8D8B5 /* Support Files */, + F2DA43A6DDC2553221A986A419ABD96C /* UI */, + ); + name = MetaWear; + path = ../..; sourceTree = ""; }; - 316DE1DF0EFF16F0BA91383150A2E044 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */ = { + 7560F4B81553C8BF124FB63FF1F5DE69 /* Pod */ = { isa = PBXGroup; children = ( - E4B1A1FBAE850F03A849FAD0119AB5B4 /* Info.plist */, - 9742179AAB1CA120568E4E5F3166A262 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap */, - 72719947DFFD1CE465ABCF26C079567E /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown */, - DC0744A2E6338C410DA551C06E11E55C /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist */, - 76C91F3C8F5D04D087E0A9FA281193B5 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m */, - E204C43B60ED89EA350BB1CAE65A6551 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh */, - 60F23F6EB34D2465E50893792CF3BF25 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh */, - 1DAE74CFD55BE7FCB07DE2A22CCE24E5 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h */, - 6F9197F2BE7F3786B0E3EA0800869EFC /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig */, - 3316317DA6A7A83F1DABCD1D09831A1B /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig */, - ); - name = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; - path = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; + 97EB2B045A99C2C928869FB0B34B0EAC /* _index.scss */, + 2A3B003C2DFE7BF1303BA9C79FE30CEE /* _layout.scss */, + 4D7A49244E97A3681E878DC978B44D3B /* _normalize.scss */, + 34DF8690647128CF747A18E6C2A3B0D0 /* _object.scss */, + 9856E8FB8B810E380564A3CA90923D86 /* _print.scss */, + 7C9F8FC61ED5ED63EE0BC12C2F3B70FA /* _variables.scss */, + 3110D4F29F4939B331BA3DE7CBD93777 /* _xcode.scss */, + 8706F18B8F3CDE019087AE1B20857249 /* ajax-loader.gif */, + 7C5D1E2C3D4937EA68C6088E5822450C /* badge_only.css */, + F75A61590D622B53FCDC5B3C15E03856 /* basic.css */, + ADF54CB52C3ABCB80505EF30F76268F9 /* BFExecutor+MBLExtensions.html */, + D16DAB578B737936BF6962CF9E54139F /* BFTask.html */, + AA12F25E7F88CF0B20B517FAA9D4DF07 /* button_bar_background.png */, + FACCC8C428108BD5E6C5E487ED382A89 /* comment.png */, + C16BD3D9EDD8EB87EE1DC75A24665511 /* comment-bright.png */, + 546E629C97767156AC9A9B49E3594818 /* comment-close.png */, + 7611AC300A31C6DDDF2ABE9ED299CA37 /* conf.py */, + 7635660F953D911A2D781EFEEEEA892F /* disclosure.png */, + BD466D110ED928D07D728E3ED95208F6 /* disclosure_open.png */, + D25EBE53494D758DB3CB78E2403DCCD9 /* doctools.js */, + CC6A7883A09EBA7E48C12D70D538AFD3 /* documentation_options.js */, + 9351F17519CF4667C5A9F4ED278C4D26 /* down.png */, + 416C01C0947BDD9802EC0C416EC9BF52 /* down-pressed.png */, + 3BAB95B24CEFB2216423263B2F6C4D12 /* environment.pickle */, + AACF78CD875F60708898FEC9B8D0F896 /* file.png */, + BB657E01D53B91E5C2025F409EE79341 /* fontawesome-webfont.eot */, + CC72940F0D96C27CEF22C8C89C1CD22C /* fontawesome-webfont.svg */, + 10F8E5E31C218185FB0E128EDC33C27A /* fontawesome-webfont.ttf */, + ED3C769D328FC40F3B23DDE7A9764CFE /* fontawesome-webfont.woff */, + 92D4723CD9F80E1CBD10BB878B33199B /* fontawesome-webfont.woff2 */, + 284B4A6F6E39D90D6337E081DA3B0812 /* gen_api_reference.sh */, + 8CCC781F822557D57EC68EEAA7AA8410 /* gen_api_reference.sh */, + BDF39EB8BCD91D9022CA39969105AAFD /* genindex.html */, + AF6161C0A9C2FBFF67EFB12369DE3F85 /* hierarchy.html */, + E04ACC3B28579B1D43C0C14F9515D5EF /* Inconsolata-Bold.ttf */, + 47CEDAFFE6C4CB3D1AB0C6349D13B5FA /* Inconsolata-Regular.ttf */, + 2876A82CCA679D66AE8319F4C7E86373 /* index.doctree */, + 2B0C2BC1E24C581855B34E2C0275F1DB /* index.html */, + CF27EA308EC035F99FD55C80DC6F48A3 /* index.html */, + 28377486B1AE9D151AFEC30E9F6259BE /* index.html */, + E23471A307615D81C0E013AA0C031BD9 /* index.rst */, + 4415884ECCB7AE0764CAA265AAF4159D /* index.rst.txt */, + B9DB7B50CD89784148792030F07C5024 /* jquery.js */, + 40BF6C6A0FEDA4DFF9CEAD42ED2281F4 /* jquery-3.2.1.js */, + 6C88ECC6E463BE960178E950DF7C7E5B /* Lato-Bold.ttf */, + 6C9DD81FF1A8E78242F5803924BF2BD0 /* Lato-BoldItalic.ttf */, + 6203AC6028A7572E52B5B01AF085BD98 /* Lato-Italic.ttf */, + 04B9EEE405C514BCB4F73E139A274538 /* Lato-Regular.ttf */, + E339DE730E4FD6F7F7456077054ABB73 /* layout.html */, + 1279C736014DD5FFA015C2C9FCA9ED0D /* library_background.png */, + DC2E1208907C08474DDD29A908141761 /* LICENSE */, + 828B24087C6AAF197EF911D9FB2D6672 /* Makefile */, + D60CA57C6B4F75BBDE2638293AEF261D /* MBLAccelerometer.html */, + B81FDC55651EAC43BCE5D7DD163C478A /* MBLAccelerometerAxis.html */, + 56C7C03696EF6F13667F6C690FB8CDD9 /* MBLAccelerometerBMA255.html */, + 144A33146586D80E595456D7FA762F5F /* MBLAccelerometerBMA255MotionEvent.html */, + 5039379A2661F404DA56621E40AF94EB /* MBLAccelerometerBMI160.html */, + ED2B6A4064162681467B89484AE73313 /* MBLAccelerometerBMI160MotionEvent.html */, + 36BA56DE9428635EE783CD7EB626B05C /* MBLAccelerometerBosch.html */, + B1219D30097FBEBA3C94B3C30CCDD0EE /* MBLAccelerometerBoschFlatData.html */, + AD0D98D5F395C66B45D645F2D34DCD97 /* MBLAccelerometerBoschFlatEvent.html */, + 6010474B46BE6F4981080BE3A52E3A98 /* MBLAccelerometerBoschFlatTime.html */, + 78512E0CF77AB3829ACF14DFCD5E0A21 /* MBLAccelerometerBoschLowOrHighGEvent.html */, + 61667BB723C754370E8D90CBD5D4C71D /* MBLAccelerometerBoschRange.html */, + F947481C1C7FF189BD55A476AE4F69B8 /* MBLAccelerometerBoschTapDuration.html */, + 2F8B78FBF9264569E480AC71F3022D08 /* MBLAccelerometerBoschTapEvent.html */, + DEE317798530342DA8A13844DD62F8F3 /* MBLAccelerometerBoschTapQuiet.html */, + BC34CD80D60AD90CAAAC950FA4031972 /* MBLAccelerometerBoschTapShock.html */, + CAE37AE698E88ACAD4DC141A8B285F34 /* MBLAccelerometerCutoffFreq.html */, + B7D91230EF89EB32D557B88640790C40 /* MBLAccelerometerData.html */, + 534CA9369313E93EB921DD890CCBA9F9 /* MBLAccelerometerFacingDirection.html */, + F7A41AAF7E4EB252150FB1025C4FB518 /* MBLAccelerometerHandler.html */, + 0AD367817FFA9A2215311BC65D7E25AB /* MBLAccelerometerMMA8452Q.html */, + 802E04888760B1537AA0B65E4F1EF78C /* MBLAccelerometerOrientation.html */, + E7EB771DD6FEE884EEC99D3E68000B76 /* MBLAccelerometerPowerScheme.html */, + 2D828F6ED2220B60641C3A385A62528C /* MBLAccelerometerRange.html */, + 476F80F9C060E5C0AB90B8C7CA652D08 /* MBLAccelerometerSleepSampleFrequency.html */, + 2E0F31138CE5CE79A7CA90F961C39363 /* MBLAccelerometerTapType.html */, + F1708C1B6853985E89FF7F09FB889ED1 /* MBLAmbientLight.html */, + 286F5E5CC7DD5293F5716A3458A3A4A0 /* MBLAmbientLightLTR329.html */, + 390AEB7172C87A8ABB81C9EFB4785701 /* MBLAmbientLightLTR329Gain.html */, + 84CEDD0976BEF72826B195E5577F9940 /* MBLAmbientLightLTR329Integration.html */, + DC519413C55CC83EE4CBB41DB666CF3A /* MBLAmbientLightLTR329Rate.html */, + FF9EBFEAE09B1F5E1EBF6C1CD45FB60A /* MBLAnalogReadMode.html */, + BBE21CE54FED38CB658F8DEE794CA269 /* MBLANCS.html */, + 2F8D4EF839C0544F0B2ECE9AAD3699EE /* MBLANCSCategoryID.html */, + 9DECAEB140DED8ED1C4C5ED0B66BF79D /* MBLANCSEventData.html */, + AF2C5B03ECA79DEBC2F2B50D9D905EFB /* MBLANCSEventFlag.html */, + 2B3B987F6C3DB81CD9222971F397FCB3 /* MBLANCSEventID.html */, + 36CF7185434DDAA3375939572580C558 /* MBLANCSNotificationAttributeID.html */, + 1196555855ACC3D415886D16DA3C2697 /* MBLAnonymousEvent.html */, + 4202A38531A5F241B16C77D5E758F4E2 /* MBLArithmeticOperation.html */, + 8B44FFC3E844745DB54F8F901F4CC117 /* MBLArrayHandler.html */, + 462BD5D6B1A2D23CE59764974A984046 /* MBLBarometer.html */, + E7D8B7B46020266F8E9CD877186482C1 /* MBLBarometerBME280.html */, + 7EFAEE1DD0D043EEDE1A682E8BE5CA25 /* MBLBarometerBME280Standby.html */, + 2A9C56DC2C105C364D5B518FCDD49076 /* MBLBarometerBMP280.html */, + 05379BD97460300843D3FBC7D680CB87 /* MBLBarometerBMP280Standby.html */, + 54A90763F0AE07A7C425334A9A130FC2 /* MBLBarometerBosch.html */, + 08ACEA0EC6628DC3B276B9ECA6A62BEE /* MBLBarometerBoschFilter.html */, + 49205E57F906E181D8FBE66F0BDD6396 /* MBLBarometerBoschOversample.html */, + 323A4A2EC826C62C5FEB2F183EF55F8B /* MBLBMI160FilterMode.html */, + 6DFAD7C475E651F8FA4249D7CC4D42E1 /* MBLBoolHandler.html */, + 3E1C90244D3201D1A6AF1B64007447B0 /* MBLCalibrationAccuracy.html */, + 4854153EAC949C2DAF0FBCCB81822784 /* MBLCentralManagerStateHandler.html */, + FC1496E8EFDBD4D4D25A3223585BED20 /* MBLColorOrdering.html */, + EEF90505B26DB812496AD81CC1C27F17 /* MBLComparisonOperation.html */, + 124C4E1DCF4F23F591D3A0FD34B983F6 /* MBLComparisonOutput.html */, + BB54CAD0406267890D7E456B18B08CE5 /* MBLConductance.html */, + 54A22C2782B1C0C819A8C6C89D54D6CF /* MBLConductanceGain.html */, + 40A5845BC83C2E50CBD33B4B11397D33 /* MBLConductanceRange.html */, + FD113CD5D3759D2B7B070CF9E76EDDF6 /* MBLConductanceVoltage.html */, + 936451DCEA13546D6BE6E5FFA458347C /* MBLConnectionState.html */, + DE2E973AA59062BFB4BC5A0508A4D5F9 /* MBLCorrectedAccelerometerData.html */, + A0084E9B421EE009FB73F5F108351CE4 /* MBLCorrectedGyroData.html */, + C012ED63F904055460A33B0501436CA3 /* MBLCorrectedMagnetometeData.html */, + 18258ADE5BF8836097C56D26592629B8 /* MBLData.html */, + FAF73B6BEF05A0FFE34C4BFF663D564F /* MBLDataHandler.html */, + 16D8FA9DB16A056D1184A9D39F2CF698 /* MBLDataNotificationHandler.html */, + A56B08D73511BC75F1F7A6603D469DB0 /* MBLDataSample.html */, + E811027370D8719568194C65349B1746 /* MBLDataSwitch.html */, + 7D23F8746D820815E172F36BAC2CFA22 /* MBLDecimalNumberHandler.html */, + 8615C73E8660C084F5B1FF7770B6A10A /* MBLDeltaValueOutput.html */, + B4FCE0E7F0E726EB847022BF1BF48A30 /* MBLDeviceInfo.html */, + 5049F9A6F027739FFD413A63653E8620 /* MBLEntityEvent.html */, + CA149339E7773AFE1CF574C5A0CF422B /* MBLEntityModule.html */, + 84929BD8F880EF879B8F16D92DAC6B50 /* MBLErrorBlock.html */, + 78126490128D25ECCD974BF203258C6C /* MBLEulerAngleData.html */, + E6B0A4DA0CEB36E84829B2DC3E0E30E4 /* MBLEvent.html */, + B64A1AE3BB22076191888EF58A22F449 /* MBLExternalThermistor.html */, + 2BE718E934BC39C97AD5E2837E249A27 /* MBLFilter.html */, + 585E1A8F08EEB8811014157B69C31D5D /* MBLFirmwareUpdateInfo.html */, + 2C9800D5CDCE16198DA3ED62EE50AA0B /* MBLFirmwareVersion.html */, + 307665585CE41CD48896CEFF922CF592 /* MBLGPIO.html */, + A35623B9EF0544A2D8E438A2CD4B76ED /* MBLGPIOPin.html */, + 212F9A566555D55921AA2260DC39A008 /* MBLGyro.html */, + CBD239E3C57B4340F230A30612B49C5E /* MBLGyroAxis.html */, + 6D76A8C38CCE3D14D143CA80FE197E7D /* MBLGyroBMI160.html */, + 0FBBB5230FF85BC2B7980D00FC64CD92 /* MBLGyroBMI160Range.html */, + 074E08A211E345FD32E02B722A712C5B /* MBLGyroData.html */, + 58CDAEAACBA394AEA56B73D12D13F8D9 /* MBLHapticBuzzer.html */, + 0D281C2C0AB78B7AC04AB6D56652BD40 /* MBLHygrometer.html */, + E2CC13195E4BA07D4E0C45FA6F85411F /* MBLHygrometerBME280.html */, + 2BCB9415435C7AB5140138BC1EA46704 /* MBLHygrometerBME280Oversample.html */, + BF330D6FE956A1D589D8A8860EA73154 /* MBLI2C.html */, + 7029E72314B132D43FDFA47549C85FD2 /* MBLI2CData.html */, + 2EE572DC7C528046DE3640C3CBF27016 /* MBLiBeacon.html */, + 2BDA474B496651F2E06B88718CB964BA /* MBLiBeaconTransmitPower.html */, + 5C0A95FCF8D76DCEF9840C7D0346CA0E /* MBLLED.html */, + F07E6586BCC4481D5EFC5B0DABF699F6 /* MBLLEDColorChannel.html */, + B83D13D00BF66865A8AE9CC6CC71891A /* MBLLogLevel.html */, + D52B44AEC007834C75B70564C1C44875 /* MBLLogRemainingHandler.html */, + 0737BFE81332AB8FBA688B06CBCFDEFC /* MBLMagnetometer.html */, + A0226D49D32B5062FBBD8850B9C86E5F /* MBLMagnetometerBMM150.html */, + 01D52C2E45BC936FF4AB1D0E40763B4A /* MBLMagnetometerBMM150Preset.html */, + D389E7FF73A3ADA791ECBE58D9048097 /* MBLMagnetometerData.html */, + 086A7DCEF62D797B49729EF161EFAEE0 /* MBLMechanicalSwitch.html */, + 4B70937C31CEC0BCA790C3061A8E2C96 /* MBLMetaWear.html */, + 99EC49F29652400A0032121DC4C6C174 /* MBLMetaWearManager.html */, + E7BBEAD096BE4EBB2BD3DD059086F703 /* MBLModel.html */, + 93561C60735D757CFEB0726C4B0B10A6 /* MBLModule.html */, + 5F20CCA1080D95AC2685FCFE88CAFA8E /* MBLNeopixel.html */, + 86E0388FAE85AC6F327B64085E2874AC /* MBLNeopixelStrand.html */, + D1A500B5923AD88C4C0B929AFAC78532 /* MBLNotificationHandler.html */, + C9AE782CE6D24BD908587C0786B6155B /* MBLNumberHandler.html */, + 24466BAD077FC4399E2267E2D2D376DA /* MBLNumericData.html */, + 4F7F8ECC52D2095B93F8F28622E85477 /* MBLOrientationData.html */, + 0F3DA01845CCC8EF4095C821682AC2C7 /* MBLPhotometer.html */, + CBC155B27976C90466F81D8B0A272CF1 /* MBLPhotometerTCS3472.html */, + 63C0A966C9D2B0230B7C3A9DBA900040 /* MBLPhotometerTCS3472Gain.html */, + 4BB7BE34183B121BB5BB03F3B7D8DA55 /* MBLPinChangeType.html */, + E91EE43985C266185345FA0155C456D6 /* MBLPinConfiguration.html */, + 4A0AAD6C234CD1B7A057BBDB758F1D27 /* MBLProximity.html */, + CEC545805D751A5C972ED91D1325FF3F /* MBLProximityTSL2671.html */, + D6FEF3AAEF8FB2320D371F03FEA1CD56 /* MBLProximityTSL2671TransmitterDrive.html */, + F1078A41F31E195EDA693B08672AFA72 /* MBLPulseOutput.html */, + F06016114C77514BE44F29A7F8C329C1 /* MBLQuaternionData.html */, + 8D99AB5185B5A18A44E9A6737B20577C /* MBLRegister.html */, + FF05433A7BC182D73D8584070B66B27B /* MBLRestorable.html */, + C63CC5DD0B1327893C59A98FDD0383A5 /* MBLRGBData.html */, + A226C67538A554288EF59597D18E6F89 /* MBLRMSAccelerometerData.html */, + 360A270AD42F634D311376029E79307E /* MBLRotationDirection.html */, + B1EC2046690B94B05B26D8412F1702DE /* MBLSensorFusion.html */, + 83D0D061B70942D7D21B3F65A7FD29CE /* MBLSensorFusionMode.html */, + 73773D924A89C1E9AB93E8F17326075A /* MBLSerial.html */, + BAE4FE07E1C3FFEDAAD85F515E91C8EA /* MBLSettings.html */, + 78748BDD9FFF9A14842BA5570DF1F905 /* MBLSPIData.html */, + 96FB3E0F7A75B50B55A0226778BDBAE9 /* MBLStrandSpeed.html */, + 0B21AC4E28269259DC1E7F16672E91C8 /* MBLStringData.html */, + EE65C167DB35A0CB62A062AD89F8587D /* MBLStringHandler.html */, + 267B9BFB43936B8A1F8F089F1CA8D6F7 /* MBLSuccessBlock.html */, + AD577463773AFADC54ADA55DB726687A /* MBLTemperature.html */, + 9F649CC7DF130FE79A3D89BB09895F5A /* MBLThresholdValueOutput.html */, + DFD169C7C8224F15D9C2CF9C37A2B978 /* MBLTimer.html */, + 057F8AB82064BC5B4E6E558667C71A82 /* MBLTimerEvent.html */, + 2074260BBDC712E4A6058966312A29B0 /* MBLTransmitPower.html */, + BA50C23F13D67CCE58236F733A0D64FD /* MBLUrlHandler.html */, + 7DA08702C225F41628CCB9A097606AAD /* MBLVoidHandler.html */, + BD7470128AE0031029EBF587D53D0BCF /* MetaWear.podspec */, + CE9B5E6295C40FF6F99DBC89B1166449 /* minus.png */, + D85291666C9C85CA66AECE892ECB6B54 /* modernizr.min.js */, + 8CF7DEF4AB8BB21EF312CE14AD791082 /* objects.inv */, + 2DC03425927039B06E86AF56E26EE0CA /* plus.png */, + 588ECDCB1395901F31C88192F30922FC /* pygments.css */, + F50C3640A838BCBB46D8CF23513D3007 /* README.md */, + B8116B0DA13696D0ED387F9A8DE7B004 /* RobotoSlab-Bold.ttf */, + 8E05445F23AC388AD0C5B7286F5C3FB4 /* RobotoSlab-Regular.ttf */, + 8B57E16E0559EF261C49CD6ED9BD11B9 /* script.js */, + C7B0C5BCD6957DDD27DE75BD1234FA1F /* search.html */, + 0492263FB0860873484C0EBB0A3F9483 /* searchindex.js */, + 261E15B9A189FDC032EF0C982C6CC0B1 /* searchtools.js */, + 05C19909642C71AD05718425F515FDC3 /* style.css */, + 8D86AF3C0BEFEFD447E283E23DFFBFF1 /* style.scss */, + 67404A7A57B76FE39D4E138021CEB794 /* theme.css */, + F991F106B384C1650B23A6749D396B1C /* theme.js */, + 9239C764D1933DCCBA6A7EC6D5CF4612 /* title_background.png */, + B904E64B2B5A8C9A27EA09B8F935B698 /* underscore.js */, + D9BED488100335A367F523F2DAC37E31 /* underscore-1.3.1.js */, + EB520BD41AD876A595B8178F5106B2E0 /* up.png */, + 6BC58E36191CECF7987AD5864ADE841C /* up-pressed.png */, + CCFA2CA5A3EE62CB726950C4F7E84E44 /* upload.sh */, + 410829F7F590EE0D9D34C429EA346CD1 /* websupport.js */, + ); + name = Pod; sourceTree = ""; }; - 334F166F54C1AC92980928563EA1F40E /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS */ = { + 770002BF34683729E89F938C31725F7B /* platform */ = { isa = PBXGroup; children = ( - 42F7056C9BB353145272A8D34A96CD8D /* Info.plist */, - D633E42D18A3857B8B2BFD7976D967DC /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap */, - 09DDE791F116F87BA6A96A04CED94DFB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown */, - EBEC212D44D43B47238899E8C471B834 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist */, - FD0678238589E8C13FE790345E57C574 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m */, - 0F94CE541B92311CC4E47F30CBED45CC /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh */, - 343B3692025AE4F38AEAEC77048BB979 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh */, - 2706954377653812FD06C3E316EE5232 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h */, - 4908104AEC6A7B88734A8D4E5AA92C6D /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */, - 4A6F1CE1F4BCDD73772EF425AE6D9585 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig */, + 7A03BF955A479F01FB29556F9547EDA6 /* cpp */, ); - name = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS"; - path = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS"; + path = platform; sourceTree = ""; }; - 34AFF3552BF96E3A8F6EB56CBFB51522 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS */ = { + 789E056146739D62EAF821A946200CC1 /* iOS */ = { isa = PBXGroup; children = ( - DA2F44F7E9F9EE61C3C5A26ED8A8050C /* Info.plist */, - DA9014116B9939EB265A41191D67F069 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.modulemap */, - 858C9D6C80314D5D2A2684B605ED326F /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown */, - F8377C35EAFAB0104A5A3DD36FB8ECE5 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist */, - 430EB1426581F605F9AF827458707760 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m */, - BF2E767804BD42B576C2524C72D082F7 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh */, - ECE2D48F521913315EA2CAD6D1DBFD62 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh */, - 5B916B04CDA309B8322D3494A89A559E /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h */, - 8266A1A9F7A6E2E88A09CECB83CCBEEE /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */, - 074A291A191B13334260DE0EA07DE8F7 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig */, + A8403836D213E20B9E6DCF6B9B510490 /* CoreBluetooth.framework */, + 03D5966C8939BFD113EB9D035C794739 /* Foundation.framework */, ); - name = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS"; - path = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS"; + name = iOS; sourceTree = ""; }; - 351FB4016753F5C43103AC4EB159967C /* Gyro */ = { + 7A03BF955A479F01FB29556F9547EDA6 /* cpp */ = { isa = PBXGroup; children = ( - 85CE3C145F9D23BF8E0DB8462C048C88 /* MBLGyro+Private.h */, - 7C76EB125E555C3CEEAECE10EB48F4C5 /* MBLGyroData+Private.h */, - 816576B9D81026BEC7A9C3F672648A1E /* GyroBMI160 */, + CC51D8C20E056DD5444916DF631736E6 /* async_creator.cpp */, + 2A41E41020280AE830D0C743267F4744 /* memory.cpp */, + 7D9FD19B7C8CFDEF53C2D6864760B129 /* task.cpp */, + 151015D50ACCAB5DBE22A5BDE217457A /* threadpool.cpp */, ); - path = Gyro; + path = cpp; sourceTree = ""; }; - 35D0714EE8EC574A4EBA540D9D25EDC6 /* Pods */ = { + 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( - 2EBAE173418A9B63BA771A6E82CC82D5 /* Bolts */, - 0BFF115DAC2714764AEA4C3D41EDB4A5 /* FastCoding */, - FD1E944ABC8BD3FD4818C8E213969B7B /* iOSDFULibrary */, - C598B6F2D76636B6D7B7AD520C4920A0 /* Zip */, + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 4B4B8F7F6036C9743CC5D30624775884 /* Development Pods */, + B375E741859866B1B5A4099D3452F8E9 /* Frameworks */, + A7DCE56487208E3BDE0BAA73EC63E368 /* Pods */, + 984DD25FA52FB8D804F253867C7B9AD8 /* Products */, + FABB76BDAA3AC2DFC29D82BE1C7CAB19 /* Targets Support Files */, ); - name = Pods; sourceTree = ""; }; - 3DCF97439C08C7A9CCDB8FE6EDF54FC8 /* Support Files */ = { + 7FD67A7D4AFAFC531B966D045BCBD441 /* cpp */ = { isa = PBXGroup; children = ( - 68873A6DCD20DAF4599FDEDCE1E51CD6 /* Info.plist */, - 9977E32052A13484C58D0C63FFDC0CFD /* Info.plist */, - 3FEAA728EF8F14225F062B87F3B7F1AF /* iOSDFULibrary-iOS.modulemap */, - 4114264FBB639E4DDB300CBAB7ECF23B /* iOSDFULibrary-iOS.xcconfig */, - 74C49FFC30D80AD94423AB0318601C46 /* iOSDFULibrary-iOS-dummy.m */, - D7967BAF7931F027BAE955610A758EE9 /* iOSDFULibrary-iOS-prefix.pch */, - 4E94043F221F15741ECDB1C913090A4E /* iOSDFULibrary-iOS-umbrella.h */, - 1909D25EF7BF2BB24FBB1AB22CE4F1BD /* iOSDFULibrary-macOS.modulemap */, - FB441AC5891DDB749070A4DEC74B4B13 /* iOSDFULibrary-macOS.xcconfig */, - B6E223E489B7EAE8996BDDE53C67E45F /* iOSDFULibrary-macOS-dummy.m */, - 9546553D3384341D486A3FAB7C84D155 /* iOSDFULibrary-macOS-prefix.pch */, - 6FA81A82BCC1EAF9DFAE8911FB00826D /* iOSDFULibrary-macOS-umbrella.h */, + 263B0B60310737A9FF3C124DE53AFFB7 /* haptic.cpp */, + FC2B233BDA0CDDBB0162B7D4960DA961 /* ibeacon.cpp */, + CAF2A8E429407A78576C79FC06722F77 /* led.cpp */, + 4B31127F6A9B12AD9FDFDD7E6C51BDE3 /* neopixel.cpp */, ); - name = "Support Files"; - path = "../Target Support Files/iOSDFULibrary-iOS"; + path = cpp; sourceTree = ""; }; - 3F9FBE34BEDA9843F448A912B4660F96 /* ANCS */ = { + 8193E3AFD2BA5A67712CF8AD539D56DF /* bindings */ = { isa = PBXGroup; children = ( - 3EE8DF0E51109F6D1252C1F61309AA51 /* MBLANCS.h */, - 0CC808F2321E7A48AAF53E821EB9FE8C /* MBLANCS.m */, - 510DD17398465B0992EB321F5ADC3AE1 /* MBLANCSEventData.h */, - 78A46EE93080D885BFF6F8471DA8A012 /* MBLANCSEventData.m */, + 10514F5395F2D8BB565900EEDEDB89AC /* swift */, ); - path = ANCS; + path = bindings; sourceTree = ""; }; - 3FD4A702DA1D91C1C90A3B3F3E631805 /* MMA8452Q */ = { + 8219608CB9D96AE08DFE464EC1617257 /* iOSDFULibrary */ = { isa = PBXGroup; children = ( - 9D97DC608F174F938F952EB74C98E824 /* MBLAccelerometerAxisReadyEvent.h */, - DC7D0B2E65A380068EC3FEF2957C2A44 /* MBLAccelerometerAxisReadyEvent.m */, - 67C2F6BF2281EB44559A63F5ED570D37 /* MBLAccelerometerDataReadyEvent.h */, - F9C227AA6932602ED1E3B2AFC30A1D10 /* MBLAccelerometerDataReadyEvent.m */, - 841ACC84A92CFE5A492E2328EDB8410E /* MBLAccelerometerFreeFallEvent.h */, - AD8EF5FF275DB50EA6F98F6CE294C071 /* MBLAccelerometerFreeFallEvent.m */, - C5DE43A24BC32E8EE90C94105AF19F80 /* MBLAccelerometerMMA8452Q+Private.h */, - 9447C9E2EE7B1F292D335549BCE3E09E /* MBLAccelerometerMMA8452QFormat.h */, - BBA69F3B3472ABC188162666FEA7E552 /* MBLAccelerometerMMA8452QFormat.m */, - C23EE3F1FACF9A4C1ACF113B7106D470 /* MBLAccelerometerMMA8452QOrientationFormat.h */, - 42C630E413E950FD8E86077705094243 /* MBLAccelerometerMMA8452QOrientationFormat.m */, - 8861AD6B7644BD4E708D2AA334947E1C /* MBLAccelerometerMMA8452QRMSFormat.h */, - 5D8A748BF8ED64C13C94BBC174818A7A /* MBLAccelerometerMMA8452QRMSFormat.m */, - 81E1EAD5716B33481AA8D4749144206A /* MBLAccelerometerOrientationEvent.h */, - 5BC673AC71BD95CD9BF86FDD6371BE59 /* MBLAccelerometerOrientationEvent.m */, - 568C305A82820552CFE0C4605EBA0459 /* MBLAccelerometerPackedDataReadyEvent.h */, - EAAE3E2C5294FB4D702F158809A0913D /* MBLAccelerometerPackedDataReadyEvent.m */, - E95B4734AA96D0221CFDDE954406F997 /* MBLAccelerometerShakeEvent.h */, - 781A18BA1418D9C811A289311EBFC8F9 /* MBLAccelerometerShakeEvent.m */, - 80BF935A14C1AE875BBF10E6B3505F06 /* MBLAccelerometerTapEvent.h */, - 69F3741316EE19AD0AE240BFCE27C008 /* MBLAccelerometerTapEvent.m */, - A2F0E57E1990CED91D153D6BCA97B4B8 /* mma8452q.h */, - ); - path = MMA8452Q; + E70959117815002F51A0AAAD41C4AECE /* ButtonlessDFU.swift */, + 8FB95CF28FEFDF373A66C344F5C15874 /* crc32.swift */, + 0646800EECED1BAF4AC13CB9E3866330 /* Data.swift */, + 5D9D78A668A89C64803144239FD3E9BF /* DFUController.swift */, + 50C10FB5C18BC3D9B6CBB7AEC5F0B6CF /* DFUControlPoint.swift */, + 9D6FEC3C86DBBC69C0D23FF4C84222E2 /* DFUExecutor.swift */, + 436FDBC3E5D46266015EEE80C9B342B5 /* DFUFirmware.swift */, + 6DBE3E77D7E156330FD7558A2651C6FF /* DFUPacket.swift */, + EBDE9A1CA6F13D55B0E00898C7C1E25E /* DFUPeripheral.swift */, + D51AA130BE255802CC44122EFBD9D837 /* DFUPeripheralDelegate.swift */, + 78169E520778F3CCC6BA3B12B3192ACC /* DFUPeripheralSelector.swift */, + 20414AC783F2C79421FC802B17AF6B37 /* DFUPeripheralSelectorDelegate.swift */, + 02B0F8DB23E56A44D8EA9A43AC7C5CCF /* DFUService.swift */, + E7852608063A2F0EE91A0044583622FB /* DFUServiceController.swift */, + B30A8904C199C5E7BCDB0709DF06AE8D /* DFUServiceDelegate.swift */, + 77BD5E4E466C25D780F8005383032CF0 /* DFUServiceInitiator.swift */, + 8C5C6DFB62084D2404EBF1C9A10B7C9D /* DFUServiceSelector.swift */, + 8D9F6E07B310AD2A19E55F6D09AB5096 /* DFUStarterPeripheral.swift */, + 9334FCD6A7AACF6835FD3F779309FA4D /* DFUStream.swift */, + 67D3CE7C33CF5DDCCFFACDB7E73DF3EF /* DFUStreamBin.swift */, + 4AB0C476B4DF7448961AA16E2943837B /* DFUStreamHex.swift */, + 5394449ACFB624056F0385758C7EA263 /* DFUStreamZip.swift */, + 707D5C5A850374E84093B35D5F050ECC /* DFUVersion.swift */, + 93F964DDAC8BD026D683BF54FD168B21 /* Double.swift */, + 4C877840A3F8F69B16D4815B289EE4B4 /* IntelHex2BinConverter.h */, + 8F92E58A3F6AB05594E04E312A87C225 /* IntelHex2BinConverter.m */, + 1482265587727D68E5B335B391869EEF /* LegacyDFUExecutor.swift */, + 67A004C058CA6A4E4E5785CE990A602E /* LegacyDFUPeripheral.swift */, + 8E8FA59A59519F6DB0472AB4DA158B04 /* LegacyDFUPeripheralDelegate.swift */, + 88DEA0BED980E224B35BACC8CDC6A84A /* LegacyDFUService.swift */, + A30B865D115DD7F25E61ABE2A186A488 /* LegacyDFUServiceInitiator.swift */, + 5997402F4329D853E7BCB603CE25BA3F /* LoggerDelegate.swift */, + E411A5E5593092129FD8DBF4E70F00CC /* LoggerHelper.swift */, + D64A71884F6F13BA5601C13B4DAB2265 /* Manifest.swift */, + 0F94A36E3AFA6EBEF7FB8A34A4352175 /* ManifestFirmwareInfo.swift */, + B70E25EA2DB1CFC2D6487AB5F682F08F /* SecureDFUControlPoint.swift */, + 6CB4B0FE993F664045BAA9B5D5C572B7 /* SecureDFUExecutor.swift */, + 84FA3557295165787949D6D36AC9699A /* SecureDFUPacket.swift */, + 9EB8744344934AE9EE2BF17D3C397A42 /* SecureDFUPeripheral.swift */, + 6B7E1599FB05F27AE17850BDDC7A9426 /* SecureDFUPeripheralDelegate.swift */, + 1641E74D80DF7148698DE7B1F574FCB4 /* SecureDFUService.swift */, + 5D659A54AFE195D24B85CFC70F8F6734 /* SecureDFUServiceInitiator.swift */, + 5A501F99C53E65214336B57BF8C15FCF /* SoftdeviceBootloaderInfo.swift */, + BC035182E4920C4BF68853295F21200C /* ZipArchive.swift */, + 93D650FA6467F31D659D04DB6B350EAC /* Support Files */, + ); + path = iOSDFULibrary; sourceTree = ""; }; - 4138A7DA3053EB1326081FDD1DAB0756 /* Pods-MetaWearIntegrationTests-tvOS */ = { + 8533AF90819126EEE03CF2A239213E71 /* Pods-MetaWearIntegrationTests-tvOS */ = { isa = PBXGroup; children = ( - 44D9BA52B3B96B5EDB43E0D206ED3869 /* Info.plist */, - 2799BD30062D781BB83761469C1981A4 /* Pods-MetaWearIntegrationTests-tvOS.modulemap */, - 9D9F27AC6AB836D9EA2E44026BD96E55 /* Pods-MetaWearIntegrationTests-tvOS-acknowledgements.markdown */, - 9415EA9965A6D5B1AEB2660964C616EC /* Pods-MetaWearIntegrationTests-tvOS-acknowledgements.plist */, - 0F2208FDC36513D69B88593F9B7EBFA2 /* Pods-MetaWearIntegrationTests-tvOS-dummy.m */, - 76BD58CAC90630D444F45C5165F3FFD7 /* Pods-MetaWearIntegrationTests-tvOS-frameworks.sh */, - 108BA1446B74F812824110132AE5F595 /* Pods-MetaWearIntegrationTests-tvOS-resources.sh */, - 14F97140194A6FFAF4887995AC14BDBE /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h */, - E2A407E8B8FCC68152BFE4827C4D30C3 /* Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig */, - 8E865202A724C2E7CA60627742396A26 /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */, + 4CE0A304A77CE43DEE4A79DE5CD8D9A0 /* Info.plist */, + 92D99E333EB4C58D0F8D5F9869B15FBD /* Pods-MetaWearIntegrationTests-tvOS.modulemap */, + 06391F1D445F8198E4D614364F41CD2D /* Pods-MetaWearIntegrationTests-tvOS-acknowledgements.markdown */, + 6CD21509EC01C5B8E755BA079CDED9CC /* Pods-MetaWearIntegrationTests-tvOS-acknowledgements.plist */, + DA457849EC8E8226A65817B1A96B66C1 /* Pods-MetaWearIntegrationTests-tvOS-dummy.m */, + 3612B926ACAFB9BA635B260B7115B71A /* Pods-MetaWearIntegrationTests-tvOS-frameworks.sh */, + 0BEABFA048E0E9D6CCB69878A8337F5A /* Pods-MetaWearIntegrationTests-tvOS-resources.sh */, + DD03A653270B8F24D06ACCC4E7FFA544 /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h */, + A7CFC9099267EC880772C85661A5D2BE /* Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig */, + D4EE2A9ECB28B9A3D098F32D9DF9290F /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */, ); name = "Pods-MetaWearIntegrationTests-tvOS"; path = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS"; sourceTree = ""; }; - 43259391D2C64DEE7E1A56673555BB01 /* iOS */ = { - isa = PBXGroup; - children = ( - B5599DBB7CE6CAB36387851BD32B12CA /* CoreBluetooth.framework */, - 95A16C0B5246929397FC32751C828771 /* CoreData.framework */, - 211621B3FC54BF029870FBACC8C1BD8E /* Foundation.framework */, - ); - name = iOS; - sourceTree = ""; - }; - 45EF7A1BA8E94242045AC48EEE8968BA /* Support Files */ = { + 8B292DC29341602222D268E6AB4AD7B2 /* Support Files */ = { isa = PBXGroup; children = ( - 13E861EF7B29CA059C350C8FB334AA43 /* Info.plist */, - 356ED60D172165AC26FD5CBFF0A6FB52 /* Info.plist */, - F61ADA81358BD29F6A7666B1BE1781D5 /* Zip-iOS.modulemap */, - BCC9170647CEAB49B708B47C9BD11B38 /* Zip-iOS.xcconfig */, - BFC36007D603EB397A8D9F35CABC6E62 /* Zip-iOS-dummy.m */, - C1EF115116AB8B59067199C1E099CC9E /* Zip-iOS-prefix.pch */, - 0F7184178920F6BD3FB7315EF3967744 /* Zip-iOS-umbrella.h */, - 360B380C0E48E04ADED1734FF8AF28E4 /* Zip-macOS.modulemap */, - 382E9746B809B1165AE88FD8D3C60520 /* Zip-macOS.xcconfig */, - 261C4F1650F015205EAFB18BA1619FA8 /* Zip-macOS-dummy.m */, - 15041524A279C056B9FE68177A0D399A /* Zip-macOS-prefix.pch */, - C4D3E8D3552BF4D21F94B06673BDD0F3 /* Zip-macOS-umbrella.h */, + 3E38D128DAC4636BC0CC175F0881F8A6 /* Info.plist */, + 5BAE0ABA0A6F538E868254D9F101BE09 /* Info.plist */, + 92A8288C71F90961F65F4365A191DAEC /* Zip-iOS.modulemap */, + 29A92F6A0289BED184257ACBD3631DAE /* Zip-iOS.xcconfig */, + F2B2981664E907326B8CD8F38DB337BE /* Zip-iOS-dummy.m */, + 762C34D2C8717E0CD10CBFB8FB056A1B /* Zip-iOS-prefix.pch */, + 1638CDB3FFAA0FAD1BD741E7A1789DCB /* Zip-iOS-umbrella.h */, + 6743A877F9EFD5B3B72015810B075E8D /* Zip-macOS.modulemap */, + F6BADB08B39E768D55996606A798F6EC /* Zip-macOS.xcconfig */, + 8B75BB7F4B860A1FD268AAA86C08F840 /* Zip-macOS-dummy.m */, + 6CA8FB8C0FBF0E19A1ECEE2B571FEE38 /* Zip-macOS-prefix.pch */, + 74299291E704C4E70B5B938FE71CCD5C /* Zip-macOS-umbrella.h */, ); name = "Support Files"; path = "../Target Support Files/Zip-iOS"; sourceTree = ""; }; - 4BEBAFF444A2A5CC71B2A91F9D4BB248 /* Photometer */ = { + 8E9F7F2736D78ADEA9DFFCE8698E427A /* Bolts-Swift */ = { isa = PBXGroup; children = ( - 315DE6DF9415ACA45A996357360A6099 /* MBLPhotometer+Private.h */, - 54781085AAAF8C81138D0EABE060B960 /* MBLRGBData+Private.h */, - DEAA6241835AA811525C345D8CA9CB48 /* PhotometerTCS3472 */, - ); - path = Photometer; + EF62D1D2496DAEDF7252309D09F07517 /* Errors.swift */, + 451E8B587720F2BEF3BE88868AA9CEB4 /* Executor.swift */, + 5EFC15AB3BD8B826657CD5776901780E /* Task.swift */, + BF432B434BADB6E8392DE30A6AB193BA /* Task+ContinueWith.swift */, + 0BA519C617380F70E744607863ED703D /* Task+Delay.swift */, + BB6565BA5B85EFB397511A3DFD9D7C87 /* Task+WhenAll.swift */, + CB1E7575441476F45722A743BD2EC13D /* Task+WhenAny.swift */, + CC9FAFBC7C89F2F3ACF67B02080B1073 /* TaskCompletionSource.swift */, + D81E357583925D5FDFC304F1FA60CD32 /* Support Files */, + ); + path = "Bolts-Swift"; sourceTree = ""; }; - 521A71B3366508545140B059070BC525 /* Proximity */ = { + 93D650FA6467F31D659D04DB6B350EAC /* Support Files */ = { isa = PBXGroup; children = ( - 49DCC21B1CC2D91B3B63A59EB7E2B099 /* MBLProximity+Private.h */, + F53F8C7409B132E6DA31316781A16890 /* Info.plist */, + CCA31563A6863A27B0140FFB7937B044 /* Info.plist */, + 77C1DCEAA748BFEF258FEB8998977233 /* iOSDFULibrary-iOS.modulemap */, + FCC7F155A239579A1A9EDA4B5235E7D8 /* iOSDFULibrary-iOS.xcconfig */, + 7BBEADCADB6F366F6932BB5F4999C7EB /* iOSDFULibrary-iOS-dummy.m */, + 4ED0DEA8544770D6D05B3A9F0C3A85A9 /* iOSDFULibrary-iOS-prefix.pch */, + B40CF6B087FAD8F23589C6B130F26A2B /* iOSDFULibrary-iOS-umbrella.h */, + 2B5A502C2CC9D4B6026DE3F997ED0B59 /* iOSDFULibrary-macOS.modulemap */, + 97FE0428CAC266D6962FC0DDA09AE0C1 /* iOSDFULibrary-macOS.xcconfig */, + BE0C4936B67E485798B9FADAEFB3F962 /* iOSDFULibrary-macOS-dummy.m */, + 45E35F25EFF05C3924C3CF2956D9FB24 /* iOSDFULibrary-macOS-prefix.pch */, + BD0766CF780610D401CC416B4E794D12 /* iOSDFULibrary-macOS-umbrella.h */, ); - path = Proximity; + name = "Support Files"; + path = "../Target Support Files/iOSDFULibrary-iOS"; sourceTree = ""; }; - 53EE9E0F92480BAB83C39FD641139F64 /* AccelerometerBMA255 */ = { + 96AA8AF6421D4EE35AB52B549897FF51 /* sensor */ = { isa = PBXGroup; children = ( - AC165D8BECA691BFCA6C6045C8C5762C /* MBLAccelerometerBMA255+Private.h */, - 0D04BC1738D891A89974B9F55A4A084C /* MBLAccelerometerBMA255MotionEvent+Private.h */, + C2895A905C466B6F3EFE34EB3985D55B /* cpp */, ); - path = AccelerometerBMA255; - sourceTree = ""; - }; - 544962843747D8DD831ED23FB7999377 /* AccelerometerBosch */ = { - isa = PBXGroup; - children = ( - 0A486169E0D6D95BE461814DD68D9500 /* MBLAccelerometerBosch.h */, - 116BB3AC97B4B082383621A9CB2549E4 /* MBLAccelerometerBosch.m */, - 656D59E1FEA99D19C2D5F3179B85FAE8 /* MBLAccelerometerBoschFlatData.h */, - 8E467C7C82562087AC08D2E87E1D227E /* MBLAccelerometerBoschFlatData.m */, - 8C06DE03D80A35DF40079D0DC1D26480 /* MBLAccelerometerBoschFlatEvent.h */, - 631DC4724CB7F5DB5E12D63CCAA9BE04 /* MBLAccelerometerBoschFlatEvent.m */, - 73BC22E4E093926AE2FD93BAFE2E5B2B /* MBLAccelerometerBoschLowOrHighGEvent.h */, - 792344F36306444FD588737F547C1CBD /* MBLAccelerometerBoschLowOrHighGEvent.m */, - C3F37BD6E8C1B5B209223A4403C6820B /* MBLAccelerometerBoschTapEvent.h */, - FFFD05307348ED7C574EF3859B422B0B /* MBLAccelerometerBoschTapEvent.m */, - 21B4BBB10283CF7188B440DBC241C88B /* AccelerometerBMA255 */, - 78C2DC1ACA2E990782B1D0C0865D4937 /* AccelerometerBMI160 */, - ); - path = AccelerometerBosch; - sourceTree = ""; - }; - 551BC2A0DF129712A4EC6C70D5BCD962 /* SensorFusion */ = { - isa = PBXGroup; - children = ( - E16579A392E68FDA1887AE338EF23A3A /* MBLBitmaskEvent.h */, - 44178045C194F6874F39F04A97D1FEF7 /* MBLBitmaskEvent.m */, - 4EE5F82F8AF57D1593408A9D6695260F /* MBLCorrectedFormat.h */, - 5DB63EFD747A1E47D68C8FDC39ABB0F7 /* MBLCorrectedFormat.m */, - 4ADE0C1303FA4B9E8EA06EAB9FBA1986 /* MBLEulerAngleData+Private.h */, - 85795CBE32C64342DEFEA3F17C5EF7C4 /* MBLEulerFormat.h */, - 44E2876AE1BB6B2EC1B9E6DFFDB5C908 /* MBLEulerFormat.m */, - 632E08C3C1F3C2B3600407429F114413 /* MBLGravityFormat.h */, - 84636ADEBFC31D02D2AA9BB00F220C37 /* MBLGravityFormat.m */, - 6C64D19BB3F9AEC401E0F2DF80FAD225 /* MBLQuaternionData+Private.h */, - 0861EF75CEE3811500BBCE28BDAB4BBD /* MBLQuaternionFormat.h */, - EB0F3127CA80D2F446D1A1CAAF111A24 /* MBLQuaternionFormat.m */, - 6F7055C022657B2629DA9C9F0AA2C463 /* MBLSensorFusion+Private.h */, - ); - path = SensorFusion; + path = sensor; sourceTree = ""; }; - 58B1F117725C9325AEA9D279BD749CA2 /* Development Pods */ = { + 984DD25FA52FB8D804F253867C7B9AD8 /* Products */ = { isa = PBXGroup; children = ( - CA9746112CBB22C0794025B979885F7C /* MetaWearPrivate */, + 82E5A7D22933C28ED44425993F6C7759 /* BoltsSwift.framework */, + 15DE2F540E6733F7B58EE8E4CEFBF517 /* BoltsSwift.framework */, + 40F2D386A2D49038493E715A68DAD06B /* BoltsSwift.framework */, + 357FF1C44E9F5B6930D58E1D1E050A40 /* BoltsSwift.framework */, + F6C6E70A6B9FF1527732B007AD398BC5 /* iOSDFULibrary.framework */, + FBD75C377E5C19538DFEEDE18F70C848 /* iOSDFULibrary.framework */, + 8E84CFA4C7336D7F5632BACC5471B88C /* MetaWear.framework */, + 34BF8063CA380F75084E3AB2C4ECA216 /* MetaWear.framework */, + 7E1FE541F8CD2E9742656ACC1C515216 /* MetaWear.framework */, + FB458CC12F6A69BA25944B9070C0E135 /* MetaWear.framework */, + 40F3A73B21BF78DA32D32BEB8D16465F /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework */, + 80FDFC1FEED0B4BB45D59B833E3CC0AA /* Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework */, + 59FD274485858C170022143FF7ECFF2E /* Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework */, + 2B048C14EC9DD111890D9059BB3BA90A /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework */, + F89C2F45B49937B8DC54B83AD180192B /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework */, + AEA293E22CF366C65AE4B10D380CE65A /* Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework */, + 032B1D15D6DF81DC51B736071A0245DE /* Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework */, + D4A3068CC272233F9977BD20929C4132 /* Pods_MetaWearIntegrationTests_iOS.framework */, + BE9ACE81A3CCB7F551207CADFBF0A385 /* Pods_MetaWearIntegrationTests_macOS.framework */, + E6054C312848AABFA25BA3E2FED7C30C /* Pods_MetaWearIntegrationTests_tvOS.framework */, + 3E8B45EBF83DFC62B51A9876BEC25FCA /* Zip.framework */, + E47D66AC6E7A74134E35FC8A1F1B9DE6 /* Zip.framework */, ); - name = "Development Pods"; - sourceTree = ""; - }; - 58D26703CBF0B6E9E924F459541335AB /* Modules */ = { - isa = PBXGroup; - children = ( - 9BE4EAAE52E7D07E419EA08C6E7E10D0 /* Accelerometer */, - 073D72B028A7DDED215D2F4E4ED6DEAF /* AmbientLight */, - 3F9FBE34BEDA9843F448A912B4660F96 /* ANCS */, - 1DBE4F205C81BFD8A021FC0B239736A4 /* Barometer */, - A514E1DF478CF9B2549F45E803265388 /* Conductance */, - 2BA4B205435F6027D259F1811CFE447D /* GPIO */, - E7A0DB39B34F12A8C197F470790451E5 /* Gyro */, - 7EBEF8E7B9783A443769E9083ACAAF27 /* HapticBuzzer */, - 873A2C2DA4809758A1B31F19F88EFBD9 /* Hygrometer */, - C5A578EEA3BB5F9627D7451080CF062A /* I2C */, - 16505AFA1A2A92BFB892ACEB680A21E5 /* iBeacon */, - 9BCBCB0068C779860128D6C6137A2851 /* LED */, - B68C09BB0459C17A76AD2317101124CC /* Magnetometer */, - D430FEA30DE1DA4F6D5061EC5F6183B2 /* MechanicalSwitch */, - DAB7BFC4801D2DCFF7417EA13D0B5C96 /* Neopixel */, - EC47442BC214490CD141573B5E49FCE9 /* Photometer */, - D41729B66AC239CDACE7D83542A3B6EF /* Proximity */, - 19936AD76816ECEF4E7EBF58AF69A1BE /* SensorFusion */, - 18BAF70F42B255334DB9B3A8BD73DD4E /* Serial */, - 6AE279DE58EBC1961F84FF2B95964DD1 /* Settings */, - 59188FA84F543E0011173B66D7EFBEB3 /* Temperature */, - C054B68861A5FE2D9F8CB9F30532BA52 /* Timer */, - ); - path = Modules; + name = Products; sourceTree = ""; }; - 59188FA84F543E0011173B66D7EFBEB3 /* Temperature */ = { + 99176C792AA1702D03986D0302469376 /* Pods-MetaWearIntegrationTests-macOS */ = { isa = PBXGroup; children = ( - 7E3207AB2D85976BE06AECFA290AB0D4 /* MBLExternalThermistor.h */, - EDA1A8E4F627CEA9CA9B633568C2F524 /* MBLExternalThermistor.m */, - B4C74EF9EB41D6A6C9BFF4EF7F64F663 /* MBLTemperature.h */, - 096F4405C3E714C672C9653B4875D76E /* MBLTemperature.m */, + 89A8070752394806C2ECAED7E9258000 /* Info.plist */, + 627516D8B2000EDBB9363EA11AF4A0A4 /* Pods-MetaWearIntegrationTests-macOS.modulemap */, + 953F868403F7599FBC730DE758E31175 /* Pods-MetaWearIntegrationTests-macOS-acknowledgements.markdown */, + 44D4FCFC60A79AC7BEF826AEAA886ABE /* Pods-MetaWearIntegrationTests-macOS-acknowledgements.plist */, + E117E5E032CDEEA2221232E5DD9CE060 /* Pods-MetaWearIntegrationTests-macOS-dummy.m */, + 802BE0A9C05F9821C765A83D502FF677 /* Pods-MetaWearIntegrationTests-macOS-frameworks.sh */, + E49FFCE6327183EAF6934E95717D4C82 /* Pods-MetaWearIntegrationTests-macOS-resources.sh */, + BC75C820DBE7595868D2C03791739134 /* Pods-MetaWearIntegrationTests-macOS-umbrella.h */, + 857A49B325CE1FC467136648CDD25462 /* Pods-MetaWearIntegrationTests-macOS.debug.xcconfig */, + C5C9D3C7F4ED6D71887257593DC39FAE /* Pods-MetaWearIntegrationTests-macOS.release.xcconfig */, ); - path = Temperature; - sourceTree = ""; - }; - 5A8DFB201FF6CFA1DB7F4A30487F6EEB /* Temperature */ = { - isa = PBXGroup; - children = ( - 0370A836B986A228B7833C6F24B03255 /* MBLExternalThermistor0.h */, - 103B453C78582AB73039AF2ACD28091E /* MBLExternalThermistor0.m */, - 8425869ABD5EB8DBC51E5631741F1E52 /* MBLExternalThermistor1.h */, - 257DF6872E94837AC767B4782104D87E /* MBLExternalThermistor1.m */, - BC7EC23F7DA1F1EF030CBD0B82701411 /* MBLOnDieTemperature0.h */, - 041EC2A34089D29291A9815E11ACD8EC /* MBLOnDieTemperature0.m */, - BF37B13956F515D176ED1150BBA2BF23 /* MBLTemperature+Private.h */, - 6E22D2D8EB43615D73111F496F74BD7F /* MBLTemperatureV0.h */, - 0120B86E2AE95D793C101E04748002AF /* MBLTemperatureV0.m */, - 8DB88D5E21CC6737F8A128219B847D7C /* MBLTemperatureV1.h */, - 13DC5F50967878257628BE72601421B3 /* MBLTemperatureV1.m */, - ); - path = Temperature; + name = "Pods-MetaWearIntegrationTests-macOS"; + path = "Target Support Files/Pods-MetaWearIntegrationTests-macOS"; sourceTree = ""; }; - 5E03CFBC88678963CEBD96168ACE50F0 /* PhotometerTCS3472 */ = { + A4A3EB8FD8AB46D8A8A3E0E7BA2BD3A9 /* AsyncUtils */ = { isa = PBXGroup; children = ( - 70692F88DC3B085CFA67F4801CC091A8 /* MBLPhotometerTCS3472.h */, - ABF694E5002B9296413AA84DDC5B0D02 /* MBLPhotometerTCS3472.m */, + 441DA5864008D13EECD7D2ADEBBA477F /* MblMwDataSignal+Async.swift */, + 12DDD6331860AB76E867A472FCCA4A15 /* MetaWear+Async.swift */, + 67C3523E890BD3724EA15F0D1440F083 /* MetaWear+LED.swift */, ); - path = PhotometerTCS3472; + name = AsyncUtils; sourceTree = ""; }; - 613C80C11C822564E0E03F2094A6161D /* Support Files */ = { + A7DCE56487208E3BDE0BAA73EC63E368 /* Pods */ = { isa = PBXGroup; children = ( - 7BADE8A9CEB88510615C28A7B8FE6E03 /* Info.plist */, - 77F0B844D2E4942DAE589ACD482DA4BF /* Info.plist */, - 76886D2D3BD70DC4BCC0BA45AAADB51B /* Info.plist */, - DBFEE45C1C99E983F9455CFCCD543E36 /* MetaWearPrivate-iOS.modulemap */, - FE6E81CB78094B771484EE152018C0A1 /* MetaWearPrivate-iOS.xcconfig */, - 56BF9B3D5859CBEA51D1EFF6538F58D4 /* MetaWearPrivate-iOS-dummy.m */, - BB3F32928EB651F4C4CE72952F313C1F /* MetaWearPrivate-iOS-prefix.pch */, - 1ED442E7A60334BC3E1AC5C8526DC814 /* MetaWearPrivate-iOS-umbrella.h */, - ACA6CFBF6B7B67C7C297FAFFE38AD1F4 /* MetaWearPrivate-macOS.modulemap */, - BBC4EE879733B6643D4330B3DC8C441E /* MetaWearPrivate-macOS.xcconfig */, - 748435E6E0217484100FE5221050840B /* MetaWearPrivate-macOS-dummy.m */, - 7B2C2EABA1B5A43F2175D9CF39EF47C1 /* MetaWearPrivate-macOS-prefix.pch */, - 55481C6D4DC6885935567820623B3544 /* MetaWearPrivate-macOS-umbrella.h */, - 5A8A8324FEEE1EAD815BD50D4C91B653 /* MetaWearPrivate-tvOS.modulemap */, - 76CF7D71EF15010446A78E798B39A0CE /* MetaWearPrivate-tvOS.xcconfig */, - 2C70EDC7A4A497FCE432608A6AF4F70B /* MetaWearPrivate-tvOS-dummy.m */, - 88ED920AEEE06BB9756967CB01B506F9 /* MetaWearPrivate-tvOS-prefix.pch */, - F36840C4CAE22288200B199380FC8D63 /* MetaWearPrivate-tvOS-umbrella.h */, + 8E9F7F2736D78ADEA9DFFCE8698E427A /* Bolts-Swift */, + 8219608CB9D96AE08DFE464EC1617257 /* iOSDFULibrary */, + 1C0D1224CA95E529C8A8B61CAE0B6CC1 /* Zip */, ); - name = "Support Files"; - path = "MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS"; + name = Pods; sourceTree = ""; }; - 65B1FC7EF549C5F57FC5B75D8FF6D8AA /* Modules */ = { + A832E12ADC2B00CED464789EBF58920B /* impl */ = { isa = PBXGroup; children = ( - 18D8F1A09F08888197CFCBBC7A418C61 /* Accelerometer */, - DD4CA4402BDC0D4269CCB615F0AD2C0F /* AmbientLight */, - 96FB4E5556E65B2799BE32501396BBDC /* ANCS */, - A152D7C091BB4B30B3D0C099237E5683 /* Barometer */, - 8B6F85032C3CFE8AB482FDCC94547B6B /* Command */, - EF7E3C6D1E51B3A3844852171C83D1A1 /* Conductance */, - A160F3AFF88BF61434DF1FADA860A248 /* DataProcessor */, - C51D70FEA8BCA5DC9DE816004480480F /* GPIO */, - 351FB4016753F5C43103AC4EB159967C /* Gyro */, - BAF28926618928E25482C214DA627628 /* Hygrometer */, - EC6A5261AB026FEEBBB9666C631E6D27 /* LED */, - 8076E27BA1A24C1774A7B9902F384484 /* Logging */, - FD725BE4272A0C28E1C795BBC49A896F /* Macro */, - 723F679DE28BB58B38B0ADB025BFA350 /* Magnetometer */, - 15DC4CF509E1EA4197EBC7D4CE5C597E /* Neopixel */, - 4BEBAFF444A2A5CC71B2A91F9D4BB248 /* Photometer */, - 521A71B3366508545140B059070BC525 /* Proximity */, - 551BC2A0DF129712A4EC6C70D5BCD962 /* SensorFusion */, - F20B38DA9EA13DB4930F19754F736CB7 /* Serial */, - F13D2C4A5B87B0C3B61DA393F25104E5 /* Settings */, - 5A8DFB201FF6CFA1DB7F4A30487F6EEB /* Temperature */, - F7E7E6184051E8E4D3FA6ADE81603334 /* TestDebug */, - B1226DBAC6B0F7E6741FB414E02847B6 /* Timer */, - ); - path = Modules; + 2343EDE6A6F906EE55FD9F7F74EAC210 /* cpp */, + ); + path = impl; sourceTree = ""; }; - 672675BFE4E23661663E014B459F8555 /* AccelerometerBMI160 */ = { + A83D6E3E329512F3E5491CC7251FA3D7 /* Pods-MetaWearIntegrationTests-iOS */ = { isa = PBXGroup; children = ( - BAD999AF844115DA8A50A968030408C1 /* MBLAccelerometerBMI160+Private.h */, - E4CFCB7B9A81296DDC19BE717B547395 /* MBLAccelerometerBMI160MotionEvent+Private.h */, - C00606375314EB5180797E7794603591 /* MBLAccelerometerBMI160StepEvent.h */, - BBFA2A124C5CF5541408059671A33F65 /* MBLAccelerometerBMI160StepEvent.m */, + 9F0ECCF212202FA663DF384098BAF2B7 /* Info.plist */, + 51A16496FE7111EA2A48413961D8E2E7 /* Pods-MetaWearIntegrationTests-iOS.modulemap */, + 3D8408087170F0518772556A0BCEC09A /* Pods-MetaWearIntegrationTests-iOS-acknowledgements.markdown */, + C535466B0C74F32D41C301D3558FABCA /* Pods-MetaWearIntegrationTests-iOS-acknowledgements.plist */, + 5D309696A6B188576EA54A5834846886 /* Pods-MetaWearIntegrationTests-iOS-dummy.m */, + 646C3E00A59C92FD42A78D18DCA253B6 /* Pods-MetaWearIntegrationTests-iOS-frameworks.sh */, + A9922467199938CE801890DE50A6EFCE /* Pods-MetaWearIntegrationTests-iOS-resources.sh */, + 3B1C6B2E346D4D6BE37D9665C5A560A5 /* Pods-MetaWearIntegrationTests-iOS-umbrella.h */, + 10757DFF6BCC73CD3C6A2ADBCA5F960F /* Pods-MetaWearIntegrationTests-iOS.debug.xcconfig */, + 9A25E726BBBDC42DAD5305F6AC627028 /* Pods-MetaWearIntegrationTests-iOS.release.xcconfig */, ); - path = AccelerometerBMI160; + name = "Pods-MetaWearIntegrationTests-iOS"; + path = "Target Support Files/Pods-MetaWearIntegrationTests-iOS"; sourceTree = ""; }; - 6AE279DE58EBC1961F84FF2B95964DD1 /* Settings */ = { + AD3CB6711E948C8FBB7EEE43724FE78C /* cpp */ = { isa = PBXGroup; children = ( - 92516A30E70293A900BBF8AB90EB0500 /* MBLSettings.h */, - 26128295AA0938AD6329B2E3407ED0C8 /* MBLSettings.m */, + 83265893F83E49698EDBE65CD6E8CB42 /* dataprocessor.cpp */, + C645D8E39A7F591C903260BB3C48C15A /* dataprocessor_config.cpp */, ); - path = Settings; + path = cpp; sourceTree = ""; }; - 723F679DE28BB58B38B0ADB025BFA350 /* Magnetometer */ = { + B375E741859866B1B5A4099D3452F8E9 /* Frameworks */ = { isa = PBXGroup; children = ( - E4EE35E05B06402DE0951FDFC4AF4A9C /* MBLMagnetometer+Private.h */, - 4BF938D304C25C4D90A26EE7E13BFE15 /* MBLMagnetometerData+Private.h */, - 8E8B36041CFD2CBC4E57E30271ADA952 /* MagnetometerBMM150 */, + D6CF7408C117FC21CEAF3797F9EF592A /* BoltsSwift.framework */, + F4DDC6F51422EE5F25915C11674B5DB7 /* Zip.framework */, + 789E056146739D62EAF821A946200CC1 /* iOS */, + 1ED0DDC446686567D7A62A8633E27E45 /* OS X */, + 7057763BE0B7A195448C8941FFF97EAA /* tvOS */, + 65B1944D6E883B7CB8D41908AB04104B /* watchOS */, ); - path = Magnetometer; + name = Frameworks; sourceTree = ""; }; - 7383710D244E9B5EB4B4214EC550C0C4 /* Products */ = { + B939EE2C2C30E3E0609B19769F6F6A32 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS */ = { isa = PBXGroup; children = ( - B07D1B0B6DF8A01D116A3576CB0F9480 /* Bolts.framework */, - 93C0E0581DAD528234FCEE879C73103C /* Bolts.framework */, - 41D5ED663F4CC795D404B72B58F64EA5 /* Bolts.framework */, - 431F42332985E3D0A750FEA34C12B6FA /* FastCoding.framework */, - 368BE4F935537F2AA28A6491716600AC /* FastCoding.framework */, - 3EBD12B1D17709CA096B00BBEE24EC68 /* FastCoding.framework */, - F3F34062091C9404748734E16CBEE8CF /* iOSDFULibrary.framework */, - F013CA0DDB1E61B01BB7F12437CE8D85 /* iOSDFULibrary.framework */, - FEC56A03F55AA17876748C41D7F7F9F3 /* MetaWear.framework */, - 545729650DD67BFD00F674FA37C4E01D /* MetaWear.framework */, - EF440399F90D6B4DB44A6BA3387CC979 /* MetaWear.framework */, - 9F174995E7374F2FE0CD5EABCA84CBC2 /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework */, - BBD9064F331E787EA528361CC49E519D /* Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework */, - E7D602B321217BDA6117F5D3E8535B0F /* Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework */, - 14BC0282228EC0A6343EE944975AD62B /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework */, - 2E3635D758185F82159A834048FBF880 /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework */, - 979ACF1F1DE594A63C4BE9F280278332 /* Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework */, - 068CFBFA9C639C548E300DBA82652694 /* Pods_MetaWearIntegrationTests_iOS.framework */, - 999087A8E82DEB1645CA98E755D515BA /* Pods_MetaWearIntegrationTests_macOS.framework */, - 7FD50DBF3CD96B69C1F61541B057E571 /* Pods_MetaWearIntegrationTests_tvOS.framework */, - E973F3314FC759A38CF4BA61101BB3BF /* Zip.framework */, - 42DA220155FF2E4B0B617736A5456C6A /* Zip.framework */, + 3C2B49ED7F1FFA0D76778ADC2A3FD917 /* Info.plist */, + 5B3CC78DF058537FAA7642F32DF5E0BB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap */, + 2DEEABC9BEC8B962C5C71A939CF77ABA /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown */, + F4B4B40C946FB16305A459A2423559C7 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist */, + 23A6C12931CF3E63C32D04FB3BE20E4C /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m */, + 91B5F3A78CA0EF18C4C671C01D1D8DD5 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh */, + 08902F62F43E100DBC6D8E2210A475FD /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh */, + B35B48A3C2CA07A097D36491B6477526 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h */, + 3679B8DC5C009AE10D92C7FF0C6B4EDB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */, + 0AD9B4AE96B9446885844A4DB4245B2B /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig */, ); - name = Products; + name = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS"; + path = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS"; sourceTree = ""; }; - 785F22FFA8D012086C401968EFB0A34D /* BarometerBosch */ = { + BF93E589FDE2558DAE2E6BCD7152384A /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS */ = { isa = PBXGroup; children = ( - F6D3364746F3DED3DE07DF2BE018E314 /* MBLBarometerBosch+Private.h */, - 09132298C652A6E4AAC6E0D0A627FAB0 /* MBLBarometerBoschPeriodicAltitudeEvent.h */, - 154C63619035D967672EFF5169B9350C /* MBLBarometerBoschPeriodicAltitudeEvent.m */, - AF4CD04C1CA0C935C555B4F0D3E0CFA2 /* MBLBarometerBoschPeriodicPressureEvent.h */, - DF8E3C12A71CB3E4174655FDA95A0093 /* MBLBarometerBoschPeriodicPressureEvent.m */, + D4EE765D2C66B8411C822F1EAB9D8727 /* Info.plist */, + 35060D8ED6023D58DC2A5138CD773F28 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap */, + 23DA68CC3636116209C7A30BDAF6F0D2 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown */, + F7FF689685B72A5F8D472F60F4CBBBF9 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist */, + F6E0C90918D425EAD5026E7345F55BC9 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m */, + 6AD3C77FD886DEC9D5C811CA4B8A73B2 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh */, + 119B57EC95C4B2638815E0B6ABCD7174 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh */, + D6EC9B2806D28BF52043D77FBD4563EC /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h */, + 505657139C15274AA9DFFA6B200D42D7 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig */, + 116203619F58C987920002EE6B37CE6E /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig */, ); - path = BarometerBosch; + name = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS"; + path = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS"; sourceTree = ""; }; - 78C2DC1ACA2E990782B1D0C0865D4937 /* AccelerometerBMI160 */ = { + C277C16304A35C32BBE45C1E3D79A112 /* Mocks */ = { isa = PBXGroup; children = ( - BBD2CD5AC9C224EF7A5EC8606ACED6BE /* MBLAccelerometerBMI160.h */, - 76F27D4B0C8EECC6EBF7D90305D31230 /* MBLAccelerometerBMI160.m */, - 082B67135724324C65933732754CC49D /* MBLAccelerometerBMI160MotionEvent.h */, - 9CB89E36AEE3848001C95666AAB53B64 /* MBLAccelerometerBMI160MotionEvent.m */, + 2B86C849C0D94F518C891C30917C82F3 /* MetaWear+Mock.swift */, ); - path = AccelerometerBMI160; + name = Mocks; sourceTree = ""; }; - 7D318A2A2BD3B8F7A15E2C27DAC54CE5 /* Internal */ = { + C2895A905C466B6F3EFE34EB3985D55B /* cpp */ = { isa = PBXGroup; children = ( - F69B9F96A15FD94EBE83034DC70CEC6B /* Categories */, - 1C2B3801A20B9AB33704B5EB24837077 /* Core */, - C281C0531862FB93B3C04EACB8D8E698 /* DFU */, - 045F81E5A54CF56F77DEAC7E250EA8F3 /* Mocks */, - 65B1FC7EF549C5F57FC5B75D8FF6D8AA /* Modules */, - ); - name = Internal; - path = MetaWear/Internal; + E82512F4F2249F20A9C7852E5E62707C /* accelerometer.cpp */, + 39C193F482E2D876192526D01572D72C /* accelerometer_bosch.cpp */, + 2408A3AA0166131C1F428B734EA0318D /* accelerometer_mma8452q.cpp */, + C5E1A45818A3870EDDC0C4A0591916DD /* ambientlight_ltr329.cpp */, + 12BF577CAE7BC994721AA252211F53DF /* barometer_bosch.cpp */, + FCC5F9E3F3BDACA487485AA78FA35DD7 /* colordetector_tcs34725.cpp */, + 06D21B509E1755BBF97983C4BA8C8688 /* conductance.cpp */, + 53A5F86F228E1FC44D6BB62174D0FAD1 /* gpio.cpp */, + 9AEB96CFB86A8E187868523F74EB566E /* gyro_bmi160.cpp */, + 9E942A292BF531CBC63CAC9ADB90ED49 /* humidity_bme280.cpp */, + B36FC4E48CEE0F33F3231BD8BA112318 /* magnetometer_bmm150.cpp */, + 890AB877953EF60E5615B9AE04D485F7 /* multichanneltemperature.cpp */, + C4441E516BEA95769BFBFB24AF730C0A /* proximity_tsl2671.cpp */, + 5C5265920442C3F5E551E1CCF4D18182 /* sensor_fusion.cpp */, + C64F7598BE155DA2BC2937CFAF358BAE /* serialpassthrough.cpp */, + 8CD5FF81C06773E0C0B179E63CAD2F9D /* switch.cpp */, + 46342162168E87FE5F7167677AB0321C /* utils.cpp */, + ); + path = cpp; sourceTree = ""; }; - 7DB346D0F39D3F0E887471402A8071AB = { + D5BFABC4B6163D58C896AAC8A33E028B /* peripheral */ = { isa = PBXGroup; children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - 58B1F117725C9325AEA9D279BD749CA2 /* Development Pods */, - E831A581C5BF65600A23BFFF5CFABFB1 /* Frameworks */, - 35D0714EE8EC574A4EBA540D9D25EDC6 /* Pods */, - 7383710D244E9B5EB4B4214EC550C0C4 /* Products */, - 1B7C3F0649A8AC2D3533CD916D57B519 /* Targets Support Files */, + 7FD67A7D4AFAFC531B966D045BCBD441 /* cpp */, ); + path = peripheral; sourceTree = ""; }; - 7EBEF8E7B9783A443769E9083ACAAF27 /* HapticBuzzer */ = { + D81E357583925D5FDFC304F1FA60CD32 /* Support Files */ = { isa = PBXGroup; children = ( - 06442DAAFF21721B0E2C64C15BC6F28E /* MBLHapticBuzzer.h */, - D57BE345C3B103A8511DD25E291757E4 /* MBLHapticBuzzer.m */, + DC90AB989D24B251DC6EA37A5E23D723 /* Bolts-Swift-iOS.modulemap */, + BE4E8BF5B5B1A1B4DE5D8C356701F76D /* Bolts-Swift-iOS.xcconfig */, + 66E14CE143A947E19091B8A03F233B29 /* Bolts-Swift-iOS-dummy.m */, + C718079A817784DC3D82A74838EFD787 /* Bolts-Swift-iOS-prefix.pch */, + 70AC435F59E13F0125F0E789D041C1C3 /* Bolts-Swift-iOS-umbrella.h */, + 7E80E1C8291F15526FE0AA13C571F17A /* Bolts-Swift-macOS.modulemap */, + 79554846837812E127D72A9CB268E4CF /* Bolts-Swift-macOS.xcconfig */, + 38D854413BA7877B89126C626034B847 /* Bolts-Swift-macOS-dummy.m */, + 872DC736B9BC7971029F0575FB5ADDCE /* Bolts-Swift-macOS-prefix.pch */, + 224573BEAB5C6F484091369A5C159860 /* Bolts-Swift-macOS-umbrella.h */, + A00BE0BA37A0D4A41C17CC345EEF03A6 /* Bolts-Swift-tvOS.modulemap */, + 0587D668F7D25D72E9A821CDEAFCB48B /* Bolts-Swift-tvOS.xcconfig */, + 9160164C2E7AE75FC2BE3F71A71CFB65 /* Bolts-Swift-tvOS-dummy.m */, + 9459F36E351F7D12D8B731211B9BD030 /* Bolts-Swift-tvOS-prefix.pch */, + 179A55B9C457FA9A8D10AB87E80631ED /* Bolts-Swift-tvOS-umbrella.h */, + C63B31D3C47772EEA98A3658BFA3929D /* Bolts-Swift-watchOS.modulemap */, + 19DE09EF16EFF2FD031FEC717665CC11 /* Bolts-Swift-watchOS.xcconfig */, + 88A851CD3BC5965A003619E9FCE7C8F7 /* Bolts-Swift-watchOS-dummy.m */, + 04B0C159F5C36C15D18B0F0F3647C4BC /* Bolts-Swift-watchOS-prefix.pch */, + B5EEE30CA311A653E0730CFD5A60BD45 /* Bolts-Swift-watchOS-umbrella.h */, + EDEF014D9A7B4606B3A0546001324ADE /* Info.plist */, + 6CA866C02F89D931A4C1A0F21386A1C1 /* Info.plist */, + DC8B36600B03C65C1E9B5D9474AF9337 /* Info.plist */, + 2A15757A99F40F5AB20F50496D4AC44C /* Info.plist */, ); - path = HapticBuzzer; - sourceTree = ""; - }; - 8076E27BA1A24C1774A7B9902F384484 /* Logging */ = { - isa = PBXGroup; - children = ( - 0BD8C04DD86664C2713B747FE190C751 /* MBLLogging.h */, - 71C9148C30A9AEBF8DA33E34D3D71D0A /* MBLLogging.m */, - 7D6CB41C23090423F8ED51F5A3FB6572 /* MBLLoggingV0.h */, - C44502A1C3E2BDFC2E9944376182C74D /* MBLLoggingV0.m */, - DABD5D15B57D8F075CA743D1528D890E /* MBLLoggingV1.h */, - 2712F6503B63708AD7766394B4BFAB8B /* MBLLoggingV1.m */, - 7DF7B457DCC8E360D49A842F6BB6699D /* MBLLoggingV2.h */, - 3FE8137EC2AD26C62D15D585531C0FA4 /* MBLLoggingV2.m */, - ); - path = Logging; - sourceTree = ""; - }; - 816576B9D81026BEC7A9C3F672648A1E /* GyroBMI160 */ = { - isa = PBXGroup; - children = ( - 098C7FF3BE168997AB33405D503F5A2C /* MBLGyroBMI160+Private.h */, - 101622E47D549B802652C0917F0CC84D /* MBLGyroBMI160AxisReadyEvent.h */, - C778CE095A0DBF3235157B58561F1329 /* MBLGyroBMI160AxisReadyEvent.m */, - 8125897E48631184953DBC6BF9970D41 /* MBLGyroBMI160DataReadyEvent.h */, - 1CB01AD35839796CD59C88F332642A29 /* MBLGyroBMI160DataReadyEvent.m */, - 9AA750E66901ECE028D826B3D8DA9552 /* MBLGyroBMI160Format.h */, - 611E0828D1D423282BC36D41D8659761 /* MBLGyroBMI160Format.m */, - C6EF3DD06DCF465CB6B9BF1E1C048270 /* MBLGyroBMI160PackedDataReadyEvent.h */, - 99C09A3AC008BF7FA56EEB4385A3C3DB /* MBLGyroBMI160PackedDataReadyEvent.m */, - ); - path = GyroBMI160; + name = "Support Files"; + path = "../Target Support Files/Bolts-Swift-iOS"; sourceTree = ""; }; - 873A2C2DA4809758A1B31F19F88EFBD9 /* Hygrometer */ = { + EB66B6BAE2CA4D3432E11FBF1BEFDE58 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */ = { isa = PBXGroup; children = ( - 0A9C61925C6320CAABE16A475F1F4E18 /* MBLHygrometer.h */, - 352E1631A56726C30EAE50929ED999C6 /* MBLHygrometer.m */, - FA3CD652A00031DE7B18DD17E19CC751 /* HygrometerBME280 */, + 7B00126BBCE5E505A3C2E8E01524E2F6 /* Info.plist */, + 19E3890674BACA9128C1C1F9835FB048 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap */, + 750B1F2C0E004206E66A28955A554D06 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown */, + F88F69444220D5A7036E534A2F2D0CB8 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist */, + BAFD64F4103B6CA1EEC440CF540C8E32 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m */, + E2203FE6F9585852CB77087245E8C6A6 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh */, + 2EDF86AC577064CE4CF6F1313921D7AA /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh */, + 957DC977FA7499B0E2E1A5111013F4EF /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h */, + 429E6E3CF69870B5E4953FA8F6091C74 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig */, + 4F30EDFE01E5E1B640B4A32654D0F155 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig */, ); - path = Hygrometer; + name = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; + path = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; sourceTree = ""; }; - 8878C26BC4E02A597AABB507764D5DE1 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */ = { + ED3B6D55BEB7614A724B69E80984A29A /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS */ = { isa = PBXGroup; children = ( - F45A66ECEBA284E996860512FB072EDA /* Info.plist */, - ADAF3CB39C8B2D17FB5EB8ABD62A07A9 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap */, - B15B8B7233158DEF0B3316939ABF9E3B /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown */, - D2A0C4EBC219C36288D8D895258EAB81 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist */, - 125C400C3639412117CC73ADC6B68B26 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m */, - C590EB5B1CE87FD3A67FA18AF43053D9 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh */, - 4938693D57B5CF7DD70B00EEDA9BD82D /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh */, - 9AF439C209114525130FC395432345CF /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h */, - 27CC639E6DE536C6F9FDEBCB0AFFEA31 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig */, - 637B0F3AD7EDFEA1AA5FF86CD752B8AF /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig */, + 3A180304775B85648F47121CA96B1EB4 /* Info.plist */, + 336F1A00204D8A6550C80D49F2E809E3 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.modulemap */, + C700CA6AED620858A00A8F2BB3B85151 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown */, + 6AC08B6615CCD65CDB2AF05218F5A044 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist */, + 5CA8D32B9C323FA419ED9B0FE21A7481 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m */, + DEAD4BD44E8B10479242DB64BF8E603A /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh */, + AC67A70A32D5AFE893EB3592A7770578 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh */, + DC07C2F3FC0BF05B6E45042BBD2123F7 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h */, + 8380A1EF78B30ECA6F9BB67B1FC6B8DD /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */, + F2AEC1BD8F817359114D5C3E968702D0 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig */, ); - name = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; - path = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; + name = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS"; + path = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS"; sourceTree = ""; }; - 8B6F85032C3CFE8AB482FDCC94547B6B /* Command */ = { + F2DA43A6DDC2553221A986A419ABD96C /* UI */ = { isa = PBXGroup; children = ( - AB4B55BD141F864F663A2BE6B25969E0 /* MBLCommand.h */, - AD87D9452AD5DFA34EAE953736420189 /* MBLCommand.m */, + B6D410282D6F5301B98BCB8E0EE4923A /* ScannerModel.swift */, ); - path = Command; - sourceTree = ""; - }; - 8E8B36041CFD2CBC4E57E30271ADA952 /* MagnetometerBMM150 */ = { - isa = PBXGroup; - children = ( - 1DEE68012FEE0F602A240B3ECA976F27 /* MBLMagnetometerBMM150+Private.h */, - 7D87C98E48F326672E237838FDE0B1F3 /* MBLMagnetometerBMM150Format.h */, - 6C7487AB0B47CAD2A314F1EA2960160F /* MBLMagnetometerBMM150Format.m */, - 2660920FD069ED7B5ED13CE0B789A2C6 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */, - 0D21B9BC43910E2ED423AABB150A5815 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */, - EB5771483BE42EC3D5F131B912DD7DF2 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */, - D2182E483FD05DCE8941DE26DA14FE7A /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */, - ); - path = MagnetometerBMM150; + name = UI; sourceTree = ""; }; - 94D7A54374E70B0FC23F8BA1B996DBD1 /* BarometerBME280 */ = { + FABB76BDAA3AC2DFC29D82BE1C7CAB19 /* Targets Support Files */ = { isa = PBXGroup; children = ( - 9E17C60212960E5BD204BBD874B9C3A1 /* MBLBarometerBME280.h */, - 3EA4B888A2C3618023DA6440BA48FD6D /* MBLBarometerBME280.m */, + 38B449290907C3A207F6617A8027FE14 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */, + B939EE2C2C30E3E0609B19769F6F6A32 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS */, + 29C9A7B75E89EAE098573010F1D3461B /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */, + BF93E589FDE2558DAE2E6BCD7152384A /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS */, + EB66B6BAE2CA4D3432E11FBF1BEFDE58 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */, + ED3B6D55BEB7614A724B69E80984A29A /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS */, + 2D50A0956851FAF01E57E03DCA447F73 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension */, + A83D6E3E329512F3E5491CC7251FA3D7 /* Pods-MetaWearIntegrationTests-iOS */, + 99176C792AA1702D03986D0302469376 /* Pods-MetaWearIntegrationTests-macOS */, + 8533AF90819126EEE03CF2A239213E71 /* Pods-MetaWearIntegrationTests-tvOS */, ); - path = BarometerBME280; + name = "Targets Support Files"; sourceTree = ""; }; - 96FB4E5556E65B2799BE32501396BBDC /* ANCS */ = { - isa = PBXGroup; - children = ( - BFE41FD08D80647E835161681D60921A /* MBLANCSEventData+Private.h */, +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 158AC36B1ACA55F00A3C0F319B775655 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 63BB63558E4ADC1FC689D74F246CB406 /* Bolts-Swift-macOS-umbrella.h in Headers */, ); - path = ANCS; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 9706A1327A18C25E4E4BA22A471DC64F /* MMA8452Q */ = { - isa = PBXGroup; - children = ( - 8D409E9AC30BA95DADFD8640807D6AC9 /* MBLAccelerometerMMA8452Q.h */, - 683A646CE59BF06ACE557B9DC63F37BD /* MBLAccelerometerMMA8452Q.m */, + 21124986938EB0066CAF54D186DFCD05 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + AEDB6188989BF7FBAF85D46F927C5A23 /* Bolts-Swift-watchOS-umbrella.h in Headers */, ); - path = MMA8452Q; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 9BCBCB0068C779860128D6C6137A2851 /* LED */ = { - isa = PBXGroup; - children = ( - FE0D8515949C9861487F28B146EEA3C0 /* MBLLED.h */, - 51A41ECB56B5DFC8D755819D80040E78 /* MBLLED.m */, + 27A8208C00B024431B9E22BE8016D643 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 4257E0308693B36503ED4CF3E199D958 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h in Headers */, ); - path = LED; - sourceTree = ""; - }; - 9BE4EAAE52E7D07E419EA08C6E7E10D0 /* Accelerometer */ = { - isa = PBXGroup; - children = ( - 11DD487EEB31D0A2E1939F4FC9874AE8 /* MBLAccelerometer.h */, - 31C2F98E33F89A641DBCE8A3F3C9D81F /* MBLAccelerometer.m */, - AA9B5368DD40A1D0D01B94023D7EC72B /* MBLAccelerometerData.h */, - 2807A744BD66EC2FC25F34F06ABD06A3 /* MBLAccelerometerData.m */, - 297339BB993DE15AD32362BF537FCF93 /* MBLOrientationData.h */, - 7486D6C559F423D347EF546001BF1A71 /* MBLOrientationData.m */, - 2B0F1458E563F8F2E0E9D3B15038D133 /* MBLRMSAccelerometerData.h */, - 52CC46DA65DB0259683868D5E443E82B /* MBLRMSAccelerometerData.m */, - 544962843747D8DD831ED23FB7999377 /* AccelerometerBosch */, - 9706A1327A18C25E4E4BA22A471DC64F /* MMA8452Q */, - ); - path = Accelerometer; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 9FA37BB13C1FCEBE4D4DBF86B0248FC0 /* OS X */ = { - isa = PBXGroup; - children = ( - 8F3EF8ADCAB47B421F82D9DF72392BD4 /* Cocoa.framework */, - BF5BC13734A7063650C064D4527068B9 /* CoreBluetooth.framework */, - 9982051824570B77E625938FED58988B /* CoreData.framework */, + 32A8AD3C8F269B1AA71BD8D47CA15CC9 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + DED1168FDA86194EFE18B5D7D21B9DBB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h in Headers */, ); - name = "OS X"; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - A152D7C091BB4B30B3D0C099237E5683 /* Barometer */ = { - isa = PBXGroup; - children = ( - 7F28543D661599E174AF98EA4A3B6D58 /* MBLBarometer+Private.h */, - 785F22FFA8D012086C401968EFB0A34D /* BarometerBosch */, + 5D5154CAB3F61B6E3B0F9583BE352406 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 90E61DAFE3A8C4F49DB114361EE78463 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h in Headers */, ); - path = Barometer; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - A160F3AFF88BF61434DF1FADA860A248 /* DataProcessor */ = { - isa = PBXGroup; - children = ( - EA8956DD984CD12941D9C8124A4C9C11 /* MBLDataProcessor.h */, - 6B34BF91775BD5B5F16563879AAE89DE /* MBLDataProcessor.m */, + 6F802F724AC8C8F22B2B26A6649CBC97 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E1F42966FE79DCF7B0767BAD06B11EEF /* MetaWear-macOS-umbrella.h in Headers */, ); - path = DataProcessor; - sourceTree = ""; - }; - A2A8936E641389546AD6A558B1200E87 /* Tasks */ = { - isa = PBXGroup; - children = ( - AF442C42590A7C1759F86A2C54EE7027 /* BFCancellationToken.h */, - DF37D3E8E70A2D9EE860B2877A1F368D /* BFCancellationToken.m */, - 2D6827276563ECF82E9652599FDA2563 /* BFCancellationTokenRegistration.h */, - DFD327E643DD1A34007F37CE8094CEE1 /* BFCancellationTokenRegistration.m */, - 4FF9248A7A554724FAC13E872F93100C /* BFCancellationTokenSource.h */, - D0942491B7067C7470A15A264D186D4D /* BFCancellationTokenSource.m */, - 63510854684E86EDFB5F03E8D52A35BD /* BFExecutor.h */, - 6DEDDD7C2FAFC76A2A87E225422005C5 /* BFExecutor.m */, - 30C55F887936A2253979D9148E618465 /* BFTask.h */, - B49F585CCFF6430654E83FD8277557F7 /* BFTask.m */, - 6E178F0FC9498EFBD62A485883B8232F /* BFTask+Exceptions.h */, - FB1D3BBE2E126BC29F81415209EF8F1A /* BFTask+Exceptions.m */, - 767039DE8BE4128CD2C1F16858847D69 /* BFTaskCompletionSource.h */, - B170794DD226B26CAD7042834F2EE58A /* BFTaskCompletionSource.m */, - C6DE6A5AC0A49A3E487037A11D03F9E0 /* Bolts.h */, - A9567FF1928DF11AEA825E0A436250C7 /* Bolts.m */, - ); - name = Tasks; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - A514E1DF478CF9B2549F45E803265388 /* Conductance */ = { - isa = PBXGroup; - children = ( - 3C2075920A7BE1CF684C76F2F799ECBD /* MBLConductance.h */, - 66B6BA83C3C4F23C8DBF08F46B6DEDF9 /* MBLConductance.m */, + 835E096A3DD39B1E8856DBB00A72836D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B5A384DDCDEB2D7FC67D010CB4887854 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h in Headers */, ); - path = Conductance; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - A9826689465A3DA809BFBBF9F7EEBAF7 /* tvOS */ = { - isa = PBXGroup; - children = ( - B7936CE338860DFA286D2DF6F83BB0E4 /* CoreBluetooth.framework */, - E636B03D39B8D1267925102A2AFFAFC9 /* CoreData.framework */, - CF73187F3F6E0F4E6FC6E5710081DBA4 /* Foundation.framework */, + 8997E30B529BA515321A37C21B29147E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 483ADC7D8D5EE822B84172AD411EE23B /* MetaWear-tvOS-umbrella.h in Headers */, ); - name = tvOS; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - AF9DE890B55EE16771C6F34E8E56493E /* BarometerBosch */ = { - isa = PBXGroup; - children = ( - 2C9014BE27A2ABDE098632CD6B8F846F /* MBLBarometerBosch.h */, - C5038CCCAD9C3B1597C329422A04A10F /* MBLBarometerBosch.m */, - 94D7A54374E70B0FC23F8BA1B996DBD1 /* BarometerBME280 */, - 1865A7BDE339829F3046DF7A7EC1FF28 /* BarometerBMP280 */, + 9568DF4E945778BEA418C08B381284E3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 3804DEC5F1758442E73FFA6C421A7424 /* MetaWear-watchOS-umbrella.h in Headers */, ); - path = BarometerBosch; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - B1226DBAC6B0F7E6741FB414E02847B6 /* Timer */ = { - isa = PBXGroup; - children = ( - 533D2377CF75F400D378A7FB2C5A8B80 /* MBLTimer+Private.h */, - 7CECA256893645F935B5C13A5CBBED84 /* MBLTimerEvent+Private.h */, + 96AC85F533A4686C54D2F0094D8EBB9D /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + B84068DF0ADB20006E4DAABC7737013E /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h in Headers */, ); - path = Timer; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - B68C09BB0459C17A76AD2317101124CC /* Magnetometer */ = { - isa = PBXGroup; - children = ( - B3636860C28B508BB1F56D19BCC6574A /* MBLMagnetometer.h */, - 39A93D8D844389570DDA7A68F02881BF /* MBLMagnetometer.m */, - D015AFF3E32DB592E65FF30976F85E80 /* MBLMagnetometerData.h */, - CA2B309AECBFE6D4E1FAC166D236C338 /* MBLMagnetometerData.m */, - DACE7F93A317DB9FFCB7C169F6CA6079 /* MagnetometerBMM150 */, + 9C412E5809440D25295A84BDC857A1A7 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + EB060E4CB4A3DBA159342A4C204AADCF /* crypt.h in Headers */, + 5BCE35191B656F94155C35BF61862775 /* ioapi.h in Headers */, + 5DF03A51B7B21C0CBF80ECD686DF2244 /* unzip.h in Headers */, + 5444800DF0C956F4F432F20860297563 /* Zip-macOS-umbrella.h in Headers */, + B3FF00EAB1725AA44452F203A0EED8D8 /* Zip.h in Headers */, + 5912B57541DFA685C0161A66C5A90FBC /* zip.h in Headers */, ); - path = Magnetometer; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - BAF28926618928E25482C214DA627628 /* Hygrometer */ = { - isa = PBXGroup; - children = ( - ACCF7CA22DE0EE99184FAFF40C4412D1 /* MBLHygrometer+Private.h */, - 07D7C6467087B882AF581A8870CA5DE1 /* HygrometerBME280 */, + A0F34AB220B3CD87EDD9F987E0DC9DA3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 012314C94A0FF3DB0384FC0195652471 /* Bolts-Swift-tvOS-umbrella.h in Headers */, ); - path = Hygrometer; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - C054B68861A5FE2D9F8CB9F30532BA52 /* Timer */ = { - isa = PBXGroup; - children = ( - 1836DBE60406D35990AF938F41D465F2 /* MBLTimer.h */, - CDE37A784C87668D3E890C6704A31321 /* MBLTimer.m */, - CDC48CA96245E09799A29D95AD8C8C71 /* MBLTimerEvent.h */, - 01A67B1A530D3D12F82B2B6F354568D5 /* MBLTimerEvent.m */, + C4DED32C8AE39E7BE4C745176F4C9AF6 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + CB52738C5C2033CD7E9E3F4DA6457245 /* IntelHex2BinConverter.h in Headers */, + 90408E1DDC09A4DE4657FD2E7308EDCA /* iOSDFULibrary-macOS-umbrella.h in Headers */, ); - path = Timer; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - C281C0531862FB93B3C04EACB8D8E698 /* DFU */ = { - isa = PBXGroup; - children = ( - 59F41F0F37DF9DF332219AE7B2AA6890 /* MBLFirmwareUpdateManager.h */, - 0FB44E2B89CF240B81C4538959705A14 /* MBLFirmwareUpdateManager.m */, - ); - path = DFU; - sourceTree = ""; - }; - C51D70FEA8BCA5DC9DE816004480480F /* GPIO */ = { - isa = PBXGroup; - children = ( - 7C355EC8ACB217A38B8BEA29DB930D04 /* MBLGPIO+Private.h */, - AE70D8C3F080CAE5CD2BD059325B35B0 /* MBLGPIOData.h */, - 5B6488DE19FA291681E79AFB6D915611 /* MBLGPIOData.m */, - 866AB71DEA1B2D0ACB8F328AD343EF8C /* MBLGPIOPin+Private.h */, - EB1D49F95D43D02E56017B6BC3737041 /* MBLGPIOPinChangeEvent.h */, - 0B3830A96734A10F95A0898A3AE3C2DA /* MBLGPIOPinChangeEvent.m */, - ); - path = GPIO; - sourceTree = ""; - }; - C598B6F2D76636B6D7B7AD520C4920A0 /* Zip */ = { - isa = PBXGroup; - children = ( - 455CD07BA2C9B12A7455F13B169B7133 /* crypt.h */, - 45AB536C269B0B8B040B53A4DF58541F /* ioapi.c */, - 763090C3CF598BCAF7A406BCC657053B /* ioapi.h */, - A942A8CCFF9CC397055244A0615C421B /* QuickZip.swift */, - 8FD5C90587A6F6E2E3A0062618829499 /* unzip.c */, - 147815D574238CF6873A9031B245D10E /* unzip.h */, - 2CC7D57A6FD40E665301FA579F5AB1BB /* zip.c */, - 984CCC87F279AA94306E80AA33255F86 /* zip.h */, - 8B8BE1DCE7543EB7D737BBBEBC88EA25 /* Zip.h */, - EA36C50735014AE4014007C7F1826E08 /* Zip.swift */, - 0AA7C4FBEBD67275B31A22D418F5BAFF /* ZipUtilities.swift */, - 45EF7A1BA8E94242045AC48EEE8968BA /* Support Files */, - ); - path = Zip; - sourceTree = ""; - }; - C5A578EEA3BB5F9627D7451080CF062A /* I2C */ = { - isa = PBXGroup; - children = ( - F618C9DF00DDF47D5EEEAAFDFC613948 /* MBLI2C.h */, - 108D19978FED2D6CCDA0F6BB617FF38A /* MBLI2C.m */, - ); - path = I2C; - sourceTree = ""; - }; - CA9746112CBB22C0794025B979885F7C /* MetaWearPrivate */ = { - isa = PBXGroup; - children = ( - DC394F9030B595F7057803F4AE7F00EE /* Classes */, - 7D318A2A2BD3B8F7A15E2C27DAC54CE5 /* Internal */, - 613C80C11C822564E0E03F2094A6161D /* Support Files */, - ); - name = MetaWearPrivate; - path = ../..; - sourceTree = ""; - }; - D41729B66AC239CDACE7D83542A3B6EF /* Proximity */ = { - isa = PBXGroup; - children = ( - 0AF908A6021CBB2D0312C0A243052E7A /* MBLProximity.h */, - 9F5479EAA668064130D02812F59E306C /* MBLProximity.m */, - F9B7B9D8B392F324C14BD6442474A6B5 /* ProximityTSL2671 */, - ); - path = Proximity; - sourceTree = ""; - }; - D430FEA30DE1DA4F6D5061EC5F6183B2 /* MechanicalSwitch */ = { - isa = PBXGroup; - children = ( - 0B45978E147332C2D7DCE27CFB3A99DC /* MBLMechanicalSwitch.h */, - CA1245D808F6BCC15B8A902CE557F9AA /* MBLMechanicalSwitch.m */, - ); - path = MechanicalSwitch; - sourceTree = ""; - }; - DAB7BFC4801D2DCFF7417EA13D0B5C96 /* Neopixel */ = { - isa = PBXGroup; - children = ( - 683E023C19814107E458986DB3C80721 /* MBLNeopixel.h */, - 7EC059FAD710FE43BC68B1CE0F8D860A /* MBLNeopixel.m */, - E65129647907D6602565EDEA64B50EC5 /* MBLNeopixelStrand.h */, - AE1010EE66D1FDA5F86AD0D8493B7D87 /* MBLNeopixelStrand.m */, - ); - path = Neopixel; - sourceTree = ""; - }; - DACE7F93A317DB9FFCB7C169F6CA6079 /* MagnetometerBMM150 */ = { - isa = PBXGroup; - children = ( - E4EDFCEE5B72864E7DA91A1762E564CD /* MBLMagnetometerBMM150.h */, - 9951ED4CE84E530835A1BBE12C8A58BB /* MBLMagnetometerBMM150.m */, - ); - path = MagnetometerBMM150; - sourceTree = ""; - }; - DC394F9030B595F7057803F4AE7F00EE /* Classes */ = { - isa = PBXGroup; - children = ( - 09A2B8795827FF822C2667CBDAE25456 /* MetaWear.h */, - E0ED391AA64EB55799F0454FFA599A39 /* Categories */, - E006BA7EE527C76D9C447A3237FBB29C /* Core */, - 58D26703CBF0B6E9E924F459541335AB /* Modules */, - ); - name = Classes; - path = MetaWear/Classes; - sourceTree = ""; - }; - DD4CA4402BDC0D4269CCB615F0AD2C0F /* AmbientLight */ = { - isa = PBXGroup; - children = ( - 6712272425BFA706A80ED17C721D2468 /* MBLAmbientLight+Private.h */, - ); - path = AmbientLight; - sourceTree = ""; - }; - DEAA6241835AA811525C345D8CA9CB48 /* PhotometerTCS3472 */ = { - isa = PBXGroup; - children = ( - E4682D51E341672CE83B830F1F7E405E /* MBLPhotometerTCS3472Format.h */, - 5F0D1110D45FA365DBC5367085D1E83A /* MBLPhotometerTCS3472Format.m */, - ); - path = PhotometerTCS3472; - sourceTree = ""; - }; - E006BA7EE527C76D9C447A3237FBB29C /* Core */ = { - isa = PBXGroup; - children = ( - 4AC77CDC011F6ABB4F5891B58CF47CB2 /* MBLAnonymousEvent.h */, - E16E857553131544D16A9490053C5F07 /* MBLAnonymousEvent.m */, - 684ACAB6B74CA94DDD2CBE56FD8D20B5 /* MBLConstants.h */, - 14EF7A0FCCB0842B76635115328356DD /* MBLConstants.m */, - 1DF82D0130B914E4BC8C5197562A63F4 /* MBLData.h */, - C3FF22CA55CEDA7F854443FF7BDB86C8 /* MBLData.m */, - E122F691BE8C2320CFFA602948F9C652 /* MBLDataSample.h */, - 67AE1DA5CCAEC8045CA513254318D081 /* MBLDataSample.m */, - 8CB82133272E40D5FE88AAFEE0E3AA14 /* MBLDataSwitch.h */, - BB3630C4C23448737131CCDFA574952F /* MBLDataSwitch.m */, - B90E3A5C2959459174C720292B111ACD /* MBLDeviceInfo.h */, - 429D35B0DC4CBE2F675FD0E381BBA5A4 /* MBLDeviceInfo.m */, - 1CFAD1F294B51CDE156111410C25AD9E /* MBLEntityEvent.h */, - 8A498490BEAA8E5C25A3B8A636D898BA /* MBLEntityEvent.m */, - 851B1F784539DC188479DDCA5FEC1F8D /* MBLEntityModule.h */, - 102772752E49EDB7667052D7350EB2E3 /* MBLEntityModule.m */, - 8755BF1875A2CDF639F20DED1B9D0C2C /* MBLEvent.h */, - FECFBC4F9F95E5A09CC21E2F8A80B38E /* MBLEvent.m */, - 065B9A18331BB5E77686A1A37B93AB89 /* MBLFilter.h */, - B9676FFAADD54AD787A3022BA543B95D /* MBLFilter.m */, - CF11CDDD171CAD8715AD95DFF1BF1992 /* MBLFirmwareUpdateInfo.h */, - 22074BEB840408CE90EAF720DD456558 /* MBLFirmwareUpdateInfo.m */, - 3ECB3EBED1AD5F9DFE05147E317A42A8 /* MBLMetaWear.h */, - 4739499D51E870D85365C8346318C403 /* MBLMetaWear.m */, - AC54B32E4666B6C1892004CAB3F5F4F7 /* MBLMetaWearManager.h */, - 2AD17983083A051951D07F5F4B1A6301 /* MBLMetaWearManager.m */, - 8F04C343FC7E20D674466E19D6BF71FA /* MBLModule.h */, - FBB66D000CC25B48165954C2C99799DF /* MBLModule.m */, - 328CC030B05EEF6E7D428A59949C6557 /* MBLNumericData.h */, - 97EED75612896E793A8196DE13BFBA02 /* MBLNumericData.m */, - C78C6DCAA18927FE63D0D8C43B0CFF2F /* MBLRegister.h */, - A487D9615078F8F70198C070FAF0058C /* MBLRegister.m */, - 768A2B5331EA1D222EB6A73E262ED8E0 /* MBLStringData.h */, - BB0992D5084797FE10F678A4D2FE31D2 /* MBLStringData.m */, - ); - path = Core; - sourceTree = ""; - }; - E0ED391AA64EB55799F0454FFA599A39 /* Categories */ = { - isa = PBXGroup; - children = ( - AD6A182159DB824EC701C4F5CECF3593 /* BFTask+MBLExtensions.h */, - E8B316769B25CA5CFF1037BB6E6C5DFA /* BFTask+MBLExtensions.m */, - ); - path = Categories; - sourceTree = ""; - }; - E7A0DB39B34F12A8C197F470790451E5 /* Gyro */ = { - isa = PBXGroup; - children = ( - 4602EBBBCBFC4B0BDD1112C6F156FAC2 /* MBLGyro.h */, - 6A3C94A2D4474A8DC16FF570AEE192F7 /* MBLGyro.m */, - C830F6C50185B585F4EB59E43DC8DD8F /* MBLGyroData.h */, - 2933BA5E21AEF0F56E04A4BD5C37AD29 /* MBLGyroData.m */, - 214DE6365ABA09E1AD6EF8A2A6A11492 /* GyroBMI160 */, - ); - path = Gyro; - sourceTree = ""; - }; - E831A581C5BF65600A23BFFF5CFABFB1 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 2F3A760FF1FEA0F393837CFA254115DA /* Bolts.framework */, - ABB225B11C55D8185DACB2639597735A /* FastCoding.framework */, - FE796D43C89FDC00CA2F72795FB07D9D /* Zip.framework */, - 43259391D2C64DEE7E1A56673555BB01 /* iOS */, - 9FA37BB13C1FCEBE4D4DBF86B0248FC0 /* OS X */, - A9826689465A3DA809BFBBF9F7EEBAF7 /* tvOS */, - ); - name = Frameworks; - sourceTree = ""; - }; - EBFBC50DB93BA18C03FECCC190CF6118 /* Support Files */ = { - isa = PBXGroup; - children = ( - 38D46C8B0496FC7CD063D79D37E63BBC /* Bolts-iOS.modulemap */, - 7DCFCC9F3CE0E98A2FB7A289FAADE29C /* Bolts-iOS.xcconfig */, - 48D83A0F6C825EE1E021F9AA06C6116B /* Bolts-iOS-dummy.m */, - 3B1704B0F408DD1D43A7BF562584C80B /* Bolts-iOS-prefix.pch */, - 6D4514B8DCAD84689076972E7C5FD8ED /* Bolts-iOS-umbrella.h */, - 4D65CB941BF2B692DFCF0420BF430897 /* Bolts-macOS.modulemap */, - FC4EDA409628927FB17680F4F9C569F2 /* Bolts-macOS.xcconfig */, - C8C11128C262C180924828B3A2D0A19B /* Bolts-macOS-dummy.m */, - E7B3B505C3DF2A9686DA9127CE950FA0 /* Bolts-macOS-prefix.pch */, - 3B3D32733DD3667BACBED5F51D5805DC /* Bolts-macOS-umbrella.h */, - 4F9290EC32AD92D822343F3DCAA79CA4 /* Bolts-tvOS.modulemap */, - A447138E6A37AE547D765D9B8ADC109F /* Bolts-tvOS.xcconfig */, - 19C1F5C20F826AA3EF1A212875392724 /* Bolts-tvOS-dummy.m */, - 98C47CE1D122703C24105329925CAFB2 /* Bolts-tvOS-prefix.pch */, - 2FF11580259AE06E27E42B5D697B1F91 /* Bolts-tvOS-umbrella.h */, - 07D3B44657CA0CCA6E72CDF8250AB6CD /* Info.plist */, - 690880F1C24B5C840BE2820F297A4479 /* Info.plist */, - 906C5F89B30A9DB713FA4DB87557C349 /* Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/Bolts-iOS"; - sourceTree = ""; - }; - EC47442BC214490CD141573B5E49FCE9 /* Photometer */ = { - isa = PBXGroup; - children = ( - 19CD19E40DAAF05256018C6B1F12F55D /* MBLPhotometer.h */, - E5D6598CDDBF33488FC69B5DFF58C57C /* MBLPhotometer.m */, - 3FEFC752FCC73CDD4669A2B67A313F16 /* MBLRGBData.h */, - 34B693A9204E409123726821605F41F4 /* MBLRGBData.m */, - 5E03CFBC88678963CEBD96168ACE50F0 /* PhotometerTCS3472 */, - ); - path = Photometer; - sourceTree = ""; - }; - EC6A5261AB026FEEBBB9666C631E6D27 /* LED */ = { - isa = PBXGroup; - children = ( - 3A343C0D07D72D5EED6731AA686094E0 /* MBLLED+Private.h */, - ); - path = LED; - sourceTree = ""; - }; - EE3B865A56593ECF632B195B27BE2DF8 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */ = { - isa = PBXGroup; - children = ( - D40F487EB7317900E4F1BE3F5E7C3240 /* Info.plist */, - 1245355700F9204731A756505A82774A /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap */, - 5D1B23D696933B0920B53CB3DA60871D /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown */, - 4F78451E4496BD529946B137B1D19A27 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist */, - 466F4CBD1227EE55915A7031EC4B452F /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m */, - C0F1DD0100FE7F87C5D186A165C20E9B /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh */, - E3423964A8005D7B6EFA277C19C0AD04 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh */, - 717E1C94E4A237C3492917CC7A3748D2 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h */, - CF9F74DB820671AFBE5EF84A20FFF98A /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig */, - 1D2105D11274EFFCEC9477E527479DDD /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig */, - ); - name = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; - path = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; - sourceTree = ""; - }; - EF7E3C6D1E51B3A3844852171C83D1A1 /* Conductance */ = { - isa = PBXGroup; - children = ( - 39406C785E452FAF5B389D4F86949543 /* MBLConductanceData.h */, - 8683A0E500A656B29F04A8F167263386 /* MBLConductanceData.m */, - ); - path = Conductance; - sourceTree = ""; - }; - F13D2C4A5B87B0C3B61DA393F25104E5 /* Settings */ = { - isa = PBXGroup; - children = ( - EFC64ABBE5E34175B525CC0AF9B7AD46 /* MBLSettings+Private.h */, - ); - path = Settings; - sourceTree = ""; - }; - F20B38DA9EA13DB4930F19754F736CB7 /* Serial */ = { - isa = PBXGroup; - children = ( - C9D693443D18F04CD16EC8D21B3265B7 /* MBLI2CData+Private.h */, - D382C7ED86B3A4044E9BC7FE7B808E0C /* MBLSerial+Private.h */, - 792F603BFB6C85B0F5D8CB9889BC30AB /* MBLSPIData+Private.h */, - ); - path = Serial; - sourceTree = ""; - }; - F69B9F96A15FD94EBE83034DC70CEC6B /* Categories */ = { - isa = PBXGroup; - children = ( - 1FD0265FC80A962B97D528D2D555EE96 /* BFTask+MBLPrivate.h */, - F9243C73A502B4C0654BF88F02CF9732 /* BFTask+MBLPrivate.m */, - 77004055E8B046B2F94C36501CA986B0 /* MBLCategoryLoader.h */, - 269F0FBB246D90F6DFB2F2AD18A04252 /* MBLCategoryLoader.m */, - ); - path = Categories; - sourceTree = ""; - }; - F7E7E6184051E8E4D3FA6ADE81603334 /* TestDebug */ = { - isa = PBXGroup; - children = ( - 9BEBDF15B99A76AB465BBDA0C0529628 /* MBLTestDebug.h */, - 58D92C0D8A331C0153DC2D7E2E1A110E /* MBLTestDebug.m */, - ); - path = TestDebug; - sourceTree = ""; - }; - F9B7B9D8B392F324C14BD6442474A6B5 /* ProximityTSL2671 */ = { - isa = PBXGroup; - children = ( - EEE2C38FE1144B7A77E1150FCC48FF3A /* MBLProximityTSL2671.h */, - E9A04EC0A77D40BFA9A26340EBD99D8C /* MBLProximityTSL2671.m */, - ); - path = ProximityTSL2671; - sourceTree = ""; - }; - FA3CD652A00031DE7B18DD17E19CC751 /* HygrometerBME280 */ = { - isa = PBXGroup; - children = ( - 46546F45369A541754827BBFAD119C43 /* MBLHygrometerBME280.h */, - 7AB376E87546F5C959DF1E7882959E6A /* MBLHygrometerBME280.m */, - ); - path = HygrometerBME280; - sourceTree = ""; - }; - FC97A1D538612AA0C8F64D8A60282A1C /* AmbientLightLTR329 */ = { - isa = PBXGroup; - children = ( - 9030BAA310B1AD555332EC41BE83E228 /* MBLAmbientLightLTR329.h */, - 46D823DA636B25C835ED3EAB68BE9151 /* MBLAmbientLightLTR329.m */, - ); - path = AmbientLightLTR329; - sourceTree = ""; - }; - FD1E944ABC8BD3FD4818C8E213969B7B /* iOSDFULibrary */ = { - isa = PBXGroup; - children = ( - F3A1010153F1DDFAD7D18AAAB73FE5EF /* ButtonlessDFU.swift */, - 5B13B87AB35725CA9A0FE740B4294A70 /* crc32.swift */, - 09635D2337086E6408781D878687120E /* Data.swift */, - 10BF4E9DB1C681605A1E1DE7A7352D47 /* DFUController.swift */, - DF6C7C2B5B872E4AF65C6CF01BEBE459 /* DFUControlPoint.swift */, - 08850145862683CD96C0CD00D9C712D3 /* DFUExecutor.swift */, - 4D9D6C530728DC18D1A2775D58338E76 /* DFUFirmware.swift */, - 107D89EB1146D20431D9DA30A2F00976 /* DFUPacket.swift */, - 645FFFBA525FE54E01512233CD96C235 /* DFUPeripheral.swift */, - 60072837B568D0B289C73D735FBE994A /* DFUPeripheralDelegate.swift */, - 32DE87BDF106FEBCFABBF465A01773EE /* DFUPeripheralSelector.swift */, - 5591E2801FF88CEE1F9D45AC91B0D6D9 /* DFUPeripheralSelectorDelegate.swift */, - F950DFDB30AD3DFE41EBB7542B85C70A /* DFUService.swift */, - 1C6DE6FF859CB07E8F2499FE22E774AA /* DFUServiceController.swift */, - 6856DDDF597277881E66C7EAE1488594 /* DFUServiceDelegate.swift */, - E093B6225A0D37B00C1C5B9CD123B21E /* DFUServiceInitiator.swift */, - FB5582120CF0EA27230E08D94D529650 /* DFUServiceSelector.swift */, - C0B574039288B136D02D4D4AA7A41748 /* DFUStarterPeripheral.swift */, - 33B7E3CB12DE614F080F68127A8BAA81 /* DFUStream.swift */, - 91AD9A540F4FC3CC34E90BBC019DF220 /* DFUStreamBin.swift */, - 1C47A810D9F0D3F2E32CE75405F6AA0E /* DFUStreamHex.swift */, - 4494AC85D83F4C58922224D3BC0FFC3E /* DFUStreamZip.swift */, - 3322753074CE7A5BC2F0A5131563F267 /* DFUVersion.swift */, - 1355EBD6FF6202F9F89D9888F4BC95EA /* Double.swift */, - B00D1E78C7013DB32308E26A9FD9D26E /* IntelHex2BinConverter.h */, - D7EAC0BC994FB7611A298DE937C3E8BF /* IntelHex2BinConverter.m */, - B1D78E38F964F3EDDA0C7B1B3EF2DA0E /* LegacyDFUExecutor.swift */, - 1C265937209DAD09BC393AA51F15236E /* LegacyDFUPeripheral.swift */, - 2D65E670B1C6B924E8E192F3FED06F15 /* LegacyDFUPeripheralDelegate.swift */, - EE604D5D1F79811D66866CD63073922E /* LegacyDFUService.swift */, - C68ED4B0184AB99F750D04E9F54595CB /* LegacyDFUServiceInitiator.swift */, - 34FB716E5129E1AE665A5FE6F4DA938B /* LoggerDelegate.swift */, - 7B73BFFFDB3046740A4D7A599A06F846 /* LoggerHelper.swift */, - 6132FA286854C673503A7644B14E6C43 /* Manifest.swift */, - B702BC7B58A912AAF4251270635CF62A /* ManifestFirmwareInfo.swift */, - 5E1A178212708CCC5AA04F75029CF605 /* SecureDFUControlPoint.swift */, - 2A92D831CC3AF37DF68739AC2D56E036 /* SecureDFUExecutor.swift */, - B0054890AF2606207216F2072858B5AE /* SecureDFUPacket.swift */, - E72170D3AC6D512DCC948B28D038E74F /* SecureDFUPeripheral.swift */, - 96CC9E4509349DDAC2824D4440B9875E /* SecureDFUPeripheralDelegate.swift */, - 7AFDC40CD0763752F8F369BB3B81D787 /* SecureDFUService.swift */, - 424A4930726684F45E9938539092257A /* SecureDFUServiceInitiator.swift */, - 099E89D6E6F44D0B586225B775348D90 /* SoftdeviceBootloaderInfo.swift */, - A9946177777926628D585F20B3365C41 /* ZipArchive.swift */, - 3DCF97439C08C7A9CCDB8FE6EDF54FC8 /* Support Files */, - ); - path = iOSDFULibrary; - sourceTree = ""; - }; - FD725BE4272A0C28E1C795BBC49A896F /* Macro */ = { - isa = PBXGroup; - children = ( - DBCEE7FBDB19D37FCD244D897C836B59 /* MBLMacro.h */, - 9D144E6E435DBDDDD0D91240069800D3 /* MBLMacro.m */, - ); - path = Macro; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 0848440AEE145491D062FA1D98F3ABF9 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CAA93BD78B66DB0E294922994A99C468 /* BFCancellationToken.h in Headers */, - E51FB14BF724DA7144C47DB5F55AF9C8 /* BFCancellationTokenRegistration.h in Headers */, - 6ABDC2ED898035D4F6C8A419CA18C0EF /* BFCancellationTokenSource.h in Headers */, - 550CFC2F0BE92B4D6CEC021693C7A8D1 /* BFExecutor.h in Headers */, - D96011C8432F7EAD1C57F69100B42660 /* BFTask+Exceptions.h in Headers */, - 904E62D9F04106B7A8D01ACD39DB906A /* BFTask.h in Headers */, - A3CAACEA47C7397BADBBFAE176446FC3 /* BFTaskCompletionSource.h in Headers */, - 3FCD1809EF0B39DA112B5141E008E612 /* Bolts-macOS-umbrella.h in Headers */, - 919676BEF85738E3F7E053478B1111D5 /* Bolts.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1318B4E9F403951124EC17FEE7972598 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 70537376BAC4A19209FF6BE04373BE86 /* FastCoder.h in Headers */, - DF24FABFF25B380D599388A8BEAB2595 /* FastCoding-tvOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1FB3E9522A124B05C98B01DEB1342BE7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 354140987171CA6E324A1EAEBF83BF66 /* BFTask+MBLExtensions.h in Headers */, - 0F82B9124E0F733FB076FC61CFDA508B /* BFTask+MBLPrivate.h in Headers */, - 03A750A200CC8C2378AD647B23D68843 /* bmi160.h in Headers */, - D3FAED7AFC302016B2B80A93FBFCD038 /* MBLAccelerometer+Private.h in Headers */, - 5344364A953BD76D567B5983AB1F4D9E /* MBLAccelerometer.h in Headers */, - 24617B2B1A5439D6D035FC2D16EB7E65 /* MBLAccelerometerAxisReadyEvent.h in Headers */, - B272AAC353649E367B9529DA39E93B4D /* MBLAccelerometerBMA255+Private.h in Headers */, - DE8D5854F92076A77CB99C40BA418E28 /* MBLAccelerometerBMA255.h in Headers */, - 5332AD78E25057431A8DCC8500F25C52 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */, - AA79F252C0CDE67D551838212C831C89 /* MBLAccelerometerBMA255MotionEvent.h in Headers */, - 7E817E0AC9B6CB1C357092387C7E637B /* MBLAccelerometerBMI160+Private.h in Headers */, - AB85F3E4BD64452ACED46541458F034C /* MBLAccelerometerBMI160.h in Headers */, - 89EA8BFEB66543E209763BFDDC332017 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */, - 592391D31238DDF1C1CB995717D5C52C /* MBLAccelerometerBMI160MotionEvent.h in Headers */, - A31BD734F93770FCD0E61FDF1EAE11F9 /* MBLAccelerometerBMI160StepEvent.h in Headers */, - 276617FF9447B853F283E5E3F7AAF894 /* MBLAccelerometerBosch+Private.h in Headers */, - 204D6551DC96734DF3FD9F628D2C803F /* MBLAccelerometerBosch.h in Headers */, - BD5D35A06233056C2F0891C14C53CD75 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */, - E0C1975C2AA9D83958842AFA3526EF48 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */, - 02776DCCC3A363894CBB16E0CE8E23EA /* MBLAccelerometerBoschFlatData+Private.h in Headers */, - 5839838A93E2880F635156923BF5B05E /* MBLAccelerometerBoschFlatData.h in Headers */, - 54CCE8419E0CE08308E1EDB9D739C5E1 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */, - 71184E995D94EADB165F1C2D3473627A /* MBLAccelerometerBoschFlatEvent.h in Headers */, - 74A28EAFC989BEF5312C8E2A136BC0CA /* MBLAccelerometerBoschFlatFormat.h in Headers */, - 7975DC55A055E36C2B35CB2BC3768AB3 /* MBLAccelerometerBoschFormat.h in Headers */, - 3446E8A12B7CA9FFCBFAA2A9D47835C4 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */, - 6ACD99A08BCCED2296EC071102FBFF8D /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */, - 4837343AA7944DFEC04E8BDCBF82F852 /* MBLAccelerometerBoschOrientationEvent.h in Headers */, - 74EFFA3664B2A8FD3D2505E3C9A0C611 /* MBLAccelerometerBoschOrientationFormat.h in Headers */, - C0085030A02778FFD4DF3DA7D5C611FA /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */, - 38E1FA12B5018FFE078B419A1D0D6657 /* MBLAccelerometerBoschRMSFormat.h in Headers */, - 808838ABC1B862BE8FD91E22C1CB040F /* MBLAccelerometerBoschTapEvent+Private.h in Headers */, - 649780B6A40E67CEC06542608071DB97 /* MBLAccelerometerBoschTapEvent.h in Headers */, - 80AC74E69003B3E0DEFF1CC86831977F /* MBLAccelerometerData+Private.h in Headers */, - 47DBBEC119589E8A8D89E67F4FBF2929 /* MBLAccelerometerData.h in Headers */, - 61035AD11FBDE2555E95109C306B8D81 /* MBLAccelerometerDataReadyEvent.h in Headers */, - AA9B0D67462D2DB4D096ED7935E67A77 /* MBLAccelerometerFreeFallEvent.h in Headers */, - B8B05263341096645609EE42966A8AD3 /* MBLAccelerometerMMA8452Q+Private.h in Headers */, - 3D90D5563D21E9B943B581FF89C8DE17 /* MBLAccelerometerMMA8452Q.h in Headers */, - 248857308EE11039B7069E4A7186F103 /* MBLAccelerometerMMA8452QFormat.h in Headers */, - 96BE86E254B287AF2511D3C6F9D428E4 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */, - E6B1D5281B9C0F33C440522F46BDBFFC /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */, - 42DF40B3E5A5882928B71659BFA7BED0 /* MBLAccelerometerOrientationEvent.h in Headers */, - FEE9D7E9209726628D0EE777AF7B8B21 /* MBLAccelerometerPackedDataReadyEvent.h in Headers */, - D742DF405F753AC892129A8E0B599AED /* MBLAccelerometerShakeEvent.h in Headers */, - DAAB68CFCA6ED84FE65EFEEC3F458F58 /* MBLAccelerometerTapEvent.h in Headers */, - 5DCC43EA26B765E9F5D45AD4FA810609 /* MBLAmbientLight+Private.h in Headers */, - F6E462AA08FB90331808E5DA4D8F248E /* MBLAmbientLight.h in Headers */, - B33888E4CE3D616BA1F76F6011C45EEB /* MBLAmbientLightLTR329.h in Headers */, - D4ECEDD944E4103FF64E84E3FC74C6E1 /* MBLAnalytics.h in Headers */, - 79792E4020C88A9D680462BEA77965FA /* MBLANCS.h in Headers */, - 7A96B770BEA35125FC7DC8A278E4303C /* MBLANCSEventData+Private.h in Headers */, - 140C43845A7A6F3D14E10FAAF47D0E9D /* MBLANCSEventData.h in Headers */, - F0ECF5B0CCBFDD1243D97E10501C7AC4 /* MBLAnonymousEvent+Private.h in Headers */, - A9368D5E9E9EA3E231D55E9F83BC8716 /* MBLAnonymousEvent.h in Headers */, - 14CE47C572D6502DAD608755F2AE0895 /* MBLBarometer+Private.h in Headers */, - 4BD858AD72EEBCD99D1C7FAF30173929 /* MBLBarometer.h in Headers */, - D5D54F55ED137D2481FA26721057EC70 /* MBLBarometerBME280.h in Headers */, - E100FC510817A710EEBB76DDD52F84CE /* MBLBarometerBMP280.h in Headers */, - 82EDE1F4730D6D6BC8DF91F8579600A5 /* MBLBarometerBosch+Private.h in Headers */, - C02C917A265BABABA2A022D0AF0C0E45 /* MBLBarometerBosch.h in Headers */, - 42A56642ABE3D48C5CB1E55BDC780D1D /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */, - C4878B054E5BC9C13057AF6198502540 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */, - 4F333B2510362DA70B4025A391B3523F /* MBLBitmaskEvent.h in Headers */, - 493D6E322F169BB2EEBD055D6B7D22BC /* MBLBluetoothCentral.h in Headers */, - 19EA68AB0F7F5CCF2692FF2178F3FB39 /* MBLBluetoothCentralMock.h in Headers */, - FAF13BD420CA93DAF157231E57BCD6F9 /* MBLBluetoothPeripheral.h in Headers */, - EE7AA7155DB9F967A17EEA6659767312 /* MBLBluetoothPeripheralMock.h in Headers */, - CE7416CC794E98270DBD647CC2D09B8E /* MBLCategoryLoader.h in Headers */, - 7786BB8CDF96401B1E8662CA4C35F70C /* MBLCommand.h in Headers */, - E9541569979DDDF466E34B3E21E0D04D /* MBLConductance.h in Headers */, - AD7A54C251AD9E0C3055E122BF084083 /* MBLConductanceData.h in Headers */, - 385FBC5E7C288602A2420EEAA8468F15 /* MBLConstants+Private.h in Headers */, - 32012E54E9EA31F14B1208053DCAC6E7 /* MBLConstants.h in Headers */, - 5B7F141179BC92F21556FAFD827E0C81 /* MBLConversion.h in Headers */, - B9DFE6922DEF590665531AF83E79B896 /* MBLCorrectedFormat.h in Headers */, - 04FE5F6586B49FD1ACDD77A5A1981FFB /* MBLData+Private.h in Headers */, - BEC94EC3FE2E3133438ED2584C4BD3D0 /* MBLData.h in Headers */, - D13B631A6E9F6FB20784D1020691B9ED /* MBLDataProcessor.h in Headers */, - CE943B09A544B3335C3E48D7171DF800 /* MBLDataSample+Private.h in Headers */, - E956B7C281112CC36D232CFFBA32FE46 /* MBLDataSample.h in Headers */, - ABC72FA4F7B45E670EBDB29BE6BD8DD5 /* MBLDataSwitch.h in Headers */, - 9A34B2F95C36617D1663ADBB58AD2D78 /* MBLDependentData.h in Headers */, - 289B683B68CD8EEDD13F7A5E2AC3E466 /* MBLDeviceInfo.h in Headers */, - BA6AB754F76F5F29EF78F551430300AC /* MBLDeviceLookup.h in Headers */, - D8987CB58F05F9F18970AAA94CDDC52B /* MBLDispatchQueue.h in Headers */, - B1DE3AE7DACC6BE8E13B6D08678D0DF5 /* MBLDownloadOnlyEvent.h in Headers */, - BA57F9D44BD4BEF9B66B123DE338729A /* MBLEntityEvent+Private.h in Headers */, - 600974FC7156164850CD59272F2EE9CA /* MBLEntityEvent.h in Headers */, - E0B24A24AD1E726FD9E915198599D15C /* MBLEntityModule+Private.h in Headers */, - 95FB91B6686C89201D3612BF9352D27D /* MBLEntityModule.h in Headers */, - C3E1D4E6681A5A6FC548C8901435AE37 /* MBLEulerAngleData+Private.h in Headers */, - A87014D7A85FFEC6BE70510A32DBFEBA /* MBLEulerAngleData.h in Headers */, - 4D36DEC6880FF309EC19BE96743C2DE6 /* MBLEulerFormat.h in Headers */, - C1EAD1E2551799CC38FBFE0B0E96B328 /* MBLEvent+Private.h in Headers */, - A1B3FBAAAEADE381BEAD03BDDE8D8397 /* MBLEvent.h in Headers */, - 0843A457E87AEFDDF142AB4D17E5CD7E /* MBLExternalThermistor.h in Headers */, - F7EF7FF4EBD467923212956FCCD1A5EC /* MBLExternalThermistor0.h in Headers */, - A707F7632C90F0C99A4308C1070280A7 /* MBLExternalThermistor1.h in Headers */, - 783EFE5E3889A5F0DC462EED5077C34B /* MBLFilter+Private.h in Headers */, - 0FAD4578934C10A213537DD934981F5B /* MBLFilter.h in Headers */, - 37E17D45A7E99D6C8DC0243F84B8D64B /* MBLFirmwareBuild.h in Headers */, - 7398844F2AB4459EA2801EA67B3AC532 /* MBLFirmwareUpdateInfo.h in Headers */, - 300BEC4D01EC1ED2C6438002269557F4 /* MBLFirmwareUpdateManager.h in Headers */, - 69282CB7517D6F1C0C3D023D4837271C /* MBLFormat.h in Headers */, - 0B698159F7B2C80C57CC9550405A3BD8 /* MBLGPIO+Private.h in Headers */, - E3D158824151264CC993ECD47A33CF44 /* MBLGPIO.h in Headers */, - 52443BC6AEA8A70CF41377B28314CA87 /* MBLGPIOData.h in Headers */, - 7D9439F052F04EF58EC7783D575EB858 /* MBLGPIOPin+Private.h in Headers */, - 4AAE1AF55D86BB5A18BB1493324DCCB1 /* MBLGPIOPin.h in Headers */, - DE2800563759E0F47041D1537D155227 /* MBLGPIOPinChangeEvent.h in Headers */, - 7C41F029C96A9C00C45B69DD5D7A6732 /* MBLGravityFormat.h in Headers */, - E3E5C89C0D9F2A71D82A71B5A60F4B58 /* MBLGyro+Private.h in Headers */, - F2BE5B7DAADFE9011306A8B50C538888 /* MBLGyro.h in Headers */, - AC9701302F80D6752C26675D0D7E97C3 /* MBLGyroBMI160+Private.h in Headers */, - 299DB432DC1B24388C1A604313210BC5 /* MBLGyroBMI160.h in Headers */, - BBD622AC9149FF274856D59C51071A61 /* MBLGyroBMI160AxisReadyEvent.h in Headers */, - 1262EA356711EDA0EFB66088D8AB690B /* MBLGyroBMI160DataReadyEvent.h in Headers */, - 295059F84F2D08CE19FCE2885255BBC0 /* MBLGyroBMI160Format.h in Headers */, - 3C6B681E2B2C6FA1CB58CCDCE1BAA920 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */, - 5A4AE79F23C5E4A08F5EA4A06EF26ABC /* MBLGyroData+Private.h in Headers */, - 3F698F627954585F9740F5F944E9BF45 /* MBLGyroData.h in Headers */, - 5610CB8EEA802AC636F77F245599761E /* MBLHapticBuzzer.h in Headers */, - C77DECD72D611784F869DBA6DE9CD3D6 /* MBLHygrometer+Private.h in Headers */, - 091D09EC1FC3872EAB54CB2AD2D73A0D /* MBLHygrometer.h in Headers */, - 730EF494CA9732461D7E8FE21AECD5A3 /* MBLHygrometerBME280.h in Headers */, - 21AC2BDFBA8EFA5303DC19122EFF83C1 /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */, - 01944C704586C51A1F5989F7A4DF327D /* MBLI2C.h in Headers */, - E379796844238653B8EB52465FDC337E /* MBLI2CData+Private.h in Headers */, - E5B22A3C03F8BA0EC69FD2F84E8DA18D /* MBLI2CData.h in Headers */, - 1FA198AA2A33383DE7195080B96CAAE2 /* MBLiBeacon.h in Headers */, - 1001A6255073D35114CA1729A6B8CCFF /* MBLLED+Private.h in Headers */, - F091106998275DD3ED0245F3C3D607D5 /* MBLLED.h in Headers */, - DE7EE8E4F8D590987D07A22B7FE47DFC /* MBLLogger.h in Headers */, - B0B86D63D28415A00137332BBBD8104B /* MBLLogging.h in Headers */, - 9C6767DCDAFB042B17DA39028DCD6222 /* MBLLoggingV0.h in Headers */, - 949EE599CD9C7BE37E23269CEA7E8811 /* MBLLoggingV1.h in Headers */, - F7154394332D9A016E3DB9B8B191E534 /* MBLLoggingV2.h in Headers */, - 5ED5AE88E4A0917B39CC0EE9A4BE4CB9 /* MBLMacAddressFormat.h in Headers */, - B12A064B23356F18BD6DE8EDAF8D82AD /* MBLMacro.h in Headers */, - E82CB056756ACBE43D86232CB05B1354 /* MBLMagnetometer+Private.h in Headers */, - 491066573656A6CA4B80D9BFBEF6A746 /* MBLMagnetometer.h in Headers */, - 757AA542EF772C7C137CCBB75BC976FD /* MBLMagnetometerBMM150+Private.h in Headers */, - 74C30818FE1278D8AB2542D8ADEA554E /* MBLMagnetometerBMM150.h in Headers */, - 41C14148AF2029CEC265B780984A8219 /* MBLMagnetometerBMM150Format.h in Headers */, - F05B7CC79D8E00EBD454B78171830CAC /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */, - 3EA8EB2B48CBA070BD1830F422490231 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */, - 5D34FB1C1C2FC7DDE285A3F7298C5ECE /* MBLMagnetometerData+Private.h in Headers */, - 2476A7983704E02BA968CCA713214D22 /* MBLMagnetometerData.h in Headers */, - DBE1A5D527A3094ACC0FB7A86631FB82 /* MBLMechanicalSwitch.h in Headers */, - AE0DA387A8A9151AB46E93DF2F22DEB6 /* MBLMetaWear+Private.h in Headers */, - 1BADD91AF5D463D8241AFFF452492483 /* MBLMetaWear.h in Headers */, - 01610BDDB03C8319345B0DA8E361AAF5 /* MBLMetaWearManager+Private.h in Headers */, - C49EFA34EF8C71A86653586C27773FFE /* MBLMetaWearManager.h in Headers */, - 8464DA8A5C1B144C4B6DDFFC19EDF9D4 /* MBLMockPeripheralFactory.h in Headers */, - B1B0289A3528BE57495B541B4488F96C /* MBLMockUtils.h in Headers */, - D1032B11E97EFCA22CD3612F8E7B926F /* MBLModule+Private.h in Headers */, - A135326D27444685ABDBF65B2B6A5AAB /* MBLModule.h in Headers */, - F2954F9FCBD4841F3E854E1E406F98FA /* MBLModuleInfo.h in Headers */, - CD8E2449388784195394844FA6A3B173 /* MBLModuleMock.h in Headers */, - 4CB47FBFAEE5704AEE54DBD8E9629A11 /* MBLMovingAverage.h in Headers */, - 658CF0C3B3A9FA60392C2CEFC025E4D6 /* MBLNeopixel+Private.h in Headers */, - 75882F4BDF54E00341F3477995994797 /* MBLNeopixel.h in Headers */, - 44634A831ACE492B2E194F84AAF3929B /* MBLNeopixelStrand+Private.h in Headers */, - 90A057A1041C0CF1D4D92E7A4235DDD9 /* MBLNeopixelStrand.h in Headers */, - 37BFFBA0FA63401569C68041C296B6DB /* MBLNonVolatileState.h in Headers */, - 3ED9040C3BEEBA0BB044481ADF88F30F /* MBLNumericData+Private.h in Headers */, - B93349BD5C72708D265D6E3020E20C9B /* MBLNumericData.h in Headers */, - 9F2BAA44B5A00E2EBD17970F853FC66A /* MBLNumericFormatter.h in Headers */, - 7AA1E06DED45EF78CABBB4A35F5B69F6 /* MBLOnDieTemperature0.h in Headers */, - 3203FE481FBCDF31CE4088B6B344DB08 /* MBLOrientationData+Private.h in Headers */, - 52773DCA224EFFE58738D9FAD0AC08BB /* MBLOrientationData.h in Headers */, - 3CB11C3C7542B507C4CB159B4AEFB9EE /* MBLPhotometer+Private.h in Headers */, - CC73F1D18072AFE9B8A48B4100D93B8D /* MBLPhotometer.h in Headers */, - 43BC817D78BF0BC575EBF4102875E2F0 /* MBLPhotometerTCS3472.h in Headers */, - 8BEC3171F367E7C92175C8CBB951F3AB /* MBLPhotometerTCS3472Format.h in Headers */, - 9288EE814743E31F45A5B321C2B9EFCC /* MBLProximity+Private.h in Headers */, - 85C53E3EFA0A2A194F8194A7D4A44BCC /* MBLProximity.h in Headers */, - 9CFE1CE90B58CB04D88F6DCAE8BB0798 /* MBLProximityTSL2671.h in Headers */, - 37E8CE41A0BF01FD782859DE00759072 /* MBLQuaternionData+Private.h in Headers */, - 3228B5870F2984AD74D67847C80F8489 /* MBLQuaternionData.h in Headers */, - E99E7E1BA59E165C890DEE1BC5397DE8 /* MBLQuaternionFormat.h in Headers */, - C71B161744C48028ABF0320371C16756 /* MBLRegister+Private.h in Headers */, - 050F5390C754F7B21ECD61ED32B95685 /* MBLRegister.h in Headers */, - 2D13206CBA015B83228992898F301F98 /* MBLRGBData+Private.h in Headers */, - 671E5CA52E8A3627447FC70AF8DCFA7B /* MBLRGBData.h in Headers */, - 1BEDF982990E948740D7E54AA63056B4 /* MBLRMSAccelerometerData+Private.h in Headers */, - 724D72366156727F7ECA0423761CAC62 /* MBLRMSAccelerometerData.h in Headers */, - A6545831695B9244DA5061C64FF26A45 /* MBLSensorFusion+Private.h in Headers */, - E3BAB9E0566EF8025C951978F0F29C3E /* MBLSensorFusion.h in Headers */, - 8527E2C99A59A4BAAB9DA93D2B459A0F /* MBLSerial+Private.h in Headers */, - 7383D76ACA81BE971A786B58B93E5533 /* MBLSerial.h in Headers */, - 575EA37A4962A6DFF7609BDBD34B51F7 /* MBLSettings+Private.h in Headers */, - ED4A5CCBE0ED10F0919D5E093BB5A16A /* MBLSettings.h in Headers */, - CBA0330446B059EF95F386335AF63D24 /* MBLSPIData+Private.h in Headers */, - 3EF7B7A47A819CE32190906DC31D05A8 /* MBLSPIData.h in Headers */, - D5F095852C381A58FC3F3905942F253B /* MBLStringData+Private.h in Headers */, - 39EB65EE97E31C8CABCCC2CDBA6B1A54 /* MBLStringData.h in Headers */, - 802EBC5D253A24882AB9D986F74C001B /* MBLTemperature+Private.h in Headers */, - 8221FF31CDB5A3B79E3723DAEFF596B3 /* MBLTemperature.h in Headers */, - A0BDFD2B3E7A573D2AB10F0493793526 /* MBLTemperatureV0.h in Headers */, - F24B2FA22DA34C2F17E071A85753CE75 /* MBLTemperatureV1.h in Headers */, - 8FC6AC26736361D5A0A3C2057C548C13 /* MBLTestDebug.h in Headers */, - 4FA6401BFE1D576FD5637639F4EFE4CB /* MBLTimer+Private.h in Headers */, - 89C70F298C63EDF7DBB6AAB87B7B17C1 /* MBLTimer.h in Headers */, - 6084AD6C166F4B71E908E4BA3B70D548 /* MBLTimerEvent+Private.h in Headers */, - AD487D65E873E713D239DA54DE6A228A /* MBLTimerEvent.h in Headers */, - A2E24A53F2DFE81755FDAAF881A96912 /* MBLTriggeredRead.h in Headers */, - 63361295ACF50647FD7EAF141A003EF5 /* MetaWear.h in Headers */, - 065DAF8C7CC2167FE3B8ED7CB5A9D895 /* MetaWearPrivate-tvOS-umbrella.h in Headers */, - 655BFC88528E2E667F9ADC279064D110 /* mma8452q.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 712CB9A4E0F17BD01F9E04F8A6098DA6 /* Headers */ = { + CC676FACBC7633A4F799950DBE4EC615 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6034F2B5AFE2214155CC1E20FA7D89D8 /* BFCancellationToken.h in Headers */, - 7ED311EDC521A5F8033337049AB450E4 /* BFCancellationTokenRegistration.h in Headers */, - FEDD3D65ABA05570E54BAE324331BF21 /* BFCancellationTokenSource.h in Headers */, - 3F62F9D0AF72A7FEE2B5499770D88474 /* BFExecutor.h in Headers */, - AC9C510D4565F428563AA542D07018E1 /* BFTask+Exceptions.h in Headers */, - 91644C657F33AA0BAC2AF8C8DC67E859 /* BFTask.h in Headers */, - FF596E19E30DB5125A2912D901FA9438 /* BFTaskCompletionSource.h in Headers */, - 91299C5A7C6D42030DF7CC0132A5EE60 /* Bolts-iOS-umbrella.h in Headers */, - 1A8A3A5C6373B9A5558316C9A199F6E3 /* Bolts.h in Headers */, + C57B94838F6A18930401DB65ACE85E0D /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - 85BA7B4A57CC8AAA472C6741888F418E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 81657463B6EEA141962995E993BDB0D9 /* Pods-MetaWearIntegrationTests-tvOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 93824468A668C896D160BA4F588E44A5 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 229805FABF8921235249952699929F78 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9938B2377238F69F7AD7FE60D3821BE4 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 86CD907F1575EFF316DDB9FBA452B479 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 9C412E5809440D25295A84BDC857A1A7 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - EB060E4CB4A3DBA159342A4C204AADCF /* crypt.h in Headers */, - 5BCE35191B656F94155C35BF61862775 /* ioapi.h in Headers */, - 5DF03A51B7B21C0CBF80ECD686DF2244 /* unzip.h in Headers */, - 5444800DF0C956F4F432F20860297563 /* Zip-macOS-umbrella.h in Headers */, - B3FF00EAB1725AA44452F203A0EED8D8 /* Zip.h in Headers */, - 5912B57541DFA685C0161A66C5A90FBC /* zip.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A0918F23AE14AC874F32DEEE0B2FC924 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 4D96E419C113B7325F0B3854C602D4B6 /* Pods-MetaWearIntegrationTests-macOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A9478911E511B433B6592F07786789C1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E79CD3F5C276A015B2D66620D045DF94 /* FastCoder.h in Headers */, - 39F61D91B784185929A10EEEE5631F61 /* FastCoding-iOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - ABB55548A1AEC7B02BD4417F930F3077 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FCDC34F3DBA97A98AEBF0A674E37D1E9 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BA05DF473A4F9915DA637FA0336BA8E1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 358A49E154F5971143FEAB66FB5A8C12 /* BFTask+MBLExtensions.h in Headers */, - F5B1DA38DD4528120A51904AFC7F0949 /* BFTask+MBLPrivate.h in Headers */, - C5A7D383A03174E76EF62685694D694F /* bmi160.h in Headers */, - 3CB6E44B235C276C288837E314D2670F /* MBLAccelerometer+Private.h in Headers */, - C3EB985173DD5201EB7D23C988EE97E5 /* MBLAccelerometer.h in Headers */, - 8B8D376EC741830C78527FBC48212B33 /* MBLAccelerometerAxisReadyEvent.h in Headers */, - 9B43055CDCFB5562E4B6E90772F4FB9B /* MBLAccelerometerBMA255+Private.h in Headers */, - EBA31C4EF1F96D42D4907E7DC195D699 /* MBLAccelerometerBMA255.h in Headers */, - 7AE8CDA0452E9684E696CD726C06FED4 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */, - 283CE05CDBBFD853ADC82810E11A1101 /* MBLAccelerometerBMA255MotionEvent.h in Headers */, - 422ED314D1CF8F458F5AB18BCA0D4989 /* MBLAccelerometerBMI160+Private.h in Headers */, - 864A00FD264C748AEFF1A9352A980D3D /* MBLAccelerometerBMI160.h in Headers */, - 51B35CE0F9F722A5B62D571551B35C8C /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */, - DAC3259FD2BAC23F08A8E7DAF4DDBC20 /* MBLAccelerometerBMI160MotionEvent.h in Headers */, - 3038B5C601ACB4DB125544496CAD5EC8 /* MBLAccelerometerBMI160StepEvent.h in Headers */, - 67EA81F5683048C76E6603A6C55B8EE1 /* MBLAccelerometerBosch+Private.h in Headers */, - B3BE3D44FB36EBBEDB5C18662912B8B1 /* MBLAccelerometerBosch.h in Headers */, - EA401DAF59F1D1F88A6FDA5C2F1BE8F6 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */, - FA57F5203A181DF6FD013712142A18C1 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */, - 97AE1A4631D93899AD4EF8BA65C67DB4 /* MBLAccelerometerBoschFlatData+Private.h in Headers */, - 88C2FCAB92AE9286551A0F295C29C2BA /* MBLAccelerometerBoschFlatData.h in Headers */, - 88E11044BE0941ACD27AD74B4055D746 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */, - D25CCE0CB7B39032060365E407CEDFFB /* MBLAccelerometerBoschFlatEvent.h in Headers */, - 647F5A8E393821B58E62C863985C0B80 /* MBLAccelerometerBoschFlatFormat.h in Headers */, - DDC3FB3E9735133C2A3EBEDE6045A516 /* MBLAccelerometerBoschFormat.h in Headers */, - FA01F4E088294B11ADB33D8685AC8D5E /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */, - 9E66A017A3091A7BF664C25BEB23ED9E /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */, - 27A50FE0994708EAE5A8B06A72C9A4D8 /* MBLAccelerometerBoschOrientationEvent.h in Headers */, - 650965B06B701AC676FFB31E93D57DFA /* MBLAccelerometerBoschOrientationFormat.h in Headers */, - 09E76BA1EE35B5E23F304AEBABC9E4D2 /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */, - AB4CC819E6B6C9512D19E295B1BCB615 /* MBLAccelerometerBoschRMSFormat.h in Headers */, - BBF339991229F58933A22BCB392C8C40 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */, - 83BC2AB35A2FADBB1B07FA95DACCC72E /* MBLAccelerometerBoschTapEvent.h in Headers */, - A43216CACEAFC9EF417245DE7A4D7E0F /* MBLAccelerometerData+Private.h in Headers */, - E74D6F6C66DE20E7A367B5D66014AB4B /* MBLAccelerometerData.h in Headers */, - 9864C846F5D5C1A838F6B2609AD4B785 /* MBLAccelerometerDataReadyEvent.h in Headers */, - C5F4B44B27B07B753D9CD1B8FD455C6D /* MBLAccelerometerFreeFallEvent.h in Headers */, - 8D4009669BE2C81AB8FCB87F0B40AA3D /* MBLAccelerometerMMA8452Q+Private.h in Headers */, - F90942FF09A8C6AA3552481A7F8C4F17 /* MBLAccelerometerMMA8452Q.h in Headers */, - D9B182EE8407F5A2EF67D57D59CF8396 /* MBLAccelerometerMMA8452QFormat.h in Headers */, - 476657FD7C8BDCF9977DB8539A990440 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */, - ECC8032B8912B964BB99FB7B1D2D334E /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */, - 1FB7080E5214641764BE238088E4BDDA /* MBLAccelerometerOrientationEvent.h in Headers */, - 21F1BA15E385E0C4D11300AABD8F7E45 /* MBLAccelerometerPackedDataReadyEvent.h in Headers */, - 0F4BE94542C3A396CBE3D9DD35AD0435 /* MBLAccelerometerShakeEvent.h in Headers */, - 7D849049029E0C695BAFD7614CFF074A /* MBLAccelerometerTapEvent.h in Headers */, - E142023071BF61D8A6430248B4BEB57D /* MBLAmbientLight+Private.h in Headers */, - CDA5CA3676BCD28406A55C01D1C8C8AF /* MBLAmbientLight.h in Headers */, - F5D0E11F405D5FBB3D355B93DB5E1A6C /* MBLAmbientLightLTR329.h in Headers */, - 076594AF7AF79EBB836A96F5285FDA95 /* MBLAnalytics.h in Headers */, - FB59EDEAA8F23655DFDEFA3D3B344357 /* MBLANCS.h in Headers */, - 7BBF4485A15DB03968DCDAE05FFD2E20 /* MBLANCSEventData+Private.h in Headers */, - 9A27EE4279414A7D28D999977259CFD2 /* MBLANCSEventData.h in Headers */, - 8F8047A84F6509715F51D32548A6FB0E /* MBLAnonymousEvent+Private.h in Headers */, - 08DB423DCA30C6C3E2F44B7ED47C1FA9 /* MBLAnonymousEvent.h in Headers */, - 0CCAFC9EE4619B09B706E82FFD3A4611 /* MBLBarometer+Private.h in Headers */, - 0F97C8DA8BF768289B425606D786E844 /* MBLBarometer.h in Headers */, - 6CC0A4C142BF5AC31090F9EA8E0EF24B /* MBLBarometerBME280.h in Headers */, - 029C4F0C0AB5BCF5469D9F74DF990EF4 /* MBLBarometerBMP280.h in Headers */, - 9AF696FFEDA8703A3B8337D7225A60FD /* MBLBarometerBosch+Private.h in Headers */, - CC83C06B72CC7A60AC577F6817CBE5D0 /* MBLBarometerBosch.h in Headers */, - 9AEBCE883BBA944B442CC7C69389184B /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */, - CE6977FDB4CBCF8DD0B3D489B6C6D840 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */, - 938A431516122F4F0A2A9D38C1C598B3 /* MBLBitmaskEvent.h in Headers */, - 4DC8F6FAD1E20AD073D91D8D52546A79 /* MBLBluetoothCentral.h in Headers */, - 89890FA8314D4F0F4DFE319B21A00D27 /* MBLBluetoothCentralMock.h in Headers */, - 325670BA2946A78BB53CAEB457CB9B51 /* MBLBluetoothPeripheral.h in Headers */, - 158CFCD1BFE2BFE26322EE441D9864EC /* MBLBluetoothPeripheralMock.h in Headers */, - 580C1F6942D95724B25854C54D6967BF /* MBLCategoryLoader.h in Headers */, - 445A30CAC813012D9510FFFB26786D17 /* MBLCommand.h in Headers */, - 261525530404D580B222F3ED2D2FB167 /* MBLConductance.h in Headers */, - BB57B0723D6558B986BF08248A94BE92 /* MBLConductanceData.h in Headers */, - EA45B813656D90C8C066B0037993CEBF /* MBLConstants+Private.h in Headers */, - B414B1553A0DC6C9D2081076DEE9B98B /* MBLConstants.h in Headers */, - 8622CC4F749B6C9D83882726E64B5F8D /* MBLConversion.h in Headers */, - D1029BA5E05BFFA12F30C5EE45CF9849 /* MBLCorrectedFormat.h in Headers */, - 86352CCA8F4D4CD2FE902379E1255B73 /* MBLData+Private.h in Headers */, - 74F51E83688258904BA271532A7C9630 /* MBLData.h in Headers */, - 37F10ED71A7CC7800849F54C08882802 /* MBLDataProcessor.h in Headers */, - 443FDC19DC630E09F6F60BEE4EA26E0A /* MBLDataSample+Private.h in Headers */, - 5A5C7D8EACBB3DA34175E03FE5742D7E /* MBLDataSample.h in Headers */, - 39D73C2B2318C88A7E845799F0F71A86 /* MBLDataSwitch.h in Headers */, - D001E16FC29DC6F504870C81ACB0A265 /* MBLDependentData.h in Headers */, - 3C738F7463EF0BDB185CBFC13270B5C9 /* MBLDeviceInfo.h in Headers */, - 1F109BFFBA8A44FD7B485A2E1065C6CB /* MBLDeviceLookup.h in Headers */, - 3923E278CAA277ADA86ED5FA8508A2F1 /* MBLDispatchQueue.h in Headers */, - A777EC5E9604E40CA758FFCC0074AC9B /* MBLDownloadOnlyEvent.h in Headers */, - E51FBB4025175305BA033B9CF738BB85 /* MBLEntityEvent+Private.h in Headers */, - AE38095A3FC7257764AAB422F99D7632 /* MBLEntityEvent.h in Headers */, - ABE635281CFF829CB888D7D006932A52 /* MBLEntityModule+Private.h in Headers */, - CD4397297ACB01C9948199313A97F8AE /* MBLEntityModule.h in Headers */, - 3EE198D4E3A19667C413F0A3AE82D4A2 /* MBLEulerAngleData+Private.h in Headers */, - 6E5DBAE43D669E97EE0EA81ADC8A6D61 /* MBLEulerAngleData.h in Headers */, - BF86A3CCCE7C2541ED5AD5E606E39944 /* MBLEulerFormat.h in Headers */, - 2D6024136109CFEC51B690606B41D2A0 /* MBLEvent+Private.h in Headers */, - D401B839D2D0E6DD8FAC812098A3AC1B /* MBLEvent.h in Headers */, - FF68DA8D9A6F2294B18446E810D3B2F7 /* MBLExternalThermistor.h in Headers */, - DF0BC990B3025415E1DE10D513FB231F /* MBLExternalThermistor0.h in Headers */, - 74BD97BC347BC6D0AFB881936C18CCA2 /* MBLExternalThermistor1.h in Headers */, - 58741CC862117C93BB81C999DC806239 /* MBLFilter+Private.h in Headers */, - DC2E80B49E1E57E0BFE0BF0AAEAF9EEE /* MBLFilter.h in Headers */, - BA8E845C5FDC628B6B39F07D4E9796EB /* MBLFirmwareBuild.h in Headers */, - FC6F75B0B2AB05B843444AAD6B736958 /* MBLFirmwareUpdateInfo.h in Headers */, - 7C712BBAA044CD8363A2B1C3C25AFCA5 /* MBLFirmwareUpdateManager.h in Headers */, - A0A6CF6F8B6654DFB5C4316693653F1F /* MBLFormat.h in Headers */, - 3ACF2E9DC506EFA081284453AA10258D /* MBLGPIO+Private.h in Headers */, - 794ED4C2AFEBF60FD930F858DC008A7E /* MBLGPIO.h in Headers */, - 47C8B8DEC4F64C6041D91DFF5D4A0BFE /* MBLGPIOData.h in Headers */, - 10EFDE86A1E0304C9E6F8A72F77A54AB /* MBLGPIOPin+Private.h in Headers */, - A24269BAC1CB7522DC0CCB0A3F14CBAF /* MBLGPIOPin.h in Headers */, - 45749417A514C569BC8F71F3FCECEEA6 /* MBLGPIOPinChangeEvent.h in Headers */, - 2248DF9B1D989A770F3218DD434EDA57 /* MBLGravityFormat.h in Headers */, - B36B949E99D14E5E8ADF5CEBEE056DCD /* MBLGyro+Private.h in Headers */, - 1683391C78CECB036D6BD9FCA3721881 /* MBLGyro.h in Headers */, - 8AE40B5E3CFFF75823090E9232D1DB4F /* MBLGyroBMI160+Private.h in Headers */, - F248FFDF00CD1D1862AB9532F851535B /* MBLGyroBMI160.h in Headers */, - 40A4B1F6E1E18B58B4C2C82F26C22E03 /* MBLGyroBMI160AxisReadyEvent.h in Headers */, - 1184263517FF2266110029BA64E841E1 /* MBLGyroBMI160DataReadyEvent.h in Headers */, - 1EF75BF178B422C22089520BA4F10F3B /* MBLGyroBMI160Format.h in Headers */, - 026B0B970497CED9D47C8C918548BEF4 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */, - F6694F957AADD94EE7EF5697E83DDFD3 /* MBLGyroData+Private.h in Headers */, - E65B0F52FFBD4D8475FB08A50854388B /* MBLGyroData.h in Headers */, - 30E28F33BE050951F318DC1C14103A32 /* MBLHapticBuzzer.h in Headers */, - 05BB584BCAF2A1E559D9D9DA44037C90 /* MBLHygrometer+Private.h in Headers */, - 16C8840358D63CF86A627CED2711D3B8 /* MBLHygrometer.h in Headers */, - 7E3943D1AFA070D4134AAD5A943D6BFA /* MBLHygrometerBME280.h in Headers */, - 99AEC2BE2CA23EA6E7AA5BF1F4206DE7 /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */, - 21D069A34CE504D64F7DFD0792C0E72D /* MBLI2C.h in Headers */, - 33F264326BB21B1CFF6FFA36ED465E7B /* MBLI2CData+Private.h in Headers */, - 69200395FDD58D5F2B0C8A4A147C1979 /* MBLI2CData.h in Headers */, - 871349E7E2FBED34DB2B82A4C4D0765F /* MBLiBeacon.h in Headers */, - D31E708E543FA4AEE438500C033F1B30 /* MBLLED+Private.h in Headers */, - 249456F0F9D20E7472D56F7BB08D346A /* MBLLED.h in Headers */, - F19A43D7F6F6C7064624063DAF805208 /* MBLLogger.h in Headers */, - 636FF53E16F624F32D507239D1E2EB4F /* MBLLogging.h in Headers */, - 60AD2288AB79011F18C35D0DBB9852D6 /* MBLLoggingV0.h in Headers */, - BE8A3053079F1E76419FB0D57CE813E4 /* MBLLoggingV1.h in Headers */, - 3C4D76F15572AE02D248A7E3B2E83210 /* MBLLoggingV2.h in Headers */, - 5CE727E79E5F55A3604720D884E0E5DD /* MBLMacAddressFormat.h in Headers */, - 695C1A915E2F025D994433A8DE1E502B /* MBLMacro.h in Headers */, - 134805D3015851E11E075DC536091006 /* MBLMagnetometer+Private.h in Headers */, - 5E437BE89B382A3406D06BABB66806E6 /* MBLMagnetometer.h in Headers */, - FD400117AB55C4CBCD2F4A58C07F1AAE /* MBLMagnetometerBMM150+Private.h in Headers */, - 685FB97EFEC7FC123CFA3A81AEAAB96C /* MBLMagnetometerBMM150.h in Headers */, - 7CD3F6C935F8236CCBD095D5FF17E954 /* MBLMagnetometerBMM150Format.h in Headers */, - 0AE2E60A7B25510D3C5CD4C0FF4289B1 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */, - 8FA022A3CBB1F06E0E339A0A48C94A42 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */, - F94825A3FC4C45C761A18FDE241FA271 /* MBLMagnetometerData+Private.h in Headers */, - 1AD69B65FD1381BB905A315C0136AE6B /* MBLMagnetometerData.h in Headers */, - 6B17AE8BA8FD78446B9731847988F4F3 /* MBLMechanicalSwitch.h in Headers */, - 4914E6DE97D09933E5D33DAAA61FBDCF /* MBLMetaWear+Private.h in Headers */, - 71EA337BD7291FD9E68FD16EC6EA7863 /* MBLMetaWear.h in Headers */, - 82D30C0CA777F705B0E9E6F69C5A8D16 /* MBLMetaWearManager+Private.h in Headers */, - 91AA978DD338A89518DC88680EF46EBF /* MBLMetaWearManager.h in Headers */, - 41C99359D3C8AF0C3654762B8B65128C /* MBLMockPeripheralFactory.h in Headers */, - 0F387D6C6316928B18C06FB8B547BB47 /* MBLMockUtils.h in Headers */, - EA2BA69C6E3CC75582E59F8079D9C029 /* MBLModule+Private.h in Headers */, - FDFA30D64CD4C8A79F6C99632DC14645 /* MBLModule.h in Headers */, - 75D6EE5C49FC4CA231E61A35E0F05B26 /* MBLModuleInfo.h in Headers */, - 8A82B7C4DF292DD2DC781D5C59D2D9DA /* MBLModuleMock.h in Headers */, - AB3ED8003F946811700EA92EF60DB540 /* MBLMovingAverage.h in Headers */, - 6016702C9F9C35AEEEF3E260BFC6BCF2 /* MBLNeopixel+Private.h in Headers */, - 4370CD0B95BEB03E99408A7638E2A19E /* MBLNeopixel.h in Headers */, - A86046077B8B5C0A41AB148BC7E644BD /* MBLNeopixelStrand+Private.h in Headers */, - BA19159A55B77ECDC97D7AE06111810A /* MBLNeopixelStrand.h in Headers */, - 2AF74970CA44795EDE79D80CBFF7A6C2 /* MBLNonVolatileState.h in Headers */, - C482207C72BA44088654914C80321303 /* MBLNumericData+Private.h in Headers */, - 01FF7476D2FE72586115B470903C8524 /* MBLNumericData.h in Headers */, - CA66B68FA8A5546FC287B1CDA5634FE5 /* MBLNumericFormatter.h in Headers */, - F876506BA3F2571387006E034E6E0272 /* MBLOnDieTemperature0.h in Headers */, - ABD908EFA3EB3AC18EA303AB976F1D28 /* MBLOrientationData+Private.h in Headers */, - A79FF6070B62BE0D4EEDBB5F7AD7771F /* MBLOrientationData.h in Headers */, - 1A504214DAE805E03BCEC2570A8E873C /* MBLPhotometer+Private.h in Headers */, - EBA1F29B7055D76B4CA0888E55CFCB1A /* MBLPhotometer.h in Headers */, - 7E0D4FE0138F716E5A28B871F920AFC6 /* MBLPhotometerTCS3472.h in Headers */, - 687FEB18BBF376246E45DC63D6E6433F /* MBLPhotometerTCS3472Format.h in Headers */, - F587498D00E912DA0E234967DB16BC57 /* MBLProximity+Private.h in Headers */, - B04AC63B6C8E50AD891608FC784C9A99 /* MBLProximity.h in Headers */, - A4040DC85914214CE70515E41B51CDE4 /* MBLProximityTSL2671.h in Headers */, - 3C1FCE915BDEDF53846D2A62C14ED4F8 /* MBLQuaternionData+Private.h in Headers */, - 8240E1F06432929974B19DEAE113B74F /* MBLQuaternionData.h in Headers */, - 66C7FED6F15DF4C78C21FACE24DA0947 /* MBLQuaternionFormat.h in Headers */, - A4957B568D475E7C71CC2C77469AD173 /* MBLRegister+Private.h in Headers */, - 0306659B291A7C167BE888888BE89763 /* MBLRegister.h in Headers */, - D74C14587ED6B87C5B13011C77860FBD /* MBLRGBData+Private.h in Headers */, - C7D3B4DD0A1EBE7FCE8A754D8AB6E1C1 /* MBLRGBData.h in Headers */, - 58CD8405BBFBFD132DA52E092459D021 /* MBLRMSAccelerometerData+Private.h in Headers */, - FE05A5671D69ED9B4DECF9A7AC8CFE3A /* MBLRMSAccelerometerData.h in Headers */, - A2312615A331ADA5CB8C0D34BFE8BBB1 /* MBLSensorFusion+Private.h in Headers */, - DC5516B672AAB11FB832E401B92159FD /* MBLSensorFusion.h in Headers */, - 107ED71EE124C405956B71DB00E7602F /* MBLSerial+Private.h in Headers */, - 6E49D4102EB1BC9BF4C03D3455A6FA76 /* MBLSerial.h in Headers */, - 3A9A1173F26434352A087A3AFD56063B /* MBLSettings+Private.h in Headers */, - 55E233C769CAA964A40E3968B0808074 /* MBLSettings.h in Headers */, - E0AFD24AC8C7DEA651E069F8B38E9F5A /* MBLSPIData+Private.h in Headers */, - 987FF80CEDE4FDFDADFE2DA7A3618FA5 /* MBLSPIData.h in Headers */, - 529AB1D79AC838B98665EC2427CE9FB5 /* MBLStringData+Private.h in Headers */, - 6787D5713BCEF6B6E108A7E851FDD632 /* MBLStringData.h in Headers */, - CAA4F209CDE6962EE2CA57C5F7E5D46A /* MBLTemperature+Private.h in Headers */, - 5A82AFB9CA79602DCCDC61DE324BBA24 /* MBLTemperature.h in Headers */, - 692C8BC0C65B5E19601CE9308B384A63 /* MBLTemperatureV0.h in Headers */, - A8A953C3C187AE8C4317FE3ABFD0C679 /* MBLTemperatureV1.h in Headers */, - 75760E16B7B3D9C2958ADFBD1C5DA9A3 /* MBLTestDebug.h in Headers */, - 4E25747D9E54DD5323B11FB1E294E4CA /* MBLTimer+Private.h in Headers */, - 40E19ACA6666634200C488DD5A2F589D /* MBLTimer.h in Headers */, - 0789FE768CE1AA1805268A56370C0DD3 /* MBLTimerEvent+Private.h in Headers */, - C5F37C6D9BDFC7B406F8944EDD224D12 /* MBLTimerEvent.h in Headers */, - 27BE5572CC2B6E841CA0283B5A3A2FA4 /* MBLTriggeredRead.h in Headers */, - 69CCC1F65E8B1B87A538CA73EB6783C2 /* MetaWear.h in Headers */, - FFE2EE2096221AC05B548F0314EB105F /* MetaWearPrivate-iOS-umbrella.h in Headers */, - 8DC70A659643ED2CC1FEDEB1D28F1860 /* mma8452q.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C193AC2FDEFB04EB35931FBF21B945C3 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - D25FF78376EA4ECD3A4B8DF4C96E06D3 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C2D43615CEB0FBE03506176F41A6F738 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - DD75C576FD3B64EFD7F11DE674F56211 /* FastCoder.h in Headers */, - 5B72266A2871D0406B48C1EEBF9A7E32 /* FastCoding-macOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C4DED32C8AE39E7BE4C745176F4C9AF6 /* Headers */ = { + CE33CED41DEAC59798461CB4C78DC119 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - CB52738C5C2033CD7E9E3F4DA6457245 /* IntelHex2BinConverter.h in Headers */, - 90408E1DDC09A4DE4657FD2E7308EDCA /* iOSDFULibrary-macOS-umbrella.h in Headers */, + 66B6CD3B5D5401756BC548584ED6DDC9 /* crypt.h in Headers */, + AB493B7386316D35B70B182D790999AE /* ioapi.h in Headers */, + 05B279D20332CE57592872F685EDB50B /* unzip.h in Headers */, + B7233AFC7384A8BFA78AD310266888EB /* Zip-iOS-umbrella.h in Headers */, + 6FF3E102D30E2A0ADCB22C3DDA3F4A34 /* Zip.h in Headers */, + 01F2E855D2CDB3461C9EBF8974351727 /* zip.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C8074943E39013830D2926A37700EE33 /* Headers */ = { + CEAA19AA1DFA3B852894181872FB6106 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - B02241139E7FFB6606CF7847CF2056EF /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h in Headers */, + C496B135776B64230FCE2FFD066BAC09 /* IntelHex2BinConverter.h in Headers */, + F22C7A15566ABC59095FE23A18C08C34 /* iOSDFULibrary-iOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - C85D14396D5C847D3D39B7D23BE96E38 /* Headers */ = { + EDA2E1B5A189DAF5240E67827359901C /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 0BCE138A7C66BEF6489784558D125B89 /* Pods-MetaWearIntegrationTests-iOS-umbrella.h in Headers */, + 2E4CEAFAA40E568A2FC50F3C9C3A0F0D /* Pods-MetaWearIntegrationTests-iOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - CE33CED41DEAC59798461CB4C78DC119 /* Headers */ = { + EE5AA391C20B727D4ED945CE924D7EB3 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 66B6CD3B5D5401756BC548584ED6DDC9 /* crypt.h in Headers */, - AB493B7386316D35B70B182D790999AE /* ioapi.h in Headers */, - 05B279D20332CE57592872F685EDB50B /* unzip.h in Headers */, - B7233AFC7384A8BFA78AD310266888EB /* Zip-iOS-umbrella.h in Headers */, - 6FF3E102D30E2A0ADCB22C3DDA3F4A34 /* Zip.h in Headers */, - 01F2E855D2CDB3461C9EBF8974351727 /* zip.h in Headers */, + 0A92A75E1F330C5F90449CF0A992F751 /* MetaWear-iOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - CEAA19AA1DFA3B852894181872FB6106 /* Headers */ = { + F417407C0B6EA3CDF6393834844740BE /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - C496B135776B64230FCE2FFD066BAC09 /* IntelHex2BinConverter.h in Headers */, - F22C7A15566ABC59095FE23A18C08C34 /* iOSDFULibrary-iOS-umbrella.h in Headers */, + 510A1E5020AE426C651FF7E9211EF13E /* Bolts-Swift-iOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - D2248524CD289B8C384358EFD6E3C66B /* Headers */ = { + F6B04786383EE1BFB56B5A9F7770FE07 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 6DD7A6FF143032267FB712C8839D067E /* BFTask+MBLExtensions.h in Headers */, - 6701284D5C0B47457965778DB5625E7D /* BFTask+MBLPrivate.h in Headers */, - 0988220B7B2FA6BA5E04E8CFE3E0578B /* bmi160.h in Headers */, - E9B46952228C251F0CF56F206664AD6D /* MBLAccelerometer+Private.h in Headers */, - 13E552B52E46D3C1E2BFB178C1AE7844 /* MBLAccelerometer.h in Headers */, - 558F836E1A1B61D8CF4DC2FEFEFB869A /* MBLAccelerometerAxisReadyEvent.h in Headers */, - C7190FA4B14F1499D0454E9D4D60512C /* MBLAccelerometerBMA255+Private.h in Headers */, - F20805120989BB3AAAC3DD0AF8C1FD30 /* MBLAccelerometerBMA255.h in Headers */, - 297861152CF3D84CE92DAC49186E7D99 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */, - 8CDE4282C692157994E4C978ED1B1651 /* MBLAccelerometerBMA255MotionEvent.h in Headers */, - 8D5CD8F6990D2A28C76B883E988E19A0 /* MBLAccelerometerBMI160+Private.h in Headers */, - FDAC2A8E40F041C62DEBC85AC557711E /* MBLAccelerometerBMI160.h in Headers */, - 463045525D437F0877E2F8C7F7BF4F8F /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */, - 0E9DCF92DC22447BEBA6A6890862A8E7 /* MBLAccelerometerBMI160MotionEvent.h in Headers */, - EA979C00DBB855D5C458783BD6082FFD /* MBLAccelerometerBMI160StepEvent.h in Headers */, - AF502F3C97B182D6214C66909B3E1B7D /* MBLAccelerometerBosch+Private.h in Headers */, - 9CFF0F60961234C29CFED38519E40785 /* MBLAccelerometerBosch.h in Headers */, - A43C903AF42C0C25636F2E801CF1CAD0 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */, - F97263C490DB6C6E771619C7CB0D7867 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */, - 90A0ABA7C6412371B571F1B843F97249 /* MBLAccelerometerBoschFlatData+Private.h in Headers */, - 2AAB37268EDAD801FE49EDA4AB30A4A3 /* MBLAccelerometerBoschFlatData.h in Headers */, - 964A2378F3E5716E6DED3522EFA6DD98 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */, - 1CF0CA7ED555E952EE679F1BDD14AEB8 /* MBLAccelerometerBoschFlatEvent.h in Headers */, - 98138D45BEB796A5544F67AE3D4626BC /* MBLAccelerometerBoschFlatFormat.h in Headers */, - BED1FCFE73C31CAC6EC77D57BA06E62D /* MBLAccelerometerBoschFormat.h in Headers */, - 828C2DDD22536D392E153DBFA768ACBE /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */, - 45E8F0066BD99162D73EB6F2322600BA /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */, - 0C032BE16A918BA09768AFA56BC0F826 /* MBLAccelerometerBoschOrientationEvent.h in Headers */, - 0D178AB9C0254D0A81F1C0A69A73D167 /* MBLAccelerometerBoschOrientationFormat.h in Headers */, - 2E11CDDB9458D1002B5AE914AB6F7504 /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */, - D30B019042B897F3CA6FDD633C17298C /* MBLAccelerometerBoschRMSFormat.h in Headers */, - FA8C5BFE6C6789282EED4B58BD03CD35 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */, - B1F893DB33F0A19DAAE787F0FCAAF67E /* MBLAccelerometerBoschTapEvent.h in Headers */, - BC35B5E4AAE85D1B40ECEFD5BD015D1E /* MBLAccelerometerData+Private.h in Headers */, - FD9EF42230CFB43DAFDB964F7BD72AB2 /* MBLAccelerometerData.h in Headers */, - 0AD73E1A6BCA484FDBB917205FA5F0A1 /* MBLAccelerometerDataReadyEvent.h in Headers */, - 84468A1362883CC539648B41A27E3CE5 /* MBLAccelerometerFreeFallEvent.h in Headers */, - 42BF43CA953519C0A9B21BAFD07C1BE1 /* MBLAccelerometerMMA8452Q+Private.h in Headers */, - 11E8718BF58612707E521A18354DF47F /* MBLAccelerometerMMA8452Q.h in Headers */, - 2D76A1221232FC1C13752505482001C8 /* MBLAccelerometerMMA8452QFormat.h in Headers */, - 439A9E2CC277C41CA2168DB7D4CB1E67 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */, - F69AFDABA6762F1E06AE491A3FF344F9 /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */, - F396DE26ABFFE3E71988185761B85D58 /* MBLAccelerometerOrientationEvent.h in Headers */, - 432523F07DC86C182F1251F99124AF0C /* MBLAccelerometerPackedDataReadyEvent.h in Headers */, - 81DDCFCD5EC85DC5263E7367B05DDA13 /* MBLAccelerometerShakeEvent.h in Headers */, - EB45D92CBA4AD089BE83A83FEAE37EF9 /* MBLAccelerometerTapEvent.h in Headers */, - 6532167C4BC760E2FFA178A7F2F844F6 /* MBLAmbientLight+Private.h in Headers */, - FE351605B85AD47EB7514DE802FC52BC /* MBLAmbientLight.h in Headers */, - 09D2B706991EDD305986E56CA6BF4B21 /* MBLAmbientLightLTR329.h in Headers */, - 0FE13EA63BC6A6B663892602C2AB58BE /* MBLAnalytics.h in Headers */, - EB7000153996F6DEC83F54FACDB964A1 /* MBLANCS.h in Headers */, - BFEAFD0D03F42AA5D1F5B721B587397D /* MBLANCSEventData+Private.h in Headers */, - 250D1C1DDC61FDD79BE73C3944A24FB1 /* MBLANCSEventData.h in Headers */, - FAC615B2DC559B46E686A3CC5A6DC096 /* MBLAnonymousEvent+Private.h in Headers */, - 82669BFB8E6C6BB98E273C0AB75BA8C3 /* MBLAnonymousEvent.h in Headers */, - E43E64F5769818FD5715B23705637186 /* MBLBarometer+Private.h in Headers */, - 58815845DFC3716764B42DABE20AC105 /* MBLBarometer.h in Headers */, - 8788C3923B875465B6E45E3D50D4038B /* MBLBarometerBME280.h in Headers */, - FF2478FA6CB4BF2896392F5E93B6F01D /* MBLBarometerBMP280.h in Headers */, - 2F5FDCCC683B47DCFBCFAD55132C873C /* MBLBarometerBosch+Private.h in Headers */, - 34A0ABFCB6BB71C31DC2767EB332D519 /* MBLBarometerBosch.h in Headers */, - FE61D5FE978525B365F090440121FDA8 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */, - ABB4AA04BA14CA7AB9631C85DB931F0A /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */, - A03007271ECFD4BCCFD40BED4ADC2318 /* MBLBitmaskEvent.h in Headers */, - B67B337BA2FA38B3FCD311C0C85A1F81 /* MBLBluetoothCentral.h in Headers */, - 653A1DA9D3589527059196E672457E39 /* MBLBluetoothCentralMock.h in Headers */, - 0972067B0940D8002401974EC2FC0A9D /* MBLBluetoothPeripheral.h in Headers */, - D7A5C2CA3B4AED75EFAB0EF871E5CBED /* MBLBluetoothPeripheralMock.h in Headers */, - 12AE15F529E49D640848CB041F498F17 /* MBLCategoryLoader.h in Headers */, - 9F739D6B5F32BC275706447F50F0E49D /* MBLCommand.h in Headers */, - 0459072D1D6EACE1455AEDA24EE776AE /* MBLConductance.h in Headers */, - 1D43682BF227D3BB636DAC82A8F4987B /* MBLConductanceData.h in Headers */, - 63EB43E998517245F3584EAF3D9F3D71 /* MBLConstants+Private.h in Headers */, - 2DF3B595B35C21809E216F8A5BD5C3EF /* MBLConstants.h in Headers */, - 7DA898928F935BEB02B4E73045D979D0 /* MBLConversion.h in Headers */, - 48D062702910356322EDE7530E217B8C /* MBLCorrectedFormat.h in Headers */, - E2EFD277F059A52D2429A7BE0703E7B4 /* MBLData+Private.h in Headers */, - 705E3D63B9FD8A0D1848C1142B6ACB40 /* MBLData.h in Headers */, - 8FB84C036392D49D3605BE777760DB3B /* MBLDataProcessor.h in Headers */, - 635B4E2C958C2AAA078DE0FD5A406BF2 /* MBLDataSample+Private.h in Headers */, - D6D47240A32C08E992C949E748597240 /* MBLDataSample.h in Headers */, - F73CBF13394D96A683C4136257983CD2 /* MBLDataSwitch.h in Headers */, - AA3696DD083037A9C971227B7D3030B9 /* MBLDependentData.h in Headers */, - ED35A44BB4D14C90D6F333FD3D2ADB9E /* MBLDeviceInfo.h in Headers */, - 5E1D2B966E5BC552324FE676AED5BBE6 /* MBLDeviceLookup.h in Headers */, - 355A78C4B57FD0C9843139098B47550F /* MBLDispatchQueue.h in Headers */, - 3B6B255369B60A9F7D90C461F93071F7 /* MBLDownloadOnlyEvent.h in Headers */, - 792D9332B64329C479C048ED880E4F6B /* MBLEntityEvent+Private.h in Headers */, - B679CA13314E81C0C4404CF57DC457EE /* MBLEntityEvent.h in Headers */, - C4E458E37674616FB76B5BEA48003E36 /* MBLEntityModule+Private.h in Headers */, - D2C71EEB90F1E6FEA1AE39B0BE58873E /* MBLEntityModule.h in Headers */, - 2B57FBC1AC201EDF8176AD9F7A9FED89 /* MBLEulerAngleData+Private.h in Headers */, - 7DCD36C42B3968054579C426C0495D90 /* MBLEulerAngleData.h in Headers */, - D86B4E924E8954B03BC4DB905982CDE3 /* MBLEulerFormat.h in Headers */, - 407370941E5F275EA0C55268E4F0824C /* MBLEvent+Private.h in Headers */, - 0C8B166F4D31CF3AC3BBBDBD54372EE5 /* MBLEvent.h in Headers */, - A66024B21ECB71B335C18B82EF791B67 /* MBLExternalThermistor.h in Headers */, - E9DB019EF403FBC733A510A2A258CFC4 /* MBLExternalThermistor0.h in Headers */, - 7D1E9B9561DF6E193C14700F192AC0A7 /* MBLExternalThermistor1.h in Headers */, - 60D854E867B80E9AFA441D795B0B8CA7 /* MBLFilter+Private.h in Headers */, - D11E3C980B51A252C2F7E291A6D4C0D8 /* MBLFilter.h in Headers */, - 565F2215E2745C6D03B01484DF65D395 /* MBLFirmwareBuild.h in Headers */, - D8F81FD58D522D674D683446FC018387 /* MBLFirmwareUpdateInfo.h in Headers */, - 65BEC9F9B5941683E2072582933300FC /* MBLFirmwareUpdateManager.h in Headers */, - 8F842B44C8BE2B69C7F96E99486B0AAC /* MBLFormat.h in Headers */, - BD5F0E0E99CF7B46CFC5EAB302CF4308 /* MBLGPIO+Private.h in Headers */, - A645AFE7726AFC73C1F01CDD01DA28B6 /* MBLGPIO.h in Headers */, - 0DE08D1C54AED150435FCBB60A688844 /* MBLGPIOData.h in Headers */, - 6351840A4032DBA7A630BEF36623A5E4 /* MBLGPIOPin+Private.h in Headers */, - A633872CE488CFC46066037BF460B6A9 /* MBLGPIOPin.h in Headers */, - 468CA4F1FC4D1F9694979DF814616432 /* MBLGPIOPinChangeEvent.h in Headers */, - DFFAF0B50530CD3EB1D0B5762D339D00 /* MBLGravityFormat.h in Headers */, - 13BA1CAF79098EC4601A5DF1E5436115 /* MBLGyro+Private.h in Headers */, - 21EEADA1E1F78C3246FAA830A0D9E14E /* MBLGyro.h in Headers */, - A70F621E7F5086E8F6C5E63B9436DE97 /* MBLGyroBMI160+Private.h in Headers */, - 775B95D539735CD35D3FA65588D4EE13 /* MBLGyroBMI160.h in Headers */, - DA5E989AEACE05763CC9DA993CF0E4CB /* MBLGyroBMI160AxisReadyEvent.h in Headers */, - 6F1177D618563F11B1B20C606BB63311 /* MBLGyroBMI160DataReadyEvent.h in Headers */, - AB7BDD1240673AAD34FA737258F72EAC /* MBLGyroBMI160Format.h in Headers */, - CAAB34A9ADE0C65CECC7B9D87EA3DF42 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */, - A5F52D3C3E926D54946739DA07BD5057 /* MBLGyroData+Private.h in Headers */, - 47330067F40C836E2A104B55A10130AB /* MBLGyroData.h in Headers */, - B3ECCC626D44A58A90DC313431A3044F /* MBLHapticBuzzer.h in Headers */, - 341322EAA2D644525D42DC02ECD5BFC5 /* MBLHygrometer+Private.h in Headers */, - 18E58CCF51C445F6D604A2F382431C01 /* MBLHygrometer.h in Headers */, - 1E7A069D2DAFADB5A5E6AC82E4BA6BAD /* MBLHygrometerBME280.h in Headers */, - DEFB06CF710B889A3DEAC937C1D32E7B /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */, - A40BE7D2FA30CA7EC6AF9714DDD4EC6A /* MBLI2C.h in Headers */, - DA27BC34D5B4264789FE4D2EA25E7FC3 /* MBLI2CData+Private.h in Headers */, - D32DFE1ACDC0BBE8201B274DBAE9D13C /* MBLI2CData.h in Headers */, - 855D6F1918815A96D2B36FD5D1867A51 /* MBLiBeacon.h in Headers */, - B4E999BE36CACD18DBC184C2AC956E9C /* MBLLED+Private.h in Headers */, - 50E3843DAF3DC8DA1F85FA2954E5F892 /* MBLLED.h in Headers */, - FE0D8F904234F0D30B9797951C4AF3BE /* MBLLogger.h in Headers */, - 22A287A2A3F970296063735E3347462C /* MBLLogging.h in Headers */, - E65175EE2CA343E70AE4DE432B310127 /* MBLLoggingV0.h in Headers */, - E217CAF6711C04A625E889554A1F739C /* MBLLoggingV1.h in Headers */, - FFD308BE81712FC29412B293EEDB7AE4 /* MBLLoggingV2.h in Headers */, - 16473FD01DD043105BD5D7874879D257 /* MBLMacAddressFormat.h in Headers */, - 789058669500F04AC6B89F5459986534 /* MBLMacro.h in Headers */, - 3CC1E3D22D39B6BE61BCC18FFD164B04 /* MBLMagnetometer+Private.h in Headers */, - 57CBDB0B040F65271A051B8ACBAD91DD /* MBLMagnetometer.h in Headers */, - 4E7B502118272090A8700CBB4B6DAD70 /* MBLMagnetometerBMM150+Private.h in Headers */, - C5CF2C475C28073866CD3FECD3652D51 /* MBLMagnetometerBMM150.h in Headers */, - 83D0A018235D0FEE9663C9D00CF2045E /* MBLMagnetometerBMM150Format.h in Headers */, - 6BF5E5BFC225D570D7F9A1B704583F20 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */, - B2B807AAC7BD8633B36977B143B14570 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */, - 140F4D2D29D35D72391950A6D1D7A737 /* MBLMagnetometerData+Private.h in Headers */, - C0CB03A8E63D989C9555184BB9170DE7 /* MBLMagnetometerData.h in Headers */, - 180856A896791171217AB77D63298CFA /* MBLMechanicalSwitch.h in Headers */, - 9E2088F339BF0292521E09A412631D8F /* MBLMetaWear+Private.h in Headers */, - DC75791906ACB698BC9DD4965D5D6D94 /* MBLMetaWear.h in Headers */, - 4E79C61CF30D954954EEFA22DF95196B /* MBLMetaWearManager+Private.h in Headers */, - 8C811296D477800F5825BC7EE8C568FB /* MBLMetaWearManager.h in Headers */, - 916920330A90BCE303B37635D889EEFA /* MBLMockPeripheralFactory.h in Headers */, - 4F3E5F13CF0C865BB45BF1133D526216 /* MBLMockUtils.h in Headers */, - 725A06B7948CDA459A35A0025453BF5C /* MBLModule+Private.h in Headers */, - AA163131DD70309267963C798151D14D /* MBLModule.h in Headers */, - 2E06591277088423EB01CD803F82820A /* MBLModuleInfo.h in Headers */, - 7589B0630274A553474CE93D9171F070 /* MBLModuleMock.h in Headers */, - 2A3BB6DA5B49890C98A2DA84B2A70DEF /* MBLMovingAverage.h in Headers */, - EA9F27BCAA5CEA3AE557238A355905C8 /* MBLNeopixel+Private.h in Headers */, - 03FB72FD278F0443CA598807A950490F /* MBLNeopixel.h in Headers */, - 35204A3B536478C24996F573A51DA433 /* MBLNeopixelStrand+Private.h in Headers */, - 4187227654E36F23C878DF2DE8944025 /* MBLNeopixelStrand.h in Headers */, - E12F867FF7121C2CF5F9CF782B69753E /* MBLNonVolatileState.h in Headers */, - C95A05164E641476BD7A5C9C3FE6AD4F /* MBLNumericData+Private.h in Headers */, - 77C8AB0CD5566740C588D2860EF2CB4B /* MBLNumericData.h in Headers */, - 83CD02C2CAD636DAA655F44A282BEE43 /* MBLNumericFormatter.h in Headers */, - BBA74D8B35A606A36CD8D7431AB0A471 /* MBLOnDieTemperature0.h in Headers */, - 1C6AC360C5131A3687663A2714951DAC /* MBLOrientationData+Private.h in Headers */, - 856482C9BBD5D4C169B7B9B29B42C5B7 /* MBLOrientationData.h in Headers */, - 6B1501665375205609A6289E9F60E35F /* MBLPhotometer+Private.h in Headers */, - 090092A74DB2DA7A151900ED205E6528 /* MBLPhotometer.h in Headers */, - 614F7708585FFF0832C688D811D0D7CE /* MBLPhotometerTCS3472.h in Headers */, - D172174C54DED3B2FE534968A05A716D /* MBLPhotometerTCS3472Format.h in Headers */, - 2737331D77F5C90731409E9B1C13B642 /* MBLProximity+Private.h in Headers */, - 180E45BA7619CD4CD0E7C633732F735A /* MBLProximity.h in Headers */, - A7FB412B5590A5FFC4A7B8A18318AA91 /* MBLProximityTSL2671.h in Headers */, - 605F108436F036023D1EC7DC7B27E4D4 /* MBLQuaternionData+Private.h in Headers */, - E448F613BB13DFA7BC7E450231B18D1B /* MBLQuaternionData.h in Headers */, - B7DB9F7CA2C6E57EF2F632902C367399 /* MBLQuaternionFormat.h in Headers */, - 8993748639DE4BA3EE4AC1E5B316BC54 /* MBLRegister+Private.h in Headers */, - B966D4A042ABFE575CFBF05F515CDD5B /* MBLRegister.h in Headers */, - 331B6E2C1515CAD5BE00565964D67707 /* MBLRGBData+Private.h in Headers */, - E62313D0CCCBB5A59F7B0C5D3FF56320 /* MBLRGBData.h in Headers */, - 5C2D140343DD5C5FEE6243E1EE90D45A /* MBLRMSAccelerometerData+Private.h in Headers */, - ACF044BA91508C4B5CF44386ADC64E69 /* MBLRMSAccelerometerData.h in Headers */, - 4923DBB74F89A94B61430B84E71A0F9C /* MBLSensorFusion+Private.h in Headers */, - 950B0F7AB7B682A48E494D0B7C99CCB8 /* MBLSensorFusion.h in Headers */, - 2A1E0D3315E492726B6EEA09BDAE7AFF /* MBLSerial+Private.h in Headers */, - 3295CB5DD5B9647B9DFBD6825A8E2762 /* MBLSerial.h in Headers */, - B2274212B720E07A85819897FF5F6FA8 /* MBLSettings+Private.h in Headers */, - 57DBB042C0B120C5D38CEA3B27E2EA22 /* MBLSettings.h in Headers */, - F5A50FF31DCF3B895836F12AA6C8E8B7 /* MBLSPIData+Private.h in Headers */, - 88B6D35BAA115CC5B306AEF70EE07A1F /* MBLSPIData.h in Headers */, - 35648EE4738EC31BDC8233C38A070A4D /* MBLStringData+Private.h in Headers */, - 44BD2FF1764D9ACBE6042F81C910CED9 /* MBLStringData.h in Headers */, - 41B24972028EAFCD6E48DCE04255D2FF /* MBLTemperature+Private.h in Headers */, - 512FAF2AC6358B6B02DBD6244DD44D95 /* MBLTemperature.h in Headers */, - 644617EA2D72961B6BA2CB516F79392B /* MBLTemperatureV0.h in Headers */, - C899530C4536F05364FCB4FA69698210 /* MBLTemperatureV1.h in Headers */, - 4841A2394939D84CB51B85707A792E07 /* MBLTestDebug.h in Headers */, - 9C9A9F369CB3E895FFE279A8E8F4BAFC /* MBLTimer+Private.h in Headers */, - 7F1FC9D7D2D975BF065B342F86C898B4 /* MBLTimer.h in Headers */, - 2B2BAA31F98A784F40610CF9F680FDCB /* MBLTimerEvent+Private.h in Headers */, - BAC90C0D4A34C2CBA4E88FAEAEEF3DB4 /* MBLTimerEvent.h in Headers */, - 5802006569428525920CA8DD80677C83 /* MBLTriggeredRead.h in Headers */, - C4225905DCA4AF8625D2F4E294153787 /* MetaWear.h in Headers */, - D831CC35AFBE53A00D9B854DAC3ADDBB /* MetaWearPrivate-macOS-umbrella.h in Headers */, - 3909DAE84EF5D73D9055A6440F8AB37A /* mma8452q.h in Headers */, + BD01EF03FFB24FA5A2BB03C88F984334 /* Pods-MetaWearIntegrationTests-macOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - D42D9E983AD9972A97D00B0F2A05FEE7 /* Headers */ = { + FBB50E3F98D5C85BA2B9C79862ED1617 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 7A809A16DF1DB98AFE32A634CDBDB488 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-umbrella.h in Headers */, + A9511664CA2E8B6DDDD96739FACABA7E /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; - D61DA1B92893F982FE24E15F65581810 /* Headers */ = { + FD3ADC7CC302D913A0C64D7AFDF62FF5 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 619AC5402628D47BA4B4EE810F9F4E1E /* BFCancellationToken.h in Headers */, - 8CF8DB57BD3856F63787DEDF89EF0066 /* BFCancellationTokenRegistration.h in Headers */, - E0A7A5E679D00FCF8525D9C4808FC6D4 /* BFCancellationTokenSource.h in Headers */, - 7A0CA6A2D0AABC44E317269069D0E6A4 /* BFExecutor.h in Headers */, - 61FBDA686B2674236F00C55054CD322B /* BFTask+Exceptions.h in Headers */, - 2D786E9E294F18EBFB7E926CA452A32A /* BFTask.h in Headers */, - 3E5B6B44EF068328A1C9C89D304A143F /* BFTaskCompletionSource.h in Headers */, - 9A611C9B87F72E8FE4279ECB999E5DC7 /* Bolts-tvOS-umbrella.h in Headers */, - 32BE2B3071281E702784EC6F4DBACDFB /* Bolts.h in Headers */, + F1281E0D46B9A64F8074D707C78B9FEE /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - 03660E68EEA1F612CF60FF2886F922A9 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS */ = { + 127E6F0C1212BA87A0F3EDBA8EEF0803 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 8851B39D3FDAEB8C7A7D176C91EE797E /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS" */; + buildConfigurationList = 9C641F7A558089295E023DBC26F033A8 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS" */; buildPhases = ( - A5669D704473E08FFBF028ADD15CA8D6 /* Sources */, - 5CAE3222942BEB15EC4174B1DEA32A27 /* Frameworks */, - C8074943E39013830D2926A37700EE33 /* Headers */, + 403FE04840779246F46DBA0BB1171D02 /* Sources */, + 05C37991236503D53F51AD92CB36B8FA /* Frameworks */, + FBB50E3F98D5C85BA2B9C79862ED1617 /* Headers */, ); buildRules = ( ); dependencies = ( - D69DB36828D23B09F0B0BDD6500CDEC6 /* PBXTargetDependency */, - D50C31AA67479FAA3B5999A82282B29F /* PBXTargetDependency */, - 47D90ABF36FA76D3B6F27A933A01B50F /* PBXTargetDependency */, + 88EDC18B67EEB21EDF48B05F11E0871F /* PBXTargetDependency */, + A7B27C3AAD5052C626D095A8C3204867 /* PBXTargetDependency */, ); name = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS"; productName = "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS"; - productReference = 14BC0282228EC0A6343EE944975AD62B /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework */; + productReference = 2B048C14EC9DD111890D9059BB3BA90A /* Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS.framework */; productType = "com.apple.product-type.framework"; }; - 03E1833CBC3FB4E51DC16432152D7EE1 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS */ = { + 1954B756700A6E98A605A19FA4C0803E /* Pods-MetaWearIntegrationTests-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 427E8B32BB67876357C2FEBFEF955F38 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS" */; + buildConfigurationList = C639184846A9E6F594B835BCD9A3CF93 /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-macOS" */; buildPhases = ( - 61FB512B757FAE71EA251E860B18C8E8 /* Sources */, - BC580FE2F2CED265196A724ADE90EE71 /* Frameworks */, - 93824468A668C896D160BA4F588E44A5 /* Headers */, + 9C63BE95031C70BB044F976E29B373C6 /* Sources */, + 48E1E59518774D26EF1E422941FDA163 /* Frameworks */, + F6B04786383EE1BFB56B5A9F7770FE07 /* Headers */, ); buildRules = ( ); dependencies = ( - FC078648D2607E265E01298B5028429F /* PBXTargetDependency */, - 082614C16D1626C70031445962D599C5 /* PBXTargetDependency */, - B19664E6B8CCE6B0A609115FECE94390 /* PBXTargetDependency */, + E5524CE7CA7286A87F2169010E8B86D9 /* PBXTargetDependency */, + FA9FDE169E0FD0F9261BA05C26BAE2D6 /* PBXTargetDependency */, + FA5C9463360660FC055D003BEBE4B605 /* PBXTargetDependency */, ); - name = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS"; - productName = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS"; - productReference = 979ACF1F1DE594A63C4BE9F280278332 /* Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework */; + name = "Pods-MetaWearIntegrationTests-macOS"; + productName = "Pods-MetaWearIntegrationTests-macOS"; + productReference = BE9ACE81A3CCB7F551207CADFBF0A385 /* Pods_MetaWearIntegrationTests_macOS.framework */; productType = "com.apple.product-type.framework"; }; - 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */ = { + 1CF10E2AEEEB932120CC7181BD88C40C /* MetaWear-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 21252E6CE3D099A3BE867C48DE81CB0E /* Build configuration list for PBXNativeTarget "Bolts-tvOS" */; + buildConfigurationList = 8571E09CFAF4D6DA510E6A8182A011D3 /* Build configuration list for PBXNativeTarget "MetaWear-tvOS" */; buildPhases = ( - 6DD82737306C9AF8FB58651E9367AF01 /* Sources */, - 80D69EF943238FEBF67C35FF9B6A0488 /* Frameworks */, - D61DA1B92893F982FE24E15F65581810 /* Headers */, + DAC83625FA29211F26E3FE3A0F501B38 /* Sources */, + C7BE0E71DBADCCD437507EBF6AAFDEAF /* Frameworks */, + 8997E30B529BA515321A37C21B29147E /* Headers */, ); buildRules = ( ); dependencies = ( + 6B1910B8621AF2E511BC2D958A653172 /* PBXTargetDependency */, ); - name = "Bolts-tvOS"; - productName = "Bolts-tvOS"; - productReference = 41D5ED663F4CC795D404B72B58F64EA5 /* Bolts.framework */; + name = "MetaWear-tvOS"; + productName = "MetaWear-tvOS"; + productReference = 8E84CFA4C7336D7F5632BACC5471B88C /* MetaWear.framework */; productType = "com.apple.product-type.framework"; }; - 28835C651012C7B6AE21E36DC39BE97A /* MetaWearPrivate-iOS */ = { + 35939192463050DFECFB86564016D871 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = D1F4E3E3C0A78CF1DCF1FDDA908A3C9C /* Build configuration list for PBXNativeTarget "MetaWearPrivate-iOS" */; + buildConfigurationList = 071A10B196E9783245454CBC28C105D8 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS" */; buildPhases = ( - 508E07963D155F0AD9DC05BE25E2C488 /* Sources */, - CD8180521DDBBE54BE4FEE8AD8502EC2 /* Frameworks */, - BA05DF473A4F9915DA637FA0336BA8E1 /* Headers */, + E6FE6D03C51B176D4A140C7512B6DA4F /* Sources */, + C631E9DF4E48CAC605A01D97C887FF89 /* Frameworks */, + 835E096A3DD39B1E8856DBB00A72836D /* Headers */, ); buildRules = ( ); dependencies = ( - 0D6BF654FC12FB2DA039E47BADD95613 /* PBXTargetDependency */, - 280D3AB9B1CBD5F26A25D0C9561D84D7 /* PBXTargetDependency */, + C345F426E075136A2D82BA866B3BDFBD /* PBXTargetDependency */, + 1FB0394C7F3E00D5DB3D0CCC6AFA953B /* PBXTargetDependency */, ); - name = "MetaWearPrivate-iOS"; - productName = "MetaWearPrivate-iOS"; - productReference = 545729650DD67BFD00F674FA37C4E01D /* MetaWear.framework */; + name = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; + productName = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; + productReference = F89C2F45B49937B8DC54B83AD180192B /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework */; productType = "com.apple.product-type.framework"; }; - 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */ = { + 43AE0570AE9E038422E2E5E9A9BB0140 /* Bolts-Swift-watchOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 409DF430E10DE59723D94565356B7AA8 /* Build configuration list for PBXNativeTarget "FastCoding-macOS" */; + buildConfigurationList = A76123B13374DEB714801D51707DFF8A /* Build configuration list for PBXNativeTarget "Bolts-Swift-watchOS" */; buildPhases = ( - DA979A71CEF2468548B91196081D39D3 /* Sources */, - D4FCB708E30657BCF8E37542457C1C2F /* Frameworks */, - C2D43615CEB0FBE03506176F41A6F738 /* Headers */, + 513C61AE7BD63234ECD020892060C0C8 /* Sources */, + 7EFB227DEAC78F9755FE9219450F6DF7 /* Frameworks */, + 21124986938EB0066CAF54D186DFCD05 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "FastCoding-macOS"; - productName = "FastCoding-macOS"; - productReference = 368BE4F935537F2AA28A6491716600AC /* FastCoding.framework */; + name = "Bolts-Swift-watchOS"; + productName = "Bolts-Swift-watchOS"; + productReference = 357FF1C44E9F5B6930D58E1D1E050A40 /* BoltsSwift.framework */; productType = "com.apple.product-type.framework"; }; 581D3B58E73E74943B0B279158A37B4B /* Zip-macOS */ = { @@ -4826,138 +2710,134 @@ ); name = "Zip-macOS"; productName = "Zip-macOS"; - productReference = 42DA220155FF2E4B0B617736A5456C6A /* Zip.framework */; + productReference = E47D66AC6E7A74134E35FC8A1F1B9DE6 /* Zip.framework */; productType = "com.apple.product-type.framework"; }; - 5CC97C3DED504DBA2929BB435CA11B7E /* Pods-MetaWearIntegrationTests-tvOS */ = { + 5F520F8014E9C3527B013AAFB1F4F631 /* Pods-MetaWearIntegrationTests-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = A09C3B4F80C8FB5757D543CE4106ADCD /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-tvOS" */; + buildConfigurationList = 7A99F8984F0AF2939FF62BFC08A6045A /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-tvOS" */; buildPhases = ( - 21DF670082A0598E719A5EDBDCE1EF38 /* Sources */, - C332911743205E03FB2826D085544317 /* Frameworks */, - 85BA7B4A57CC8AAA472C6741888F418E /* Headers */, + BB6535EA843F3E49FCD818136BA2F7AD /* Sources */, + CDA56ED5B820E84588480A781C57B0EE /* Frameworks */, + 96AC85F533A4686C54D2F0094D8EBB9D /* Headers */, ); buildRules = ( ); dependencies = ( + 3E326EF0A8496D3B103892FA5D1BA5EC /* PBXTargetDependency */, ); name = "Pods-MetaWearIntegrationTests-tvOS"; productName = "Pods-MetaWearIntegrationTests-tvOS"; - productReference = 7FD50DBF3CD96B69C1F61541B057E571 /* Pods_MetaWearIntegrationTests_tvOS.framework */; + productReference = E6054C312848AABFA25BA3E2FED7C30C /* Pods_MetaWearIntegrationTests_tvOS.framework */; productType = "com.apple.product-type.framework"; }; - 6BB20AE7422131218CBA3CA8AD803CAF /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS */ = { + 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = D1193726905C957D99D8331B471F0480 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS" */; + buildConfigurationList = C15248F9A568EEF86060A82785EBEB09 /* Build configuration list for PBXNativeTarget "Bolts-Swift-iOS" */; buildPhases = ( - F6C43E73930CFCB810611E1647974D12 /* Sources */, - E3445EDCA7149EAA731D4ED963C5C657 /* Frameworks */, - 9938B2377238F69F7AD7FE60D3821BE4 /* Headers */, + E244A48ACFC423444B26D2E57E4B4326 /* Sources */, + 5E6AB88245DF515BF76A21E7F07A551C /* Frameworks */, + F417407C0B6EA3CDF6393834844740BE /* Headers */, ); buildRules = ( ); dependencies = ( - 95138348E99E97A167B45C76BE33020D /* PBXTargetDependency */, - 4DEC3F7F15D00FF9C5EF2783A2FB3601 /* PBXTargetDependency */, - A4A6A08D4608F768C1F6545F38C498BD /* PBXTargetDependency */, ); - name = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS"; - productName = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS"; - productReference = BBD9064F331E787EA528361CC49E519D /* Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework */; + name = "Bolts-Swift-iOS"; + productName = "Bolts-Swift-iOS"; + productReference = 82E5A7D22933C28ED44425993F6C7759 /* BoltsSwift.framework */; productType = "com.apple.product-type.framework"; }; - 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */ = { + 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = D75ADFF3CA2C855E2C240F7340ADB3FF /* Build configuration list for PBXNativeTarget "FastCoding-tvOS" */; + buildConfigurationList = E4A6F070BCD73543FD7F22BD026494C8 /* Build configuration list for PBXNativeTarget "Bolts-Swift-tvOS" */; buildPhases = ( - AC6E6FD4BBA54120F9B283E112CC4EBB /* Sources */, - FA02C51B412143161CAD4336E9E6AF43 /* Frameworks */, - 1318B4E9F403951124EC17FEE7972598 /* Headers */, + 730F33B4A4949B0B90944F7DB99AC28D /* Sources */, + 52D8007792955226E299963CE6E7B2B0 /* Frameworks */, + A0F34AB220B3CD87EDD9F987E0DC9DA3 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "FastCoding-tvOS"; - productName = "FastCoding-tvOS"; - productReference = 3EBD12B1D17709CA096B00BBEE24EC68 /* FastCoding.framework */; + name = "Bolts-Swift-tvOS"; + productName = "Bolts-Swift-tvOS"; + productReference = 40F2D386A2D49038493E715A68DAD06B /* BoltsSwift.framework */; productType = "com.apple.product-type.framework"; }; - 7F11D2B61F59B69A48D62B8557B5D829 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */ = { + 9389CEE263723AA7A1038CEC838D4720 /* iOSDFULibrary-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 5FCDD95567D866067ED4FA76F99BA54B /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS" */; + buildConfigurationList = BFCF6718D822EF3B49C9D16E304BB183 /* Build configuration list for PBXNativeTarget "iOSDFULibrary-macOS" */; buildPhases = ( - 51D775D0B5C36B93A3571777B701D2D6 /* Sources */, - D0B0520422EAD308ED39299390887B57 /* Frameworks */, - C193AC2FDEFB04EB35931FBF21B945C3 /* Headers */, + AC884E8263EB764DAF141B18765663DC /* Sources */, + 7C1B90F7111F98A3C30F3CF7EB3F4906 /* Frameworks */, + C4DED32C8AE39E7BE4C745176F4C9AF6 /* Headers */, ); buildRules = ( ); dependencies = ( - F4070B9B276286415D6C79E495803C8F /* PBXTargetDependency */, - 5958DEB8144CECCE3C1338C06EBF662F /* PBXTargetDependency */, - D01B8013EF4475431215D03E218BE776 /* PBXTargetDependency */, + F3176AEFB2095A5F79A0022F0BA42CA0 /* PBXTargetDependency */, ); - name = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; - productName = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; - productReference = 2E3635D758185F82159A834048FBF880 /* Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS.framework */; + name = "iOSDFULibrary-macOS"; + productName = "iOSDFULibrary-macOS"; + productReference = F6C6E70A6B9FF1527732B007AD398BC5 /* iOSDFULibrary.framework */; productType = "com.apple.product-type.framework"; }; - 9389CEE263723AA7A1038CEC838D4720 /* iOSDFULibrary-macOS */ = { + 981F84FF1FEA3B797063EEDC1FF0456A /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = BFCF6718D822EF3B49C9D16E304BB183 /* Build configuration list for PBXNativeTarget "iOSDFULibrary-macOS" */; + buildConfigurationList = 1C97800C9B2F46D708BB7632FF922019 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS" */; buildPhases = ( - AC884E8263EB764DAF141B18765663DC /* Sources */, - 7C1B90F7111F98A3C30F3CF7EB3F4906 /* Frameworks */, - C4DED32C8AE39E7BE4C745176F4C9AF6 /* Headers */, + 5B55669B6C8F74A4BB9AA919FA6AE644 /* Sources */, + 07D3EB2B2272CB051ED77901EC2E434C /* Frameworks */, + FD3ADC7CC302D913A0C64D7AFDF62FF5 /* Headers */, ); buildRules = ( ); dependencies = ( - F3176AEFB2095A5F79A0022F0BA42CA0 /* PBXTargetDependency */, + 9221CED58005C987C92889C4FFB2F65D /* PBXTargetDependency */, + 14C8FCE8A34E3579CC2A6354A14C730A /* PBXTargetDependency */, ); - name = "iOSDFULibrary-macOS"; - productName = "iOSDFULibrary-macOS"; - productReference = F013CA0DDB1E61B01BB7F12437CE8D85 /* iOSDFULibrary.framework */; + name = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS"; + productName = "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS"; + productReference = AEA293E22CF366C65AE4B10D380CE65A /* Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS.framework */; productType = "com.apple.product-type.framework"; }; - 9913C873BD8A170381970D996D45827A /* MetaWearPrivate-tvOS */ = { + 99F8434DD029A5E4FFAB053EF2AD13C6 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension */ = { isa = PBXNativeTarget; - buildConfigurationList = 977B070BE951745F89FD4BFF8AD984F7 /* Build configuration list for PBXNativeTarget "MetaWearPrivate-tvOS" */; + buildConfigurationList = 051034339FF10B32F97909F260E192BE /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension" */; buildPhases = ( - 48ADF53079F346C5ECCA062207A6FB30 /* Sources */, - 4BB0C6B5A8B29E928103AD8F3E26CBD1 /* Frameworks */, - 1FB3E9522A124B05C98B01DEB1342BE7 /* Headers */, + 05F249A0F3C45F3EF705FFA7D46F656F /* Sources */, + 3FCEC326012E3419AE2474FB7296D9A7 /* Frameworks */, + CC676FACBC7633A4F799950DBE4EC615 /* Headers */, ); buildRules = ( ); dependencies = ( - 7825DC439165683D84A184A5AC3FF02E /* PBXTargetDependency */, - CD3958FF8B2AC93358211B4C7B955ABD /* PBXTargetDependency */, + FFB41562821C6674D5DE1765CFC9D624 /* PBXTargetDependency */, + 9182A5D3785187D0202BF5067804865F /* PBXTargetDependency */, ); - name = "MetaWearPrivate-tvOS"; - productName = "MetaWearPrivate-tvOS"; - productReference = FEC56A03F55AA17876748C41D7F7F9F3 /* MetaWear.framework */; + name = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension"; + productName = "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension"; + productReference = 032B1D15D6DF81DC51B736071A0245DE /* Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension.framework */; productType = "com.apple.product-type.framework"; }; - A55E3783D8D4EDD871AA65857BF9C339 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */ = { + 9DBFFED0D32FB704EBBE05B279730169 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = EAC4CC993034F896B9B84262454F21DB /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS" */; + buildConfigurationList = 6D25BE908A11A8DFF086E4DC69A4C498 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS" */; buildPhases = ( - E3C6DA299066A729C0B6410D98C33AFC /* Sources */, - F4123120D9BEEFC7DD9BAF5A002B9F30 /* Frameworks */, - ABB55548A1AEC7B02BD4417F930F3077 /* Headers */, + 9C99E400A25B24C06693775A864532BE /* Sources */, + E3F8C8E331D5A934A10A756385865B70 /* Frameworks */, + 5D5154CAB3F61B6E3B0F9583BE352406 /* Headers */, ); buildRules = ( ); dependencies = ( - 2E21A543CE7221A38EC06D1FE6A5E4D7 /* PBXTargetDependency */, - 41995563A0F99758772002637709AE9E /* PBXTargetDependency */, - 47B3AE863117C7637968594440B9FAF0 /* PBXTargetDependency */, + AB2617EC3C05774B94AF2337E5B2BE16 /* PBXTargetDependency */, + 3E6A5A31D92D268199A6B6F69D30A915 /* PBXTargetDependency */, ); - name = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; - productName = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; - productReference = 9F174995E7374F2FE0CD5EABCA84CBC2 /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework */; + name = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; + productName = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; + productReference = 59FD274485858C170022143FF7ECFF2E /* Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework */; productType = "com.apple.product-type.framework"; }; AA3C39426CBD48108BC3ABCF231AC2DE /* iOSDFULibrary-iOS */ = { @@ -4975,116 +2855,118 @@ ); name = "iOSDFULibrary-iOS"; productName = "iOSDFULibrary-iOS"; - productReference = F3F34062091C9404748734E16CBEE8CF /* iOSDFULibrary.framework */; + productReference = FBD75C377E5C19538DFEEDE18F70C848 /* iOSDFULibrary.framework */; productType = "com.apple.product-type.framework"; }; - ADCD0745A509211F9E45242AEFA6203F /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */ = { + AD70FE1E93D40666D1ECF65358AE5515 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = BE63B01EC2E9EDE2D6F2E2ED0A2B78D4 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS" */; + buildConfigurationList = 328B030FE1165BD98FDF24AA99CE5098 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS" */; buildPhases = ( - 1FFB740586136D3F4EA7060482C01F80 /* Sources */, - 352A7ECCD028822F9667AE0A54491243 /* Frameworks */, - D42D9E983AD9972A97D00B0F2A05FEE7 /* Headers */, + 52D58615436D196D839C4474AE40DE9D /* Sources */, + 9D7FCA1716CA4AD350CA3ECD5D51B895 /* Frameworks */, + 27A8208C00B024431B9E22BE8016D643 /* Headers */, ); buildRules = ( ); dependencies = ( - 6006985220B1C890774F5A71982B1B1E /* PBXTargetDependency */, - 0DF0D8219C1F7F2C149F8CE309EA015B /* PBXTargetDependency */, - 381CCA2DA42947BD9177AF69FDC162E5 /* PBXTargetDependency */, + 751287751C2F7BBDFAF625DDEB6E628B /* PBXTargetDependency */, + E1785ABE531BA624AF32887EEA0E5D20 /* PBXTargetDependency */, ); - name = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; - productName = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; - productReference = E7D602B321217BDA6117F5D3E8535B0F /* Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS.framework */; + name = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; + productName = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; + productReference = 40F3A73B21BF78DA32D32BEB8D16465F /* Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS.framework */; productType = "com.apple.product-type.framework"; }; - B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */ = { + B55FE8372561748E1CA13FE28B577186 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 1D0004B7C8634CA30AE87A84B60F0E6B /* Build configuration list for PBXNativeTarget "Bolts-macOS" */; + buildConfigurationList = F70BA197CE481A4ACFBCDC223D2FB2EC /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS" */; buildPhases = ( - 5584C05C82F95701ADF6E947DB5DFCB9 /* Sources */, - 3114F932C15CCEE243E3B7B0D909C109 /* Frameworks */, - 0848440AEE145491D062FA1D98F3ABF9 /* Headers */, + A23FF08F9757A0E4D1E1F5BD45B0111B /* Sources */, + 77A07D823BA8FEA988078A6A08112155 /* Frameworks */, + 32A8AD3C8F269B1AA71BD8D47CA15CC9 /* Headers */, ); buildRules = ( ); dependencies = ( + 39A18E45FEEE422E3FA583E189EEAC7A /* PBXTargetDependency */, + 8EDE7CA1BC5276C209E050170504BA93 /* PBXTargetDependency */, ); - name = "Bolts-macOS"; - productName = "Bolts-macOS"; - productReference = 93C0E0581DAD528234FCEE879C73103C /* Bolts.framework */; + name = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS"; + productName = "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS"; + productReference = 80FDFC1FEED0B4BB45D59B833E3CC0AA /* Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS.framework */; productType = "com.apple.product-type.framework"; }; - BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */ = { + D17D869CD175A025630F4E3D5BD9CB32 /* MetaWear-watchOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 295ECAA9B3954089BEFDC23B1D2C2730 /* Build configuration list for PBXNativeTarget "Bolts-iOS" */; + buildConfigurationList = 70767C4BFAC315DA2508DCCB9C16C286 /* Build configuration list for PBXNativeTarget "MetaWear-watchOS" */; buildPhases = ( - 7D378469AAF08AC6A2C71003EBABC48F /* Sources */, - 5A0702E4EAE9DE569AF175068C4A2AEC /* Frameworks */, - 712CB9A4E0F17BD01F9E04F8A6098DA6 /* Headers */, + C106F95810BDFB10E527FF93EF8B45C4 /* Sources */, + 6B51B39146B221A6A16BE7279489872F /* Frameworks */, + 9568DF4E945778BEA418C08B381284E3 /* Headers */, ); buildRules = ( ); dependencies = ( + 803A8ED2E3AF0B9B1727EF4B9EF0E4D2 /* PBXTargetDependency */, ); - name = "Bolts-iOS"; - productName = "Bolts-iOS"; - productReference = B07D1B0B6DF8A01D116A3576CB0F9480 /* Bolts.framework */; + name = "MetaWear-watchOS"; + productName = "MetaWear-watchOS"; + productReference = 34BF8063CA380F75084E3AB2C4ECA216 /* MetaWear.framework */; productType = "com.apple.product-type.framework"; }; - BE34009462B10997A222DD38A2E3512C /* Pods-MetaWearIntegrationTests-macOS */ = { + E1A2C54E075045370CF68755E67F5C6F /* MetaWear-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = B1E2792ED12E5DC3D7604184C0D72737 /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-macOS" */; + buildConfigurationList = 965F1DF3D567AD276B40466A5FE67385 /* Build configuration list for PBXNativeTarget "MetaWear-macOS" */; buildPhases = ( - 52D996272BF164730CD33E1C238FB292 /* Sources */, - 90E333167C4738579C50C2D317CCBC7A /* Frameworks */, - A0918F23AE14AC874F32DEEE0B2FC924 /* Headers */, + 9158D9083E5F1A8D9240C08DC2496628 /* Sources */, + C107DC355B3A2C4AE7A9EA0E49987443 /* Frameworks */, + 6F802F724AC8C8F22B2B26A6649CBC97 /* Headers */, ); buildRules = ( ); dependencies = ( - B4B01B63CE5D01122301B2B07CA32359 /* PBXTargetDependency */, - FF6CE430298C3594D38F5A8F42AAB514 /* PBXTargetDependency */, + BCF770EC99CC441D0488D50C6DFCB766 /* PBXTargetDependency */, ); - name = "Pods-MetaWearIntegrationTests-macOS"; - productName = "Pods-MetaWearIntegrationTests-macOS"; - productReference = 999087A8E82DEB1645CA98E755D515BA /* Pods_MetaWearIntegrationTests_macOS.framework */; + name = "MetaWear-macOS"; + productName = "MetaWear-macOS"; + productReference = FB458CC12F6A69BA25944B9070C0E135 /* MetaWear.framework */; productType = "com.apple.product-type.framework"; }; - E4C8A5130851E57DDABD17C30B3C75EF /* MetaWearPrivate-macOS */ = { + EA62020A060B4E106686018B6FC4CE79 /* Pods-MetaWearIntegrationTests-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = E101A7BC9BEC1599D17C52C72C1BE387 /* Build configuration list for PBXNativeTarget "MetaWearPrivate-macOS" */; + buildConfigurationList = 46923D72229C62A82BADAD675DD9D0AC /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-iOS" */; buildPhases = ( - 757E348460F79792520A894EAB610071 /* Sources */, - 4D43792182B061DFD1AADB367E41972D /* Frameworks */, - D2248524CD289B8C384358EFD6E3C66B /* Headers */, + E953C624138966117535F939BFD65DA4 /* Sources */, + E3E8DB4DA5964BC6649EDE2A77149661 /* Frameworks */, + EDA2E1B5A189DAF5240E67827359901C /* Headers */, ); buildRules = ( ); dependencies = ( - A0CD2DE5137306D167F4355594F047A1 /* PBXTargetDependency */, - 28EBD82FFE9A73BC2458E6EB26287621 /* PBXTargetDependency */, + 0B689CCAAE0CDFC76F8DD16C97893D16 /* PBXTargetDependency */, + 05E4B4BE29AADD9C3F9466871F5B6B2F /* PBXTargetDependency */, + B4F74C9D04B2980A8863C2582F9EFBEE /* PBXTargetDependency */, ); - name = "MetaWearPrivate-macOS"; - productName = "MetaWearPrivate-macOS"; - productReference = EF440399F90D6B4DB44A6BA3387CC979 /* MetaWear.framework */; + name = "Pods-MetaWearIntegrationTests-iOS"; + productName = "Pods-MetaWearIntegrationTests-iOS"; + productReference = D4A3068CC272233F9977BD20929C4132 /* Pods_MetaWearIntegrationTests_iOS.framework */; productType = "com.apple.product-type.framework"; }; - E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */ = { + ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = C1BAFA6DF62F72E7F34D56E69C8D6CC6 /* Build configuration list for PBXNativeTarget "FastCoding-iOS" */; + buildConfigurationList = 1E0D707402CA1F63E60BDEC50D3F5F4C /* Build configuration list for PBXNativeTarget "Bolts-Swift-macOS" */; buildPhases = ( - FB9D8559345AF64666D887C62EC8A6C2 /* Sources */, - B658E63502323819E88FF6D622A873AF /* Frameworks */, - A9478911E511B433B6592F07786789C1 /* Headers */, + B31CC50D099135A887F320844A2E875D /* Sources */, + 7E400A6572B56DC43FB793B930A064E3 /* Frameworks */, + 158AC36B1ACA55F00A3C0F319B775655 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "FastCoding-iOS"; - productName = "FastCoding-iOS"; - productReference = 431F42332985E3D0A750FEA34C12B6FA /* FastCoding.framework */; + name = "Bolts-Swift-macOS"; + productName = "Bolts-Swift-macOS"; + productReference = 15DE2F540E6733F7B58EE8E4CEFBF517 /* BoltsSwift.framework */; productType = "com.apple.product-type.framework"; }; F57306538B475B533545EE22C423E8EB /* Zip-iOS */ = { @@ -5101,26 +2983,25 @@ ); name = "Zip-iOS"; productName = "Zip-iOS"; - productReference = E973F3314FC759A38CF4BA61101BB3BF /* Zip.framework */; + productReference = 3E8B45EBF83DFC62B51A9876BEC25FCA /* Zip.framework */; productType = "com.apple.product-type.framework"; }; - FE50749721A80F20A52069F9ADF700B1 /* Pods-MetaWearIntegrationTests-iOS */ = { + FBCDB923BFEC9B087B78F572C6D26ABF /* MetaWear-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 60CB6BA1F7B001BEAC398F7DD550F6EB /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-iOS" */; + buildConfigurationList = 7B28A40CD46B75284864D77B8591DDD8 /* Build configuration list for PBXNativeTarget "MetaWear-iOS" */; buildPhases = ( - 7327C8104A87A2FDEFD38E462D38AB84 /* Sources */, - D8131048A970F431E57EED3DBECB68F3 /* Frameworks */, - C85D14396D5C847D3D39B7D23BE96E38 /* Headers */, + AAAEFCF73D728077F6A88866345CC7C6 /* Sources */, + 7D118543057A5154EB9012CBCAFF8236 /* Frameworks */, + EE5AA391C20B727D4ED945CE924D7EB3 /* Headers */, ); buildRules = ( ); dependencies = ( - 068E7B1E100C2A95848CA2670B6F03CC /* PBXTargetDependency */, - 48D97E753E2C40350618FDB70C4DD14E /* PBXTargetDependency */, + EBE57F65497DC291F159BFC758190F7F /* PBXTargetDependency */, ); - name = "Pods-MetaWearIntegrationTests-iOS"; - productName = "Pods-MetaWearIntegrationTests-iOS"; - productReference = 068CFBFA9C639C548E300DBA82652694 /* Pods_MetaWearIntegrationTests_iOS.framework */; + name = "MetaWear-iOS"; + productName = "MetaWear-iOS"; + productReference = 7E1FE541F8CD2E9742656ACC1C515216 /* MetaWear.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -5129,8 +3010,8 @@ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0920; + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -5140,30 +3021,30 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = 7383710D244E9B5EB4B4214EC550C0C4 /* Products */; + productRefGroup = 984DD25FA52FB8D804F253867C7B9AD8 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */, - B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */, - 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */, - E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */, - 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */, - 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */, + 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */, + ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */, + 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */, + 43AE0570AE9E038422E2E5E9A9BB0140 /* Bolts-Swift-watchOS */, AA3C39426CBD48108BC3ABCF231AC2DE /* iOSDFULibrary-iOS */, 9389CEE263723AA7A1038CEC838D4720 /* iOSDFULibrary-macOS */, - 28835C651012C7B6AE21E36DC39BE97A /* MetaWearPrivate-iOS */, - E4C8A5130851E57DDABD17C30B3C75EF /* MetaWearPrivate-macOS */, - 9913C873BD8A170381970D996D45827A /* MetaWearPrivate-tvOS */, - A55E3783D8D4EDD871AA65857BF9C339 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */, - 6BB20AE7422131218CBA3CA8AD803CAF /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS */, - ADCD0745A509211F9E45242AEFA6203F /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */, - 03660E68EEA1F612CF60FF2886F922A9 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS */, - 7F11D2B61F59B69A48D62B8557B5D829 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */, - 03E1833CBC3FB4E51DC16432152D7EE1 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS */, - FE50749721A80F20A52069F9ADF700B1 /* Pods-MetaWearIntegrationTests-iOS */, - BE34009462B10997A222DD38A2E3512C /* Pods-MetaWearIntegrationTests-macOS */, - 5CC97C3DED504DBA2929BB435CA11B7E /* Pods-MetaWearIntegrationTests-tvOS */, + FBCDB923BFEC9B087B78F572C6D26ABF /* MetaWear-iOS */, + E1A2C54E075045370CF68755E67F5C6F /* MetaWear-macOS */, + 1CF10E2AEEEB932120CC7181BD88C40C /* MetaWear-tvOS */, + D17D869CD175A025630F4E3D5BD9CB32 /* MetaWear-watchOS */, + AD70FE1E93D40666D1ECF65358AE5515 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */, + B55FE8372561748E1CA13FE28B577186 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS */, + 9DBFFED0D32FB704EBBE05B279730169 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */, + 127E6F0C1212BA87A0F3EDBA8EEF0803 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS */, + 35939192463050DFECFB86564016D871 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */, + 981F84FF1FEA3B797063EEDC1FF0456A /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS */, + 99F8434DD029A5E4FFAB053EF2AD13C6 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension */, + EA62020A060B4E106686018B6FC4CE79 /* Pods-MetaWearIntegrationTests-iOS */, + 1954B756700A6E98A605A19FA4C0803E /* Pods-MetaWearIntegrationTests-macOS */, + 5F520F8014E9C3527B013AAFB1F4F631 /* Pods-MetaWearIntegrationTests-tvOS */, F57306538B475B533545EE22C423E8EB /* Zip-iOS */, 581D3B58E73E74943B0B279158A37B4B /* Zip-macOS */, ); @@ -5171,371 +3052,51 @@ /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 1FFB740586136D3F4EA7060482C01F80 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B9B64CFF2D3D2C1015F7E0D91FA4670 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 21DF670082A0598E719A5EDBDCE1EF38 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - A77C7003F1152B18CF9DD0133EEA7F3E /* Pods-MetaWearIntegrationTests-tvOS-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 48ADF53079F346C5ECCA062207A6FB30 /* Sources */ = { + 05F249A0F3C45F3EF705FFA7D46F656F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A218E0F1B79EA52939DD82F40BFDD8EC /* BFTask+MBLExtensions.m in Sources */, - 4C01B51DCDEB882AC5DBBBDE9C3CE005 /* BFTask+MBLPrivate.m in Sources */, - 2ABB9CF1327FF579D838739204244CB6 /* MBLAccelerometer.m in Sources */, - F80DA78BC63BB30D6F3CF9B569DDB07A /* MBLAccelerometerAxisReadyEvent.m in Sources */, - 7056A39C17470AA9103E72F8418A80BB /* MBLAccelerometerBMA255.m in Sources */, - FB9D7896502C89B33F8C2388EA34505A /* MBLAccelerometerBMA255MotionEvent.m in Sources */, - C73E671FFE4136EA1ABC48E393E500F8 /* MBLAccelerometerBMI160.m in Sources */, - 0878E6CE39F29B1CD032C4AA781EB498 /* MBLAccelerometerBMI160MotionEvent.m in Sources */, - 872C45BD0EAF8834ED51195B41825E20 /* MBLAccelerometerBMI160StepEvent.m in Sources */, - 027F693630B82D5B8C891B51AD0AAFBB /* MBLAccelerometerBosch.m in Sources */, - C0EE0AF86146E411945A7A61918C6161 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */, - CBF2DC4EF01F7137214EE6A67F333DD3 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */, - BE860773BD21520A6DC2E7942F4F1D55 /* MBLAccelerometerBoschFlatData.m in Sources */, - D8E9C2A01CE6B9B7B5B67AC5141AE37B /* MBLAccelerometerBoschFlatEvent.m in Sources */, - 3C32A01273D7135EBD313E1E777C79BD /* MBLAccelerometerBoschFlatFormat.m in Sources */, - 6BF068320C289877EA083580CE6FEE35 /* MBLAccelerometerBoschFormat.m in Sources */, - 1AE62FD730379B30F5B6A41D87E29A8C /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */, - 56D6E537FEA6CB1E056AC63454AC02D0 /* MBLAccelerometerBoschOrientationEvent.m in Sources */, - B961E50E75BECA81FF8A50A973EED838 /* MBLAccelerometerBoschOrientationFormat.m in Sources */, - 9F43D108C2F2DC0823D3A97CF5705F7A /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */, - 82BEA19A580B579F59A77336B3066DC1 /* MBLAccelerometerBoschRMSFormat.m in Sources */, - F9E51D76F9143C3EE463ABAF26AD6D1E /* MBLAccelerometerBoschTapEvent.m in Sources */, - 4A544AA8B40C3569AB6916AF38D1AA90 /* MBLAccelerometerData.m in Sources */, - D7615D158F5744FD9E95F7A2B7BEE26C /* MBLAccelerometerDataReadyEvent.m in Sources */, - CF7554868FC1B072F6454D28AC3E70AD /* MBLAccelerometerFreeFallEvent.m in Sources */, - E27F0D2208C2328B8AE86EFD42CF4227 /* MBLAccelerometerMMA8452Q.m in Sources */, - B0135E000349F9922FD27FEBE86326C1 /* MBLAccelerometerMMA8452QFormat.m in Sources */, - 48FCA58F05A74F5C09F7CFF8697FDCA9 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */, - 0CD543B135B451A3B87BE020B48EA2E3 /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */, - 0F939452145DCCC94EE24BE3CEF1F012 /* MBLAccelerometerOrientationEvent.m in Sources */, - A9F0B91D8F104838C41BD0ECDE0A7095 /* MBLAccelerometerPackedDataReadyEvent.m in Sources */, - EC67DF78F4ED28644A066202F2A7C408 /* MBLAccelerometerShakeEvent.m in Sources */, - A181A691942CF017677CD87F6C2A4324 /* MBLAccelerometerTapEvent.m in Sources */, - B130F2450A66DEE71C430CC105AD15F5 /* MBLAmbientLight.m in Sources */, - 03D701D43AAFF6CB616E4E74329A54E1 /* MBLAmbientLightLTR329.m in Sources */, - BE20476AAF6FFEB3E8F5CD26EDCA136C /* MBLAnalytics.m in Sources */, - DEDC881422024A369FF94FB99BDB93A9 /* MBLANCS.m in Sources */, - 58CE763D472BF41451442CEEC7641230 /* MBLANCSEventData.m in Sources */, - 934593FA52F6D348B60D5FD788BCBC30 /* MBLAnonymousEvent.m in Sources */, - 41620C071BD385E872D92566600BD803 /* MBLBarometer.m in Sources */, - 2167766CB06CA4DC13E62687EB8CA1CC /* MBLBarometerBME280.m in Sources */, - B223D61D4BA5E31A4E6BA051890B46F6 /* MBLBarometerBMP280.m in Sources */, - 48ED7AA742934E5C9A04762A80894D5F /* MBLBarometerBosch.m in Sources */, - E1FD6C95EF73560D8422C7A6EBA7498B /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */, - 408FE85F34A330E0F22B22C4F95442E0 /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */, - 57CC8EE19034A3A572764B1021505B85 /* MBLBitmaskEvent.m in Sources */, - AAE7F25636A32F58448EACA0B6290C3C /* MBLBluetoothCentralMock.m in Sources */, - BCCDE241D1B64E7B8FDC2ABED6C0D536 /* MBLBluetoothPeripheralMock.m in Sources */, - 5842DFE5FFEA5939BA59A8DA5D3B699A /* MBLCategoryLoader.m in Sources */, - 98519ED0856E32CAC03E2DC2081CA586 /* MBLCommand.m in Sources */, - 596E42A9A145D515CBADE87977622CB5 /* MBLConductance.m in Sources */, - 905EEF9EFDA9B35E5927F041C677EA93 /* MBLConductanceData.m in Sources */, - FF5C881D0C42BC28D2922660AE149EC2 /* MBLConstants.m in Sources */, - 502B2795643D22D7E7CE9C56A5F9D656 /* MBLConversion.m in Sources */, - F056D4599E7A6FA9A986434245F9DD8A /* MBLCorrectedFormat.m in Sources */, - AC5D895F2FCE41ACCC07DC3E5C713EC9 /* MBLData.m in Sources */, - 029ADF46A4B53B6BEB31ACD9A345F7FD /* MBLDataProcessor.m in Sources */, - 0C4610AE2C44EC97CB8409428A4389B8 /* MBLDataSample.m in Sources */, - 9E6AF024B83807A8F9162DA3E1FD342C /* MBLDataSwitch.m in Sources */, - 7C56B017F68D95DE3094E8401E8907FB /* MBLDependentData.m in Sources */, - 82CF6934626DB60BCE05756D56F93FB1 /* MBLDeviceInfo.m in Sources */, - 96A123A17AE064702CDEDE31B3BC0B3A /* MBLDeviceLookup.m in Sources */, - 880D0BE89683E4F6B7850D2392C40241 /* MBLDispatchQueue.m in Sources */, - B2655837A417361C65677B1190DDEB25 /* MBLDownloadOnlyEvent.m in Sources */, - 19250B8192BD5C2AF5A703FFB8BCD86A /* MBLEntityEvent.m in Sources */, - F1150C66E5BB51645CE67A1BFFCBEC3B /* MBLEntityModule.m in Sources */, - C94BFAF0925D10777E3FBFF4E280FC31 /* MBLEulerAngleData.m in Sources */, - E78C7B1FC418BFBB80466C5EF8F599BF /* MBLEulerFormat.m in Sources */, - E27D129AF1B3710406CDCBFDB91C3ECC /* MBLEvent.m in Sources */, - 66660A2B602CC552E7F0E47458142814 /* MBLExternalThermistor.m in Sources */, - 9575055E8C8C8E2A85E187368B31C18D /* MBLExternalThermistor0.m in Sources */, - 05BD407A3B595105D47A2615EE011C67 /* MBLExternalThermistor1.m in Sources */, - 359CDFFF5DA0746C091CFCAAA3390920 /* MBLFilter.m in Sources */, - A9348A3B907A2F19FABCE53CE3A52C00 /* MBLFirmwareBuild.m in Sources */, - 15B979CB422A4CB0C9020C6283B85F2E /* MBLFirmwareUpdateInfo.m in Sources */, - 2ED9394B0EF117357E73E4428564C571 /* MBLFirmwareUpdateManager.m in Sources */, - 013C146186AFFEF6A7582C2F33AF6628 /* MBLFormat.m in Sources */, - 8C55A222A79E2C310C4ACEAA0B521967 /* MBLGPIO.m in Sources */, - 182F0B1B306709011D50699E12DEA962 /* MBLGPIOData.m in Sources */, - 0365EF83607D1B78826296AD032CF08B /* MBLGPIOPin.m in Sources */, - FF75BE9C9AE3E4BF71B13A8E2AA3AD41 /* MBLGPIOPinChangeEvent.m in Sources */, - A6A7E663E1E7DA94E56FCF6EE311C7ED /* MBLGravityFormat.m in Sources */, - 797DCA3C161FB5A98DAB13AF2B66FFF2 /* MBLGyro.m in Sources */, - 9F56549DCFD8F2307E3D82BDBB7C03E2 /* MBLGyroBMI160.m in Sources */, - D8B486D67346D85AEA13AE714C0B75B8 /* MBLGyroBMI160AxisReadyEvent.m in Sources */, - 58DBD04F0055F59EA7C30B0E86BFF547 /* MBLGyroBMI160DataReadyEvent.m in Sources */, - 5B03D69153457159D62D184A936E08AF /* MBLGyroBMI160Format.m in Sources */, - E016FF24F0EE27BF3AD0359F1ED9071A /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */, - F877B88571FD538AEF3E16B8725539AA /* MBLGyroData.m in Sources */, - DD8C8CD21731BFAEF06BB0687DC9D3A4 /* MBLHapticBuzzer.m in Sources */, - D71EEE218FC048B2D0979D845A3D7E08 /* MBLHygrometer.m in Sources */, - C0BC5E17D2416809DFC008CABD5C75F9 /* MBLHygrometerBME280.m in Sources */, - F1107BC1D76906851AC95D6E91572C19 /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */, - CA62D25D51E04D54FC074D386B34FAD2 /* MBLI2C.m in Sources */, - 062A9C0E02CBBBCAC6691E92F9656C34 /* MBLI2CData.m in Sources */, - 4DF4A41E58C17D5A0B37A0B34C4B77ED /* MBLiBeacon.m in Sources */, - 6533E0A99FDE81DD1B6748011075A6DC /* MBLLED.m in Sources */, - B4A94E2B0D4C92CC945C9BFCA5B117D2 /* MBLLogger.m in Sources */, - AAF62C196DBEE5BC88B9598BA6F12137 /* MBLLogging.m in Sources */, - EBCCD8E8A264FB7FE0959199B8D0E279 /* MBLLoggingV0.m in Sources */, - 748FF78F59DD3BBCC0A4D2E99F85A836 /* MBLLoggingV1.m in Sources */, - 9F9AEB3D268E529595D12CAE5578D9F9 /* MBLLoggingV2.m in Sources */, - 46D5B99EE422E4F19B6630549BB14BC4 /* MBLMacAddressFormat.m in Sources */, - 77248DAC188E17D223441688070646D2 /* MBLMacro.m in Sources */, - ADAFFAF98C54A8B4FBB46849890AABDA /* MBLMagnetometer.m in Sources */, - 47C16B28D6BA9EE4CE10F1971038EE0B /* MBLMagnetometerBMM150.m in Sources */, - ED5E9EF619DEAB9A0020ABD85D298E0C /* MBLMagnetometerBMM150Format.m in Sources */, - 23655434C50F9F105B93AEA10066FFAF /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */, - 6944E56933A54C2B9645949AFB8E34B7 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */, - 5E0E91B6058775A657CEC3ABCDC0ED8C /* MBLMagnetometerData.m in Sources */, - F4963419D6D3DEA56C67F6DB548424DE /* MBLMechanicalSwitch.m in Sources */, - 010D2D7461DA9680646520AFFFDE44E0 /* MBLMetaWear.m in Sources */, - 35A46DF66F128E1CE84D978F06265C12 /* MBLMetaWearManager.m in Sources */, - 933D54DB37E2D66FEEF7EA3948FAC7A7 /* MBLMockPeripheralFactory.m in Sources */, - A9E1744C2063D0D47F61B415EF83C7F7 /* MBLMockUtils.m in Sources */, - 8DCB6644145A250AE8E7E6D4B487A59B /* MBLModule.m in Sources */, - 5AE31BA40B2C7541A11D817110CD90FA /* MBLModuleInfo.m in Sources */, - E721F98743BC22BDC805C832F3C443D7 /* MBLModuleMock.m in Sources */, - 120C7DF54F2057BE9527E4B08CCB4C0C /* MBLMovingAverage.m in Sources */, - 45ECCB790E92F5C701F8373A6E4D3943 /* MBLNeopixel.m in Sources */, - 9FEE83D8FA6E4F894FCBE9DCC00B2C6A /* MBLNeopixelStrand.m in Sources */, - 3F476A5BF8B4027D43964FE23AA93FD0 /* MBLNonVolatileState.m in Sources */, - C02700C74AED223298C2AC704672AAF8 /* MBLNumericData.m in Sources */, - 0DB3406A115381A4E82C04CD9CBE1C98 /* MBLNumericFormatter.m in Sources */, - A4BE8E516C27A95B75893B02F1A50E7A /* MBLOnDieTemperature0.m in Sources */, - 4E83D82F7CCAAF6A6E02A5E8B4FEEAC3 /* MBLOrientationData.m in Sources */, - CD84B3DBCF335111C24AE81043DA0743 /* MBLPhotometer.m in Sources */, - A0CEF99D292E6AFAB05F903C14E081FA /* MBLPhotometerTCS3472.m in Sources */, - 92CE8AD1659D6551DC694A59280846AC /* MBLPhotometerTCS3472Format.m in Sources */, - D7F63B0C7F08A6AE40415F48F131B111 /* MBLProximity.m in Sources */, - 4AF4CDBDB8BD3C33E169E5FAF5090F50 /* MBLProximityTSL2671.m in Sources */, - CF370F22C3AFC09BDC8219E43E56C693 /* MBLQuaternionData.m in Sources */, - 96C4C4F1BBCEC6CE5AEC4CB0F081BB1D /* MBLQuaternionFormat.m in Sources */, - DC9A6E82D41279207EBF2C3D4F5DA29E /* MBLRegister.m in Sources */, - 1D1F8AD049EFA1947029D72F648307D2 /* MBLRGBData.m in Sources */, - CB862CDB23ED480E4E9158B9A4F48A96 /* MBLRMSAccelerometerData.m in Sources */, - 34725B88BA7E6A91B4D00AE6F862EA2B /* MBLSensorFusion.m in Sources */, - D115F844E8B3CFFDEDD5937EFB9ADB9B /* MBLSerial.m in Sources */, - 4DFCADA87C2EB59701C98043CF52C328 /* MBLSettings.m in Sources */, - 216A698CEB7E1CF25FAA87C7597AC578 /* MBLSPIData.m in Sources */, - E0E57E50E21A75CE1FD109B501C2FB8B /* MBLStringData.m in Sources */, - FD0D093E1AC62188DBD6EA575E5D6E62 /* MBLTemperature.m in Sources */, - B411A31F132646062981E434C3827219 /* MBLTemperatureV0.m in Sources */, - A8FBEEFDA7A96CC4841B7498865CF031 /* MBLTemperatureV1.m in Sources */, - DFB8DAD761ABB836FCE0D209D4FF7C00 /* MBLTestDebug.m in Sources */, - C2E2C0A35CD801CE4F6890092C42E897 /* MBLTimer.m in Sources */, - 1A6DE56CB1F6FE1A9C9916994ABCB2E1 /* MBLTimerEvent.m in Sources */, - 9085C3FC007F075BB3BA75352FC689FD /* MBLTriggeredRead.m in Sources */, - A4C59BDF72102A3F4C8933D538D870D6 /* MetaWearPrivate-tvOS-dummy.m in Sources */, + A9D80659CA7AF189759E8D8E037EC217 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 508E07963D155F0AD9DC05BE25E2C488 /* Sources */ = { + 403FE04840779246F46DBA0BB1171D02 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C5CEAB0AAAB8F077333AB408BF9C792F /* BFTask+MBLExtensions.m in Sources */, - C09306CC8ACA55C1EFC68C857FF1F6A6 /* BFTask+MBLPrivate.m in Sources */, - 6BCF045739985E71F3884AC5FC92EAA2 /* MBLAccelerometer.m in Sources */, - 8D5EE8C586601DD60ACABD903CBC458C /* MBLAccelerometerAxisReadyEvent.m in Sources */, - 6161CCFEB0EF5CAE13EE33BED12D0D6E /* MBLAccelerometerBMA255.m in Sources */, - 68291928EA2AEC8228EFFB58BF45E2CE /* MBLAccelerometerBMA255MotionEvent.m in Sources */, - 4A18CD9DBBF54F7805395A486D3F9B61 /* MBLAccelerometerBMI160.m in Sources */, - 8AEB17FE9A13F1EF1B118583AD231299 /* MBLAccelerometerBMI160MotionEvent.m in Sources */, - D5AFDD812C742CC9753E2915F379CB5B /* MBLAccelerometerBMI160StepEvent.m in Sources */, - F28011F1336E984605DCB8FC6B82D960 /* MBLAccelerometerBosch.m in Sources */, - E716A9F7926FE09EA5F44D93588916C0 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */, - E3CE2CB205B69D9FA9C4CE0DA50B0809 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */, - 34CFEDCDD205EB4A4858553BD1B3B475 /* MBLAccelerometerBoschFlatData.m in Sources */, - 0F98E2BD8E1DA779C23A0AFAA9799A53 /* MBLAccelerometerBoschFlatEvent.m in Sources */, - 8C60B49888799CA2A1AAB67EB9B980A1 /* MBLAccelerometerBoschFlatFormat.m in Sources */, - 102554E31E508392FC533E12806168BA /* MBLAccelerometerBoschFormat.m in Sources */, - 1EC244B467EE3549A5C5E27A6CFC5358 /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */, - C4C9F7CD4FDAC6898C72C92918F7DD85 /* MBLAccelerometerBoschOrientationEvent.m in Sources */, - 147EDD67EC8602B39E7F9F018E722240 /* MBLAccelerometerBoschOrientationFormat.m in Sources */, - B5FEAFCBEDB7DD7CECE85DED81F18F11 /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */, - A43BA132A0E07B6B02570645C8D03FA5 /* MBLAccelerometerBoschRMSFormat.m in Sources */, - D193DF7EAA5B44EFBEEEF2D1EB098D5D /* MBLAccelerometerBoschTapEvent.m in Sources */, - 391423C22528199356B6937FE79AD088 /* MBLAccelerometerData.m in Sources */, - 32D6492998D7C315581DF6DA9EFE1DE9 /* MBLAccelerometerDataReadyEvent.m in Sources */, - 749D43AA71072F3A0F45E7072C8D39AF /* MBLAccelerometerFreeFallEvent.m in Sources */, - 7F8FD4E7CBBEB70EF1B0F8F48D65ABA7 /* MBLAccelerometerMMA8452Q.m in Sources */, - 52D7A86E4480DFCCB37620CD31AAD85B /* MBLAccelerometerMMA8452QFormat.m in Sources */, - 8FD3F26C393AC48460D3C898A44E0DC3 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */, - 098FE2D71B7F71737542BF5DFE597F83 /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */, - 35467432BCBF7B98F325B38248F75EC6 /* MBLAccelerometerOrientationEvent.m in Sources */, - 8A6D5490D285B256CACFD25D814E57E6 /* MBLAccelerometerPackedDataReadyEvent.m in Sources */, - 46DB14F2C577B8EEA82FCE66BA5947BA /* MBLAccelerometerShakeEvent.m in Sources */, - EBB087768D48B098B7B5486B623BB8B6 /* MBLAccelerometerTapEvent.m in Sources */, - F1D80C90E105A58DDA42EE5B32715F06 /* MBLAmbientLight.m in Sources */, - 0B060733C1F26E993362CBDAC263857A /* MBLAmbientLightLTR329.m in Sources */, - 360F295B67DE2B9743E84A7C81DB9761 /* MBLAnalytics.m in Sources */, - 083E49121D04667E310E9AE8487836B8 /* MBLANCS.m in Sources */, - 09D9A1843E5F99C7E2A49AF2B1547F3C /* MBLANCSEventData.m in Sources */, - 95B1829645EFEBFDA97B65F8E51DF21E /* MBLAnonymousEvent.m in Sources */, - 633C4AC3A52F589EB6ABD614D7E51BFD /* MBLBarometer.m in Sources */, - 0665FEBFD7BFEB969F9B987F194D3352 /* MBLBarometerBME280.m in Sources */, - CA0D8D7DE6F9BF35758886821432480E /* MBLBarometerBMP280.m in Sources */, - 231005264C330ADF0EB2F6A25ADDB710 /* MBLBarometerBosch.m in Sources */, - ADB7A8743CB54CDC26580A73948FA28E /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */, - AA412D65905804DC64F9FD7C9D59669B /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */, - 632F453B57DC5156F9144C1D2C37ED29 /* MBLBitmaskEvent.m in Sources */, - 29BFBDA37A895188A982B694020E67BE /* MBLBluetoothCentralMock.m in Sources */, - 0427D8C94D40A18644BBE743912FBE24 /* MBLBluetoothPeripheralMock.m in Sources */, - 3DD4F574B55FF68291E0D30DC402C2A1 /* MBLCategoryLoader.m in Sources */, - 031A141D6AA7B805CBB3640F6EC43D27 /* MBLCommand.m in Sources */, - 711D894AABEE1E1511E1B7227E9BD9B7 /* MBLConductance.m in Sources */, - 32DD6340EF3C8520F8706E6953F2F7C5 /* MBLConductanceData.m in Sources */, - 301B448CE2DB68438B749B2D9299419C /* MBLConstants.m in Sources */, - 06D76A284D55BC3D5A3A0E4A243B4A98 /* MBLConversion.m in Sources */, - FEAF48EA6D8A5952DCC636F785187DD5 /* MBLCorrectedFormat.m in Sources */, - 6925DDD9A42F7A47E133ED69191AEB0C /* MBLData.m in Sources */, - 530804B6BDF76B2E5714B21F37782B83 /* MBLDataProcessor.m in Sources */, - 791298E46DEE4EDA2510D841F78C864A /* MBLDataSample.m in Sources */, - AFD8CE19D35A29AEFA9D8FCFDFA3F622 /* MBLDataSwitch.m in Sources */, - 3F184ACBDEEEE2B18DBB72B9B6A3400A /* MBLDependentData.m in Sources */, - E97D64EE31C5C4EFBEAD89EC69DCBD31 /* MBLDeviceInfo.m in Sources */, - 717B4E2A9F151A3966FE50ECC2D4CA53 /* MBLDeviceLookup.m in Sources */, - BFD99B3A069FBE2B88162BB5FAA2C83B /* MBLDispatchQueue.m in Sources */, - 87523EFDAB8A747D936B8A2C2BEA2E83 /* MBLDownloadOnlyEvent.m in Sources */, - 59EA2F226EFF94ED20099F759B7F81E8 /* MBLEntityEvent.m in Sources */, - AA3490B89AA5FF408AC96BC93A793382 /* MBLEntityModule.m in Sources */, - 74A64A1226D7CE1A77D6E70B4C094C24 /* MBLEulerAngleData.m in Sources */, - 00E95D6A95A3F727CFB0DFE0F95AD0CA /* MBLEulerFormat.m in Sources */, - 3DDEEF612D0AC411650754D4BF6AF921 /* MBLEvent.m in Sources */, - 3C344344225E7F91931562969A7735C3 /* MBLExternalThermistor.m in Sources */, - E05F1AE66A74CB029D18BB445FC6B8AC /* MBLExternalThermistor0.m in Sources */, - FD7E8BDCDE349637949C635DE7589324 /* MBLExternalThermistor1.m in Sources */, - 8F01CF08386DD8D5699A97AFF4D9BCC2 /* MBLFilter.m in Sources */, - 30AE7A867D997F1A18B44D048BDAA795 /* MBLFirmwareBuild.m in Sources */, - F11FCEB7BCE9BB689098F32770055AA9 /* MBLFirmwareUpdateInfo.m in Sources */, - 8D6CE9A8DCC5595B21C88E9182A4126E /* MBLFirmwareUpdateManager.m in Sources */, - D82FF292F0F9031C78C53FFBC1109834 /* MBLFormat.m in Sources */, - B081A775CED2A802F865B8C7CA108185 /* MBLGPIO.m in Sources */, - E87EC73348643827467EEA840490578E /* MBLGPIOData.m in Sources */, - 4E0B24AE510E398DFA54F911FF43D486 /* MBLGPIOPin.m in Sources */, - 03B9A46B683B005457108D65056D39E4 /* MBLGPIOPinChangeEvent.m in Sources */, - 881B0C1F0A84BD85F3D4464900547E55 /* MBLGravityFormat.m in Sources */, - EC8F597ECD72BBF7721138E0023A06C1 /* MBLGyro.m in Sources */, - 23B359CF89FBE74517006A68C4745A86 /* MBLGyroBMI160.m in Sources */, - CC4FFF8DED2D872E2158E1A9327CBD00 /* MBLGyroBMI160AxisReadyEvent.m in Sources */, - 49E9B3720D178088DFC80223782D0795 /* MBLGyroBMI160DataReadyEvent.m in Sources */, - ED825FE54E7A16DA640667339ABA5999 /* MBLGyroBMI160Format.m in Sources */, - 0925EE3826CFCB08BF273D9E4ECA514A /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */, - 0BBFA89A50E38F47607784D5823B5B2F /* MBLGyroData.m in Sources */, - 8786531AB1A849299D6B5AED9004A337 /* MBLHapticBuzzer.m in Sources */, - F40474019AA1AE34AA6B819DE9024D8A /* MBLHygrometer.m in Sources */, - 458FA2EE735136541A814530C6695140 /* MBLHygrometerBME280.m in Sources */, - B9AF8FD027C2A31BFFCC3830BA48A269 /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */, - 41827A5EAD41F4C71865044AA56EA656 /* MBLI2C.m in Sources */, - 496D500D0A179729AE24C1FB53E1FD9B /* MBLI2CData.m in Sources */, - 43C570E0B62FFD53F2B5FE888DFF9ED8 /* MBLiBeacon.m in Sources */, - 1684550709B8476C873C91BA669F50DC /* MBLLED.m in Sources */, - 53800C465F6CDEA6B5BCEB9958151E2F /* MBLLogger.m in Sources */, - 175089188FFFB3FD718B5CA3F751E9F8 /* MBLLogging.m in Sources */, - C844D956C0B9EE9A60785DF0669352E1 /* MBLLoggingV0.m in Sources */, - 33633CDDDCCE239DAAF319C38F64CCFD /* MBLLoggingV1.m in Sources */, - 39BD3AEB623AE4D8429F671AB241E133 /* MBLLoggingV2.m in Sources */, - 3D44955717F59F973A912AE3458C121D /* MBLMacAddressFormat.m in Sources */, - 21EBD8F91205F2E1C28F1904E9C52299 /* MBLMacro.m in Sources */, - BAE0B4F79952BF544D14587C3DE6DE58 /* MBLMagnetometer.m in Sources */, - 95BE099F051DB5F2D57FEDE09C92C95D /* MBLMagnetometerBMM150.m in Sources */, - 4D5C677E9C6F263ABE2D8363D6C7E8DF /* MBLMagnetometerBMM150Format.m in Sources */, - 59B87AEAABB25A8B975F2B6CBE799AD8 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */, - 7763526F1A9C4C195ED569CB2128955C /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */, - 7B48AFC2768DFCE0FA06598132921F0E /* MBLMagnetometerData.m in Sources */, - F51A929E1C000442B645C2780DE44DFD /* MBLMechanicalSwitch.m in Sources */, - 49508460B4FB2BCF55797A864440F14B /* MBLMetaWear.m in Sources */, - A1454A23E30619D8673AE800D9293B96 /* MBLMetaWearManager.m in Sources */, - 9B8998CF2ECC81B46C0DA4905766FC9D /* MBLMockPeripheralFactory.m in Sources */, - 4BDCEB07B922342D10BFA07A2BAB2D16 /* MBLMockUtils.m in Sources */, - 1FD59BC51D175ED916C9D1C20BA7C4C4 /* MBLModule.m in Sources */, - 867153AE5D4007AC5FEB80BA449D8A28 /* MBLModuleInfo.m in Sources */, - 6AED71A0948BA7FA800F0FC0FDCA2D2B /* MBLModuleMock.m in Sources */, - 4BE06CE37FAC4FA638AC9053EED121EA /* MBLMovingAverage.m in Sources */, - 7F46A384FFD9E63159EA428EDABEFE1D /* MBLNeopixel.m in Sources */, - 57C11BE620A7FD244399C8B37512E9E3 /* MBLNeopixelStrand.m in Sources */, - C3625D7C66F4B5D60F37E7B336CAC3C1 /* MBLNonVolatileState.m in Sources */, - D6764370ECCB6EF4C294EFBE35D589B7 /* MBLNumericData.m in Sources */, - FD06B2677163B33A95F58272B001E1D2 /* MBLNumericFormatter.m in Sources */, - 01A051F8BC7AAEA5BAF3118AE0453CFE /* MBLOnDieTemperature0.m in Sources */, - A18ACA69D4DB8B516445327729241876 /* MBLOrientationData.m in Sources */, - 3D9EA9E17FCC9C40DB1D4622EF4B1135 /* MBLPhotometer.m in Sources */, - 6E371F5443D7BCE00695B2B0B52AF275 /* MBLPhotometerTCS3472.m in Sources */, - 1E898C023F1487158423D73250A1B016 /* MBLPhotometerTCS3472Format.m in Sources */, - 15BA44CD8D62339293C917F6B53E6258 /* MBLProximity.m in Sources */, - DF831C98CE00F874DF40E69E34B899AD /* MBLProximityTSL2671.m in Sources */, - 1381FD8B26BAADADAB33BCC8802F5810 /* MBLQuaternionData.m in Sources */, - 43FE1F2998AFAB5A84204F673D5E96C3 /* MBLQuaternionFormat.m in Sources */, - 78665A3E0D158F37937B4B70D92EB850 /* MBLRegister.m in Sources */, - F689C8EE14EFAB57578BC94A404B0BAD /* MBLRGBData.m in Sources */, - 7131A3DFC54FB6426718778452B4787F /* MBLRMSAccelerometerData.m in Sources */, - 2F8F8F81494C4DAA377E56F01DB26EA3 /* MBLSensorFusion.m in Sources */, - 1957DFE221A73F3C7D94CCD95DB27302 /* MBLSerial.m in Sources */, - DEBC3137F2160A553401FD8D9F7C2599 /* MBLSettings.m in Sources */, - 8D3B7CAC7DA8669C3DC514E06DC24188 /* MBLSPIData.m in Sources */, - 3151AB37F606B27CA8E8105AD5E72D59 /* MBLStringData.m in Sources */, - DD876877C0B6DC9D9FD5F96EED2A7660 /* MBLTemperature.m in Sources */, - 6C231374436E8BE887B5EFF9BE2C8841 /* MBLTemperatureV0.m in Sources */, - 497BF38E3AF8F59838D1D0781EE94422 /* MBLTemperatureV1.m in Sources */, - 922688049F9CB1327FC3CA9EF0A1F5EA /* MBLTestDebug.m in Sources */, - 75B70A8C6173BCEC6ADE370C45FCFA5A /* MBLTimer.m in Sources */, - 9A99C63AC2A0AC43DBD00255BF7B691C /* MBLTimerEvent.m in Sources */, - 92BB5036FF27D19CC743496634B1742A /* MBLTriggeredRead.m in Sources */, - 21687508C74BCF72651DEC49E9707E2F /* MetaWearPrivate-iOS-dummy.m in Sources */, + 8BA893B6556D9D995AE9C3244ED79C61 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 51D775D0B5C36B93A3571777B701D2D6 /* Sources */ = { + 513C61AE7BD63234ECD020892060C0C8 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 02224752D0BEC566D0DCB9D6D647DF3F /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m in Sources */, + A3B858DA4D8EA2A5809D2661843BB966 /* Bolts-Swift-watchOS-dummy.m in Sources */, + 77424BD1EA196C2E367789EAC38DFA3F /* Errors.swift in Sources */, + 821BECCEB89020965B0F25171233458C /* Executor.swift in Sources */, + 0119CF93164BDEED72A67997E42469F7 /* Task+ContinueWith.swift in Sources */, + BC8A8AAF66B1DEF18D848D952FDAE93B /* Task+Delay.swift in Sources */, + EFDFAC696B000BB5C71CB02424028975 /* Task+WhenAll.swift in Sources */, + F0B84CEAF50C5FFE11A72B8AD091EBDE /* Task+WhenAny.swift in Sources */, + 9ECF3DF30128C1ED14BD7D52084BE432 /* Task.swift in Sources */, + 5A30AD1C05B50E8D74F1B48615F2FD8B /* TaskCompletionSource.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 52D996272BF164730CD33E1C238FB292 /* Sources */ = { + 52D58615436D196D839C4474AE40DE9D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 78906AA83C0388A3979940B14D628E88 /* Pods-MetaWearIntegrationTests-macOS-dummy.m in Sources */, + F749839931F0FA6BA264F70818FCF292 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5584C05C82F95701ADF6E947DB5DFCB9 /* Sources */ = { + 5B55669B6C8F74A4BB9AA919FA6AE644 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B48A409B6F0F125B05C55AE6A3051C62 /* BFCancellationToken.m in Sources */, - B6EF16CEB707294E1AFD32F00FFEC41F /* BFCancellationTokenRegistration.m in Sources */, - AB44EB4F0F86C31F4D5770DD705B0F60 /* BFCancellationTokenSource.m in Sources */, - 29408C09F08ECC7C4FA6CBAA842A3A2D /* BFExecutor.m in Sources */, - 6722A06F5DC3CAF3D6DD69A2F61F1F77 /* BFTask+Exceptions.m in Sources */, - 1EDF498579F01D17226D1373A1AF521E /* BFTask.m in Sources */, - C6226BFA7CA08D6F7602E45A28EFD2CD /* BFTaskCompletionSource.m in Sources */, - DCBEA3494D9F6B4AA99C96D52B16AC6E /* Bolts-macOS-dummy.m in Sources */, - 5BA14C990FBECA5929BDC7B694B4E43D /* Bolts.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 61FB512B757FAE71EA251E860B18C8E8 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C06EE5165D762F25FFACDBB12823F368 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m in Sources */, + 0EAA9171580A17C14F1C5D397CBBEA21 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5553,183 +3114,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 6DD82737306C9AF8FB58651E9367AF01 /* Sources */ = { + 730F33B4A4949B0B90944F7DB99AC28D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C6721CCD9F32EC0A0CF471D9F5412F93 /* BFCancellationToken.m in Sources */, - 3FE1D60563D69EC6A0878B4D19877336 /* BFCancellationTokenRegistration.m in Sources */, - C57A70AF286B0007FB3510A2FF46E2E9 /* BFCancellationTokenSource.m in Sources */, - A4514A1C10FC771A2C34CB2DE8E16575 /* BFExecutor.m in Sources */, - 046CEBDD8D9326BC344D84A651071897 /* BFTask+Exceptions.m in Sources */, - 637996777DE2D8D921DFBD1211B58FC1 /* BFTask.m in Sources */, - 9CB18EB11A75024E7E85B719B846693C /* BFTaskCompletionSource.m in Sources */, - 78913813A0934F595F9250D0EE01F52C /* Bolts-tvOS-dummy.m in Sources */, - 254CCE6F46947D196F937F326C3B132D /* Bolts.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7327C8104A87A2FDEFD38E462D38AB84 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 4224BB35387E7B21EF95CC9DB35191BD /* Pods-MetaWearIntegrationTests-iOS-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 757E348460F79792520A894EAB610071 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7FDBF382501DAB11C9EA93E8B62B1FAF /* BFTask+MBLExtensions.m in Sources */, - C000898533EC015B211A5D6667E4AFC3 /* BFTask+MBLPrivate.m in Sources */, - 1894ED975938F7BACE3E833BB28488D7 /* MBLAccelerometer.m in Sources */, - 167025E4096F91F650AD4C98DDAE2BA3 /* MBLAccelerometerAxisReadyEvent.m in Sources */, - 644E35C7A6166A5CBDB2089E4BEE23CB /* MBLAccelerometerBMA255.m in Sources */, - D9A4C427F62A78700C74461F8C21DDF6 /* MBLAccelerometerBMA255MotionEvent.m in Sources */, - CB968E72861A65241DA2903CD0684539 /* MBLAccelerometerBMI160.m in Sources */, - 24805C1302D51C481D9CEE207D3371BF /* MBLAccelerometerBMI160MotionEvent.m in Sources */, - E5C442C18605C886EAA6620827887A39 /* MBLAccelerometerBMI160StepEvent.m in Sources */, - DA49F4341FC715A8AE7B8D75BAEE4267 /* MBLAccelerometerBosch.m in Sources */, - 8DC0ECC3755642244D9A8A1133058DB5 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */, - FD914406A9CB30217897016E3B6D00A1 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */, - 3F51D8E53A829C3B58997C60717C7213 /* MBLAccelerometerBoschFlatData.m in Sources */, - 8631826E94B22067947F31CED32594C0 /* MBLAccelerometerBoschFlatEvent.m in Sources */, - 3DA4AB0B88022723D8A4AECF07909FA4 /* MBLAccelerometerBoschFlatFormat.m in Sources */, - 7A5CB4A07C502023FE88DB1B1827849A /* MBLAccelerometerBoschFormat.m in Sources */, - CAF133AFBE185B7C41ADA45B2801335D /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */, - 2AF17D3A589EDBF268898D937B9B39E2 /* MBLAccelerometerBoschOrientationEvent.m in Sources */, - B4FA627F44B5373008D74C30D8C2854F /* MBLAccelerometerBoschOrientationFormat.m in Sources */, - E136EE34B43E470979554A1DCB3E2144 /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */, - 35171965FE37195D75BCDD9A87040098 /* MBLAccelerometerBoschRMSFormat.m in Sources */, - 20463089658D0757787E6E4CB871AE86 /* MBLAccelerometerBoschTapEvent.m in Sources */, - 924ECC72916CC6314C4B9E26BA630687 /* MBLAccelerometerData.m in Sources */, - 9B0CB4A39BB4FF8619519A6218C4A3FC /* MBLAccelerometerDataReadyEvent.m in Sources */, - B62600F993DAD24E968AAFD708B8F74C /* MBLAccelerometerFreeFallEvent.m in Sources */, - 34E2618A02FE72E3877B20CEADE0ABF5 /* MBLAccelerometerMMA8452Q.m in Sources */, - EF49158B4B3EBAA7B691AA8CD08438A1 /* MBLAccelerometerMMA8452QFormat.m in Sources */, - 95FE9C5554D47B65BE3F1FA9A3EBAF3C /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */, - 87EBA77F723E75F2BD4B9683BE952DEA /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */, - 4440C712DC28D1332E3DA7F41A1D07CF /* MBLAccelerometerOrientationEvent.m in Sources */, - E9D39190AC7EE1B8BBB10E772C469784 /* MBLAccelerometerPackedDataReadyEvent.m in Sources */, - 1F7BCB4665E653EEB51A1B9EFC92E7CA /* MBLAccelerometerShakeEvent.m in Sources */, - B7CB1FAC1456A34C55D7E8FA6A048175 /* MBLAccelerometerTapEvent.m in Sources */, - 54C97A3025C63FC5C07250289B54662D /* MBLAmbientLight.m in Sources */, - E1C17F00D9693BC5310EFDB908C4FA69 /* MBLAmbientLightLTR329.m in Sources */, - 6CB91461A2EFCA9E8E04D6DC9774C562 /* MBLAnalytics.m in Sources */, - 511FABA386AA9BC13AD30A9BF737C0FE /* MBLANCS.m in Sources */, - 6C45A96A34D9635177DB30F5A25E1D7F /* MBLANCSEventData.m in Sources */, - CCC94D73DC917D8008DEA6D09DE8D3D3 /* MBLAnonymousEvent.m in Sources */, - 7EE2243D9411E496A9F23230F9C5F2B7 /* MBLBarometer.m in Sources */, - 8B0FA842D8BF53EF30AC88B3F1F7B05F /* MBLBarometerBME280.m in Sources */, - DC8DB73F147B167A9F77479530801BE0 /* MBLBarometerBMP280.m in Sources */, - D2C697E8CA4243B5765260062FC5BFBB /* MBLBarometerBosch.m in Sources */, - 9719C11191F434DED171CB117DBC042D /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */, - 4876F0A5D1AB45D29C22937D2A2695E3 /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */, - B5344BE6C119B850120AAA32A0F32E94 /* MBLBitmaskEvent.m in Sources */, - 25F62F8178A201B00363B21C98DAC2AB /* MBLBluetoothCentralMock.m in Sources */, - 3C305D2DD179F9313C76326D4C2930BA /* MBLBluetoothPeripheralMock.m in Sources */, - F06121505F13DC17B753B3508A6A771C /* MBLCategoryLoader.m in Sources */, - F3367E169B1BC18475C28D32C09BDD53 /* MBLCommand.m in Sources */, - 5725EC4F4E138A5C3BF815D9A08BB227 /* MBLConductance.m in Sources */, - BEBCB7D4A01B308DDAB602CE86B8DC76 /* MBLConductanceData.m in Sources */, - C1EA92B856F1EB374CF71BE1FF034124 /* MBLConstants.m in Sources */, - 9A6CFBDE273E587E6A5F13464CD6A38A /* MBLConversion.m in Sources */, - D628D5BBAE9BA92B2063E1E661987398 /* MBLCorrectedFormat.m in Sources */, - F2CD3EE3AA6A9A4B84733CD8D0C3C6C8 /* MBLData.m in Sources */, - 8C6FB25A0A26C9C54B0CD4140D0E64BA /* MBLDataProcessor.m in Sources */, - 4B97249F7B9C19423E1F3084BADFFCFA /* MBLDataSample.m in Sources */, - ED44FBBB89AB9919B0DC2C4487900DD2 /* MBLDataSwitch.m in Sources */, - DB85CD8C870DFBE4FBF54B53D1BB5BDD /* MBLDependentData.m in Sources */, - 61FD0F9E6332285767FDCC71ACC042FD /* MBLDeviceInfo.m in Sources */, - 2C56272A727044FD450C44B4CFD6E31D /* MBLDeviceLookup.m in Sources */, - A49D1DC9ED0C399CF0E2DD234B99057B /* MBLDispatchQueue.m in Sources */, - F6C88E123AA9FFBCC3CB30061423FCDE /* MBLDownloadOnlyEvent.m in Sources */, - ED986CF180D403786C077083048384EF /* MBLEntityEvent.m in Sources */, - 6B2D7E0C3BC17AFD01B72A241926ADAD /* MBLEntityModule.m in Sources */, - 3EBA977E3213DAE23873F3AAC7D4FA65 /* MBLEulerAngleData.m in Sources */, - 3DA3B2ABE79A9F4D88784317891ADE24 /* MBLEulerFormat.m in Sources */, - B7B08970522141820C43DC3905919E57 /* MBLEvent.m in Sources */, - C9E33598F910D79C18623A23A86C39D4 /* MBLExternalThermistor.m in Sources */, - C4A368BCC62B2B90265817EF4B17139B /* MBLExternalThermistor0.m in Sources */, - 6CF8B9ECB5B630AFA176E9B7C871655A /* MBLExternalThermistor1.m in Sources */, - 42E2E77DF8F92ACF0B10C30FDB6CF5A3 /* MBLFilter.m in Sources */, - 1EA98007A14C7083FEB8CF804E32755D /* MBLFirmwareBuild.m in Sources */, - B94B923D29E963E912E2FEF68C89BCC0 /* MBLFirmwareUpdateInfo.m in Sources */, - 96ED995530CD721A7D814E48CC152762 /* MBLFirmwareUpdateManager.m in Sources */, - F3E965E86E8E2A49720AB8A426AC3ADB /* MBLFormat.m in Sources */, - 13E1012BADFA093E5798AE26371392A8 /* MBLGPIO.m in Sources */, - D32CB6778719B3FC0EA56DFB893D57F3 /* MBLGPIOData.m in Sources */, - 02485AEF70C74BDE815AD970B0291A88 /* MBLGPIOPin.m in Sources */, - E2B13C98911086E21C6A6E1B9F37F7C0 /* MBLGPIOPinChangeEvent.m in Sources */, - 3F9530C621F26664FDDFB9DEA0448968 /* MBLGravityFormat.m in Sources */, - 5FA3B931780D76D189A85424B602DF61 /* MBLGyro.m in Sources */, - F68E60740963407E5BE92E84C9778475 /* MBLGyroBMI160.m in Sources */, - E28593A4745DD6B2C9E2903DA6243BED /* MBLGyroBMI160AxisReadyEvent.m in Sources */, - D0DDD6B2BA7DC088ECD37A22D4245C4A /* MBLGyroBMI160DataReadyEvent.m in Sources */, - 01DDBF1B4B65115869AAC6587ED6CD88 /* MBLGyroBMI160Format.m in Sources */, - A27EBDA47621F44D82204F24C08802F2 /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */, - 08CCE55C0F1087086ABB380DC2492E7A /* MBLGyroData.m in Sources */, - C20A810D37E51F513A041B6E6B3EAD43 /* MBLHapticBuzzer.m in Sources */, - 97ACF9D755336E2B41134E83E38D5EF7 /* MBLHygrometer.m in Sources */, - BB94BA7E3688224050E4A8663C3CC084 /* MBLHygrometerBME280.m in Sources */, - B83D310D73E21CD64001CE49C769422E /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */, - 3F391AA8DBEC23012DD7F395B9851176 /* MBLI2C.m in Sources */, - D1794E547A7CF417011AD9C2DECD99E7 /* MBLI2CData.m in Sources */, - 5F01769F183332681000E7FAFE502C69 /* MBLiBeacon.m in Sources */, - F042B80272BB1C7E05A28A66E28B5ABF /* MBLLED.m in Sources */, - 81B7C57BE31414E8055C36F2B30B7F74 /* MBLLogger.m in Sources */, - 1D60045865690C8078A721A36C0EF396 /* MBLLogging.m in Sources */, - 4684D349B95A172D53207BE85001F5AE /* MBLLoggingV0.m in Sources */, - 2BA909ACDC6029FBEE0CD1B9C5283FCF /* MBLLoggingV1.m in Sources */, - B04E8CB6BBAEAC94243635AFD8AA6687 /* MBLLoggingV2.m in Sources */, - B05D3618EDBF132337AA0ADBC787527E /* MBLMacAddressFormat.m in Sources */, - D56E5D21E56E99D931FDCABB21825153 /* MBLMacro.m in Sources */, - 93B50CA8A6FB2A6A7A1F82653FEDFC10 /* MBLMagnetometer.m in Sources */, - FB9D5EA9CCA166E6C59B3602CF9F5FF0 /* MBLMagnetometerBMM150.m in Sources */, - FAF07776AB7D9C39895CA0308F136252 /* MBLMagnetometerBMM150Format.m in Sources */, - 4E428FC0899F74DA776F12C50BF8C255 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */, - CDE7C44B94C90CAB1057957EB414223C /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */, - 67C1F884E9A0B47171EF55A7DC1A3D78 /* MBLMagnetometerData.m in Sources */, - AB1E960A356CB15CEE7621D38B4EB49C /* MBLMechanicalSwitch.m in Sources */, - A2CF5FCB2D6F31E3959836B1A482FAAD /* MBLMetaWear.m in Sources */, - 0D18BD34EAE097AD49EB12B2FBDCADFA /* MBLMetaWearManager.m in Sources */, - 9F6E287A8259E95BF1A60C716C1E3C9F /* MBLMockPeripheralFactory.m in Sources */, - 854055918F398BFAE2A39330AB0DBBF2 /* MBLMockUtils.m in Sources */, - E49DCF8C91C52E30095CF9F46081979F /* MBLModule.m in Sources */, - A091E11F68288BC6B7C11DA2DFE3D288 /* MBLModuleInfo.m in Sources */, - 4063ECFE8B092C0B0CDC9FA37EC54B5D /* MBLModuleMock.m in Sources */, - CC8E1CC855D215EAD7D24E18BF550147 /* MBLMovingAverage.m in Sources */, - BE024458766F29B1BC5FEC59E953B918 /* MBLNeopixel.m in Sources */, - 12C98448ED36D8E01ABA5A99BA057467 /* MBLNeopixelStrand.m in Sources */, - 7B1AAF027C188F40575415D7D5426EFA /* MBLNonVolatileState.m in Sources */, - B070DCA926346C4D227EEDF810802923 /* MBLNumericData.m in Sources */, - D483400A68C349137BC52BAAF91815A1 /* MBLNumericFormatter.m in Sources */, - 38815D9D7428EE3B14FDB82D664C23C8 /* MBLOnDieTemperature0.m in Sources */, - 55213E21B9D50110ECFEC08A97C0DF81 /* MBLOrientationData.m in Sources */, - D816D21E08DE6DBE8D205BAED278719C /* MBLPhotometer.m in Sources */, - C2387761E3B1924AA88F24B86580F9FC /* MBLPhotometerTCS3472.m in Sources */, - CDD4FE9B8C5F27AAD441C3203B8E898E /* MBLPhotometerTCS3472Format.m in Sources */, - 3505581238C34E15F79445D1CCB8B539 /* MBLProximity.m in Sources */, - ECD240F77052509A4AC770B18B8B35C7 /* MBLProximityTSL2671.m in Sources */, - 795E38FD958844633992E59B3EB12005 /* MBLQuaternionData.m in Sources */, - A5EE3D8AC5E2389F1F309E6D4ACA6C8D /* MBLQuaternionFormat.m in Sources */, - 755B4CB1A68DA93432525DEF6412F246 /* MBLRegister.m in Sources */, - DB2C063E44E43376CD554715E8B84358 /* MBLRGBData.m in Sources */, - 35D252364276E3EDD274739128F03D35 /* MBLRMSAccelerometerData.m in Sources */, - A10BF2F4776B8865A676C64C7A4628B0 /* MBLSensorFusion.m in Sources */, - 3A5B4F903FC658A7B91CB2CBB3243097 /* MBLSerial.m in Sources */, - 01E53568A8F39466BE38D01EF3FCC51F /* MBLSettings.m in Sources */, - 8959B91B9BE354C649A33D957362F431 /* MBLSPIData.m in Sources */, - A3E4BBEF1BB9B8B981CD94FB7F2DCD3D /* MBLStringData.m in Sources */, - 0C1A68D945C9D8373372E75DBACE96D1 /* MBLTemperature.m in Sources */, - F59C3D75DB4E2CDFB2AB5D30A987C072 /* MBLTemperatureV0.m in Sources */, - 584604A6BAD050EFE572F411764D4E41 /* MBLTemperatureV1.m in Sources */, - 863953AC35973E77EDFAE2A3C2014D83 /* MBLTestDebug.m in Sources */, - 86DAF0135601516CAE9CF45DDD412F10 /* MBLTimer.m in Sources */, - 8A99A6CAE39A0E09E58E8EFAD96A8E76 /* MBLTimerEvent.m in Sources */, - B1BD6B2FFB9900CC5CF96E13D8F1C8BA /* MBLTriggeredRead.m in Sources */, - 7AD43602307C1B0E6A954243F2108F2A /* MetaWearPrivate-macOS-dummy.m in Sources */, + 8E24184B3FE1955E7E5BE11F93FACA1D /* Bolts-Swift-tvOS-dummy.m in Sources */, + F8E9358B45053FEA1707208937B23C29 /* Errors.swift in Sources */, + A0A589753D6E30B528687EEDF919CCFB /* Executor.swift in Sources */, + B20686A480E9EEA1425DDDF4D9BD0EA7 /* Task+ContinueWith.swift in Sources */, + BA24BA3DD363B4DDF5EC6760EEE8D192 /* Task+Delay.swift in Sources */, + 599DF4151C07E6AFD0C01B22BDC368AE /* Task+WhenAll.swift in Sources */, + 80187C20199FBB70BED85C68277F6CC0 /* Task+WhenAny.swift in Sources */, + 28284DE59A477A53FCB24FAFC5F04671 /* Task.swift in Sources */, + 05CCD262D39E111E53164DA1E236C954 /* TaskCompletionSource.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5777,26 +3174,10 @@ D3255028B1C6820219F92F60AFB50E61 /* SecureDFUPacket.swift in Sources */, 0D7793CD8B5152C83B74AA17946C3464 /* SecureDFUPeripheral.swift in Sources */, 5AC990C4E5FAD4DB522DF9BEBD2473C8 /* SecureDFUPeripheralDelegate.swift in Sources */, - 3928F38C9D6AE7FD63A97FFB96F6F127 /* SecureDFUService.swift in Sources */, - 3277D686CC7EF4998BED13D9642F5AD4 /* SecureDFUServiceInitiator.swift in Sources */, - 7ADB1A7DB3F2863551AC8A2B5463A3B1 /* SoftdeviceBootloaderInfo.swift in Sources */, - 165C529F52DF4F141BB30AD7709D8267 /* ZipArchive.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7D378469AAF08AC6A2C71003EBABC48F /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 76079A2943369454D7765952AA604B87 /* BFCancellationToken.m in Sources */, - 00C6D900C7849201DDF56DD4CE31DF30 /* BFCancellationTokenRegistration.m in Sources */, - 9B758184F6C5CF29E6BA196CA0F13116 /* BFCancellationTokenSource.m in Sources */, - 9B0EDE0A419A66C3ED79CEEE9A3760D4 /* BFExecutor.m in Sources */, - D6D48914E583F6E111C68172DA1E0C27 /* BFTask+Exceptions.m in Sources */, - 3682C829A785BC1BBD85DF997D5A815E /* BFTask.m in Sources */, - 3ACC1A4721E0420C37FE3A129551B71F /* BFTaskCompletionSource.m in Sources */, - A731ADAD169347FF7E5B549C1356F151 /* Bolts-iOS-dummy.m in Sources */, - 3DCCB929EF3A458A8E52E988E290B7F4 /* Bolts.m in Sources */, + 3928F38C9D6AE7FD63A97FFB96F6F127 /* SecureDFUService.swift in Sources */, + 3277D686CC7EF4998BED13D9642F5AD4 /* SecureDFUServiceInitiator.swift in Sources */, + 7ADB1A7DB3F2863551AC8A2B5463A3B1 /* SoftdeviceBootloaderInfo.swift in Sources */, + 165C529F52DF4F141BB30AD7709D8267 /* ZipArchive.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5814,20 +3195,169 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - A5669D704473E08FFBF028ADD15CA8D6 /* Sources */ = { + 9158D9083E5F1A8D9240C08DC2496628 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C42E3F0780F4A8485730DC00AF2BAF7A /* accelerometer.cpp in Sources */, + 18EB51ABB8B7AB85B6E386C7D47D6D8E /* accelerometer_bosch.cpp in Sources */, + 276BFB97B0CFEEBB3B243DE3C8D94303 /* accelerometer_mma8452q.cpp in Sources */, + 7B957D17CC23A0D05D5E3E45E12FA653 /* ambientlight_ltr329.cpp in Sources */, + AF5C614A0F73D5F6707C564614FA5FBB /* anonymous_datasignal.cpp in Sources */, + 80DE7535DE8E486CC38C861E4758CE6B /* async_creator.cpp in Sources */, + 12CAE65188FA3F7C3FC7BD7E04D51A51 /* barometer_bosch.cpp in Sources */, + 5CE4EF691064E1028C40C488C6B8174D /* Bridging.swift in Sources */, + 65D921E8F0F42963E4EAEFB0EC30ACAB /* cbindings.swift in Sources */, + E9B627277B7AAFAEEEA27AB57A28981D /* CBUUID.swift in Sources */, + 8D721558818B1D595149CA613EEB6CBD /* colordetector_tcs34725.cpp in Sources */, + 999C2367DC849E6DF4A3D0D268CE19BD /* conductance.cpp in Sources */, + 048909F22137EC2B3C14FD1B879BAEB6 /* datainterpreter.cpp in Sources */, + BF5C900E5999D100C12668B1A57DFAF9 /* dataprocessor.cpp in Sources */, + 20A7EE35F4A0A98C597015A8D191DAEF /* dataprocessor_config.cpp in Sources */, + EA393B8D31225B49A13458BCFA9BD095 /* datasignal.cpp in Sources */, + BD0249C4F9C044C032A407A66D962992 /* debug.cpp in Sources */, + A0E3158319D30120C2A0CD519D11952D /* DeviceInformation.swift in Sources */, + 7CFE266F00CBA8CF8BEE36AB9BEF980C /* dfu_operations.cpp in Sources */, + 91916670D967E22B5356C77EC7F50B03 /* dfu_operations_details.cpp in Sources */, + 1BAA7DD5FA2CCEFAA0DC9052D885F3A8 /* dfu_utility.cpp in Sources */, + 03E143C43CE4608037DE46051F646CAD /* event.cpp in Sources */, + F10B6022C0382283A15F768DFFFA6842 /* file_operations.cpp in Sources */, + 5010603EF9C1C8985E397371C4D4B6C7 /* FirmwareBuild.swift in Sources */, + 34BBC5EAC6383FD63EBE60D0CAFD2965 /* FirmwareServer.swift in Sources */, + 0A5266BE513773C0BCF053BAB264D70D /* gpio.cpp in Sources */, + D53BCF019352E6620FD72DB709637BE1 /* gyro_bmi160.cpp in Sources */, + D7B5890A27145AF49CA42046B1A1F3B0 /* haptic.cpp in Sources */, + 919AF34A15B19EAB4258A7CC8CEECBC6 /* humidity_bme280.cpp in Sources */, + 5DAB1FFCC458A8FA7596678FEA5B6E0E /* ibeacon.cpp in Sources */, + C7483ECC9DCDA6C9005459E72A0F3B51 /* led.cpp in Sources */, + BD4BDDBC65922CCECC4E5C35B23DB9E4 /* LogDelegate.swift in Sources */, + F3D1E57100188EDF64064A45AA00D8B1 /* logging.cpp in Sources */, + 92D29C87917E10852D81C8AC6EEC6DE2 /* macro.cpp in Sources */, + 499A2B489067A1A3971A357091FD6A8D /* magnetometer_bmm150.cpp in Sources */, + 65D38D7D5902E6322ADE22648D553502 /* MblMwDataSignal+Async.swift in Sources */, + 5CCECA469E0EEAAD3C753536E71F6FE5 /* MblMwGattChar.swift in Sources */, + E4C57FE7078CC526975C063BDAE622FF /* memory.cpp in Sources */, + 190F4E4CB39523001EEBD9966A78F727 /* MetaBootFinder.swift in Sources */, + 69003AB852538F30E1D650D7D564C64F /* MetaWear+Async.swift in Sources */, + 89B2EF04379923BDDCE210000E11160C /* MetaWear+LED.swift in Sources */, + 4C322B500C543CB494652B467953CBC8 /* MetaWear+Mock.swift in Sources */, + BA3C797D36BA006963C1643FFD68C92F /* MetaWear-macOS-dummy.m in Sources */, + 8F706077347307DEB72B32BA7B062D83 /* MetaWear.swift in Sources */, + BBA68DAB0184076286F7C2EE4D3D998D /* metawearboard.cpp in Sources */, + C6E6A995935C634056D7DC3282966C18 /* MetaWearData.swift in Sources */, + 93AC353E35B65E46A17865637F496C76 /* MetaWearScanner.swift in Sources */, + 6053DCB1315F1B4A12C7AADDAFF5834E /* miniz.cpp in Sources */, + D28CFE830AE94AF4606DA7CDFBCCE1C2 /* moduleinfo.cpp in Sources */, + 85F7A65CE757F75EBCFF491BF36EB601 /* multichanneltemperature.cpp in Sources */, + 04A49035A5D712C1BD9D157FE4B8CCB4 /* neopixel.cpp in Sources */, + 2C72E07527BB31F815D1462F741E977B /* proximity_tsl2671.cpp in Sources */, + 1BF866667FDA3D42DB22B450C31D1E8E /* responseheader.cpp in Sources */, + 9CAAD45FC5301E65C1F52A4176999920 /* ScannerModel.swift in Sources */, + FA0EDB61660E36304D170937D3E6E265 /* sensor_fusion.cpp in Sources */, + 5396AA81BA4C7EDB3EAAACE162C375CB /* serialpassthrough.cpp in Sources */, + 279408C5DE8AD34966AF3B3A1598C742 /* settings.cpp in Sources */, + F3E3FE97DA19C21FB038765C74EAD4C6 /* String+VersionCompare.swift in Sources */, + EB68F3C73FE6AA18398AD739C159AC51 /* switch.cpp in Sources */, + 3A0A8DC7DD47BFA47C94C4F215646FAF /* task.cpp in Sources */, + 532555196F2826C12EB0CF3C51501CB5 /* threadpool.cpp in Sources */, + 345BF6FAF34960268328D747B9127099 /* timer.cpp in Sources */, + 4747DB02B86DD9FE09DD3F228EEC2156 /* utils.cpp in Sources */, + 19B791AF1FFD22B9039EAA581B719C96 /* version.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9C63BE95031C70BB044F976E29B373C6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CC3DDDACE45A94222F7F2F7C8E1A4071 /* Pods-MetaWearIntegrationTests-macOS-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9C99E400A25B24C06693775A864532BE /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7BA9537BA1F552CCDC77DB0D9ABD4812 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-dummy.m in Sources */, + AEABF9567A8FA64CF00A6C93805E34F9 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - AC6E6FD4BBA54120F9B283E112CC4EBB /* Sources */ = { + A23FF08F9757A0E4D1E1F5BD45B0111B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 563AACA761BA9910780CC56C7F192FD4 /* FastCoder.m in Sources */, - F8DD67B883144E11180D0BDE15DEE0E3 /* FastCoding-tvOS-dummy.m in Sources */, + C7F87C10735B3DF63A1CB112D277E2EC /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AAAEFCF73D728077F6A88866345CC7C6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B92B621D068613EA780349591BD9E7A4 /* accelerometer.cpp in Sources */, + 61444FB82E3DB957A9A8DC3B95480107 /* accelerometer_bosch.cpp in Sources */, + B01735E3A92E193DC5F2222D8DE44AD1 /* accelerometer_mma8452q.cpp in Sources */, + 321FEB5D130F75E69F311F7A34AED3BF /* ambientlight_ltr329.cpp in Sources */, + 9830EDBFE07C39C9211E09F06A284237 /* anonymous_datasignal.cpp in Sources */, + 7FC088A24F21EEA43007179499044353 /* async_creator.cpp in Sources */, + BD7448AE1CC1ACBC4602C981B759215A /* barometer_bosch.cpp in Sources */, + 742DE3D25E5989F363D427100AFF98E5 /* Bridging.swift in Sources */, + 5EF1231CFB30051BC659871CEFC8717C /* cbindings.swift in Sources */, + 3B08EBC01B2FE50E729A05D20AA253A4 /* CBUUID.swift in Sources */, + B315B486A09D21D6880E1B092969704A /* colordetector_tcs34725.cpp in Sources */, + F2E0F3E23E5319A742DFE5237D9810FF /* conductance.cpp in Sources */, + 2057B62ECEC6E2143A286176925961D8 /* datainterpreter.cpp in Sources */, + F5E08157A0ABC9B31BD826D4F9CA3625 /* dataprocessor.cpp in Sources */, + 8874779E64CD60F7B14267D947547F93 /* dataprocessor_config.cpp in Sources */, + BD76A1A455B04BD579252F7EBA3B3CA6 /* datasignal.cpp in Sources */, + 20D2872A849400C0675296A37A79C0A2 /* debug.cpp in Sources */, + 4CB70E5EB2D9CD743C19F088E0635115 /* DeviceInformation.swift in Sources */, + 9A7A32327D53837C9A0555A0AD3F11F3 /* dfu_operations.cpp in Sources */, + 5D995E7DB472BF1862DD48C73E121C85 /* dfu_operations_details.cpp in Sources */, + F3CDF18E78DBFCA6A9A666EA4B78EE7F /* dfu_utility.cpp in Sources */, + 51AF94AD96F5C07FE95EC3CE50E83068 /* event.cpp in Sources */, + C72D53A4DA1F12A98297260644EEF781 /* file_operations.cpp in Sources */, + 32507EBDD84A7F049D8C3497F0C5C1EB /* FirmwareBuild.swift in Sources */, + 81293A375BD83F6E25A5245C3B626A5E /* FirmwareServer.swift in Sources */, + 8162ED78186BA288F5691074A1F770A7 /* gpio.cpp in Sources */, + 1FA3CD36AAC5CA43ADA03580166B8037 /* gyro_bmi160.cpp in Sources */, + B35BAD2E3E18FE673D9359AA78B78E9A /* haptic.cpp in Sources */, + 31D0801C3B3682C3D5CFAE597686B73E /* humidity_bme280.cpp in Sources */, + 88887E52B4EB869335E43EAFF85103BA /* ibeacon.cpp in Sources */, + 1672587098535D54F978BC4EE4DCD24E /* led.cpp in Sources */, + 8FEB7E7D1558815B6708DB79B9822DF0 /* LogDelegate.swift in Sources */, + E66CD81F65902A336A30F6A0F7B3815F /* logging.cpp in Sources */, + 1B005F486DFAE9D5D8CEDB0EEE7910E9 /* macro.cpp in Sources */, + FAF3A565AE3A25BB19CC9CD11C7E2636 /* magnetometer_bmm150.cpp in Sources */, + 398BD8F71A460B0F02E183446DB1BC35 /* MblMwDataSignal+Async.swift in Sources */, + EA5FC5A8C155DDC48639718240CAD5CF /* MblMwGattChar.swift in Sources */, + E8595ADBD72B735388593E95F5F53373 /* memory.cpp in Sources */, + F7110755852180DC351B752B0F992913 /* MetaBootFinder.swift in Sources */, + 6ABE0F42059EF5412505AF813F6E96AE /* MetaWear+Async.swift in Sources */, + 2741EDD9949B3A6CE69D321034682D64 /* MetaWear+LED.swift in Sources */, + FBBFC8ED7EF297D00F580DE1B36F6592 /* MetaWear+Mock.swift in Sources */, + 89F2DA5C4CBA0D97C13879B82ECFA4EC /* MetaWear-iOS-dummy.m in Sources */, + 4BFA863EF55045A95AAAFF8A0DB0CE68 /* MetaWear.swift in Sources */, + 5356E7EF8403B2A5FDCE571EC3256C6F /* metawearboard.cpp in Sources */, + F7726CDB657D1D9E258C7372365CAB2F /* MetaWearData.swift in Sources */, + 0AE13B58BDBEB25C6508FAC2012F2E7D /* MetaWearScanner.swift in Sources */, + DA753018FC14B6E885E42C302CDD7AEB /* miniz.cpp in Sources */, + 1CD5B3A0C5191CD4ADB56D6127176308 /* moduleinfo.cpp in Sources */, + 9F8C4C551B653AB3FDC4AFF59D0C7540 /* multichanneltemperature.cpp in Sources */, + 107273FDDC47418EEC9855FD8F926C5D /* neopixel.cpp in Sources */, + 1AD3C7A5F39E84B0904A7F5BF30EB3B3 /* proximity_tsl2671.cpp in Sources */, + B0F49EAD5768CBA0971708A68AAF2507 /* responseheader.cpp in Sources */, + D3C9ED46F0C3A26E2C0EE780EF00CF06 /* ScannerModel.swift in Sources */, + E2B4E4E5D884C8A4D7C9667F9D02F49F /* sensor_fusion.cpp in Sources */, + 55D41A5A87DD13CA955306BF733BD49F /* serialpassthrough.cpp in Sources */, + E31E69CBF7B993E4C8042FD4137B4217 /* settings.cpp in Sources */, + 07482C7F15253573519FB87750216A31 /* String+VersionCompare.swift in Sources */, + FAD0B4A9F307D775B363961F56BDBFEA /* switch.cpp in Sources */, + A4F82CBFBA1525702ACA91C3D39F2251 /* task.cpp in Sources */, + 5C4204F1531775064A01AF5E117F6A86 /* threadpool.cpp in Sources */, + 770F558B41EAAD6879F585D1AEACE14A /* timer.cpp in Sources */, + E69442061A59116741347A48884994EF /* utils.cpp in Sources */, + 4011A50AEF0D3CC8CB5DFAFC8467B262 /* version.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5882,198 +3412,344 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DA979A71CEF2468548B91196081D39D3 /* Sources */ = { + B31CC50D099135A887F320844A2E875D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D038B9C3B370C2A38017299D43962D9 /* Bolts-Swift-macOS-dummy.m in Sources */, + CAE9B81CB587A0032DE0A55C30A2AF14 /* Errors.swift in Sources */, + 67611705539950453B74BF7938761B9C /* Executor.swift in Sources */, + 44A5D6118DFF5DAEFC3B557DF257B32A /* Task+ContinueWith.swift in Sources */, + 558E398E75C0CFDB6DDAB6D25DB62328 /* Task+Delay.swift in Sources */, + 2E36271E6AAA86B51D49DF7717B2F6D2 /* Task+WhenAll.swift in Sources */, + DC68ACE0D1E3FA0E3BAEE02F20E1D24F /* Task+WhenAny.swift in Sources */, + E3E018DD4CB7B9AAB17D73F2FA44DE0C /* Task.swift in Sources */, + 706D99627D7A9951C56B9D4348B6843C /* TaskCompletionSource.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BB6535EA843F3E49FCD818136BA2F7AD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 73683063F9F237B23CE0BFDBDA6386A3 /* Pods-MetaWearIntegrationTests-tvOS-dummy.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C106F95810BDFB10E527FF93EF8B45C4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 42B1153290A0883081A0C3205B9026E7 /* accelerometer.cpp in Sources */, + 78EA57F0A3A10DD5D4C92A726152B90D /* accelerometer_bosch.cpp in Sources */, + 054520805BBFA832B7FE53FD654BB80F /* accelerometer_mma8452q.cpp in Sources */, + 967AECCA34C2F32F39D2A6A7145F918D /* ambientlight_ltr329.cpp in Sources */, + DC2972AE4839C4731AECB51ECED19CB2 /* anonymous_datasignal.cpp in Sources */, + C5FDC54B60E19F6A831AFFDC576DF5B3 /* async_creator.cpp in Sources */, + 21FCCB2F32EE1D30AB63CDAFDDF9A9A9 /* barometer_bosch.cpp in Sources */, + 77B3E8B47A75744FAD5E09E7B94A4ECC /* Bridging.swift in Sources */, + 9E77FC91D5556152DFE77E997C238E79 /* cbindings.swift in Sources */, + A8106BA73F74838D8887EEFDF305E625 /* CBUUID.swift in Sources */, + FD9D08C5F249C7C97877749C02F2F3AD /* colordetector_tcs34725.cpp in Sources */, + 67901822DAFCA7CCC4938EFF7F516366 /* conductance.cpp in Sources */, + 6B1257F6D62499BB1F431A1D35F4DF2F /* datainterpreter.cpp in Sources */, + 062991AEB6F794560950C95B02B457A1 /* dataprocessor.cpp in Sources */, + 174DEBD593BA773BE03532B9B3C20DED /* dataprocessor_config.cpp in Sources */, + DE2ECA2032618FF780978E58F6A61BE0 /* datasignal.cpp in Sources */, + 545DB13BCB7F96EE5DDA595082ADA324 /* debug.cpp in Sources */, + 909F49CD4C75B282B488FBC699C63ADC /* DeviceInformation.swift in Sources */, + F418D7D1A2A6881BEAD3BB91E99B3E47 /* dfu_operations.cpp in Sources */, + FEBA43A95496A95A9B4BD16E613D457D /* dfu_operations_details.cpp in Sources */, + D1A9C1E3D605A354B01E1CDF1A505105 /* dfu_utility.cpp in Sources */, + 3267FEE96516C913385FAFEF749BB450 /* event.cpp in Sources */, + 0DBEBFDB687DA26EE4693173A49908EC /* file_operations.cpp in Sources */, + 65997CAD0423697633C81FF6617E0C1A /* FirmwareBuild.swift in Sources */, + 47D8FB843F5FD2BAF6F4C9B57F5633E2 /* FirmwareServer.swift in Sources */, + 765671213DEFB44E4938FD9198618B7C /* gpio.cpp in Sources */, + 7C834E2A787C68475C59ECF36E0DB2DB /* gyro_bmi160.cpp in Sources */, + ACEB9225AAEC01EEBC4103C97D58BE2C /* haptic.cpp in Sources */, + A57B25508DF5FF563615D5F7AA2590D6 /* humidity_bme280.cpp in Sources */, + B55D525D7720158477301B2D4CC3D9A1 /* ibeacon.cpp in Sources */, + 51A1D2B4EF71C63DDD75CC442B148BEC /* led.cpp in Sources */, + E06BADD1DCA5E757DE3EF9CD9C5D2A74 /* LogDelegate.swift in Sources */, + DB6F3B0881239CDED79CD2C6DDE6EE4C /* logging.cpp in Sources */, + F4E0F588170327212ACD94EC1A99AEB5 /* macro.cpp in Sources */, + CD3CBC45D811FCDC23B39E0F165629F4 /* magnetometer_bmm150.cpp in Sources */, + FB06843ED26632876089BA157DB82AA7 /* MblMwDataSignal+Async.swift in Sources */, + C0B77B0FD59F30EF11BEED0E982C6062 /* MblMwGattChar.swift in Sources */, + 4A11D281A4E0627B4A03BD208C1AAAB6 /* memory.cpp in Sources */, + 4B9630740B31E16C50C3B4F0ED6C02F6 /* MetaBootFinder.swift in Sources */, + BB11078E22D2F727E076181AF8B2B796 /* MetaWear+Async.swift in Sources */, + 4EA92372B78E4C54B292FA723C8512FB /* MetaWear+LED.swift in Sources */, + 457B873A21AEC1DF2599BF1B7A14CB6D /* MetaWear+Mock.swift in Sources */, + 37EBA4FBD3EBC64173DC0425264D977F /* MetaWear-watchOS-dummy.m in Sources */, + 8EAE3B8FE1DA04F0141E6CC703F07144 /* MetaWear.swift in Sources */, + 9C75999A8805F350D6958BDB1A19C603 /* metawearboard.cpp in Sources */, + 4E9A62FF63E6E8148CC69E46C30500DB /* MetaWearData.swift in Sources */, + 6C05CB7640D79AE0C1222B9FA3E0221D /* MetaWearScanner.swift in Sources */, + 88B26EFC4A62586425232E2517442849 /* miniz.cpp in Sources */, + 7A38F216AF9F0705471FC7EBC50369B4 /* moduleinfo.cpp in Sources */, + 134543FC08B009EB5026D47545DCC5EF /* multichanneltemperature.cpp in Sources */, + 02AB64E502F9A9EF117A7D2AB68BE58C /* neopixel.cpp in Sources */, + 19493FE53FBC0349A6491E11D79528D7 /* proximity_tsl2671.cpp in Sources */, + C7A996347A4FB05B58F0DFA736DED6A3 /* responseheader.cpp in Sources */, + 2772B8E432BE2AE610EBBE6683C67743 /* ScannerModel.swift in Sources */, + 6B0123BC9297E2485D54AAD996A36461 /* sensor_fusion.cpp in Sources */, + 1A906790CC19D6D64BE3BB624FD1176E /* serialpassthrough.cpp in Sources */, + 38387EC8709BB0210C48B6345A106A91 /* settings.cpp in Sources */, + 989DE089BE83EA7B201B67075D142AA2 /* String+VersionCompare.swift in Sources */, + 294FE0B06ED735B246B141915C04D680 /* switch.cpp in Sources */, + 915E95A0594A89F095DE18B6A39F4F6D /* task.cpp in Sources */, + FB4873AF916365CE32A4AE52E1991D0B /* threadpool.cpp in Sources */, + 6AF5794401BCDAE5A6677BD0D1DB48B7 /* timer.cpp in Sources */, + 317E9110C50E297CC750F560EB3ACAD2 /* utils.cpp in Sources */, + 3D83894DECE428C112EF4C46141EF126 /* version.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DAC83625FA29211F26E3FE3A0F501B38 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 25438E9EE2B4EDC394BB5DBAFD50B679 /* FastCoder.m in Sources */, - 5B26278E4C33DA300DCA4AE70B95063A /* FastCoding-macOS-dummy.m in Sources */, + 85A103EC8E68772031CB908A4243A97A /* accelerometer.cpp in Sources */, + D18E2516EF84F955BB8336C18296FA29 /* accelerometer_bosch.cpp in Sources */, + 14B706C083E0D5A44278480175898619 /* accelerometer_mma8452q.cpp in Sources */, + CC8619A168F5A9C76286DDD794E55CB6 /* ambientlight_ltr329.cpp in Sources */, + 4B617EA448E61DE985EB4D7C78EC0D02 /* anonymous_datasignal.cpp in Sources */, + C501C9E20770C26CCA271DF918B12D91 /* async_creator.cpp in Sources */, + A47A42011D17D98CD7792082278BAB5E /* barometer_bosch.cpp in Sources */, + 95BB9D4337234C03966F7F995B7F7153 /* Bridging.swift in Sources */, + 544E44C0C78BA3365DC013733B73FA5A /* cbindings.swift in Sources */, + 11727EF90C340A635E11848D165FE30A /* CBUUID.swift in Sources */, + 82E82A5CFF152F1A1877702C647B9110 /* colordetector_tcs34725.cpp in Sources */, + B33167B6F1208E49E23D9A5BAF419082 /* conductance.cpp in Sources */, + 4B9F300A52764A458F776111A48D6578 /* datainterpreter.cpp in Sources */, + 219DA9A0068170DAA023F821B2115E2D /* dataprocessor.cpp in Sources */, + C560CC1FCDA3D2EE734CDD149E53E01C /* dataprocessor_config.cpp in Sources */, + 1F00C1506045CFEABFEA88E8CE4661AF /* datasignal.cpp in Sources */, + 7E3F159AB86026B30F63F3777017866C /* debug.cpp in Sources */, + EEEF71D7C58BAE0A244AD1079E688A1D /* DeviceInformation.swift in Sources */, + 772083F7FE581ADBDB15469FE93E49F3 /* dfu_operations.cpp in Sources */, + 47C0559939831E764DD5897E39F0F30A /* dfu_operations_details.cpp in Sources */, + E0B02E62102FF74A10AFA5DB01661057 /* dfu_utility.cpp in Sources */, + 89B6C3F8FE2F41EEC0F832B1D59C37E6 /* event.cpp in Sources */, + E4FBCD96DF4E7E09B188268ACA361C66 /* file_operations.cpp in Sources */, + 38B1E3C4A74925A3B5F127EC33F53092 /* FirmwareBuild.swift in Sources */, + D7D9F28E6E985D2EE47A29428C2B57B8 /* FirmwareServer.swift in Sources */, + 4A2279DE11FE96D58BECB824427A1514 /* gpio.cpp in Sources */, + B8E5D7484F8E9BD7FCF0AE39306CF4F0 /* gyro_bmi160.cpp in Sources */, + CB1486626A089D813569D5FB3067A31A /* haptic.cpp in Sources */, + DF73B4E79727C3668C8C4BCEC18A3DF5 /* humidity_bme280.cpp in Sources */, + C12752C9A61442A71AC0184FC29F6647 /* ibeacon.cpp in Sources */, + 586E59A87C29C4437B77A37F01CD08F5 /* led.cpp in Sources */, + BD2783E59749C2AFB470F0AB17084039 /* LogDelegate.swift in Sources */, + 9D67428C1B4B311494E11494566CD67F /* logging.cpp in Sources */, + A4034414F66538426C228D71E3DE987F /* macro.cpp in Sources */, + 18C85A0DA4C0DADA7717340BAA8E6C1A /* magnetometer_bmm150.cpp in Sources */, + 78095301A94ADC38ABAA05262E25165A /* MblMwDataSignal+Async.swift in Sources */, + 2CB0A314AEEA7C89F227565D2B06392C /* MblMwGattChar.swift in Sources */, + 054FF6A96DC602324A1825B8493E89B3 /* memory.cpp in Sources */, + FF25E41B845E454E3AAF96DA14B8378F /* MetaBootFinder.swift in Sources */, + 84EAF7FC7DBF55C6D8D33EA352CDACD5 /* MetaWear+Async.swift in Sources */, + A52DB41F56C7AD7A6E6312C6B2CAAF44 /* MetaWear+LED.swift in Sources */, + 8E99BB2AC7561100C11DABEB94DC9593 /* MetaWear+Mock.swift in Sources */, + DE047809918299C6AFE534C8526FAC56 /* MetaWear-tvOS-dummy.m in Sources */, + 1D87C5ED9698C64CAA668885A2543AB4 /* MetaWear.swift in Sources */, + A30DF96726955F571749D2EFD0C542E1 /* metawearboard.cpp in Sources */, + 66DC56910770B8DD6CCE73616C28FF89 /* MetaWearData.swift in Sources */, + FEA52351D46AC22D3023A4253395C3AD /* MetaWearScanner.swift in Sources */, + 75FD38260945A474EA3C0332446C08F7 /* miniz.cpp in Sources */, + 9139CD3EBF1F304003500D92B0AB5221 /* moduleinfo.cpp in Sources */, + 807A8B0535B108D0EEC5C0EF4324F310 /* multichanneltemperature.cpp in Sources */, + 115FB1F17742F888D8A825FDC4BECF9B /* neopixel.cpp in Sources */, + 72E07A34CD9387D8A3D5CCA95B1312F3 /* proximity_tsl2671.cpp in Sources */, + F3798B49BF33A15078C552F74050E4B7 /* responseheader.cpp in Sources */, + F1B92955BA24324F77BEED6BBDC67AC2 /* ScannerModel.swift in Sources */, + C01505BC08809AC8901AA940D45E3288 /* sensor_fusion.cpp in Sources */, + 9C659CB4CF0940FC1057C046BC2C685A /* serialpassthrough.cpp in Sources */, + A5BCD65354B56BE915D580BF2C1B11CB /* settings.cpp in Sources */, + CD03F503944388F3C1E22841FBF51C97 /* String+VersionCompare.swift in Sources */, + 51CC2CB6AA43566B3758DA2A5916485F /* switch.cpp in Sources */, + 97EC9B6B9D1633FE8380D11BC523590E /* task.cpp in Sources */, + 83CDE0D3C64C3F8E0444DEB6B8B9CA4A /* threadpool.cpp in Sources */, + 9EEA095A1F42056B9D9E4874ABB090B3 /* timer.cpp in Sources */, + 94E57C1C705C6E554AD68F1A2F46FEB9 /* utils.cpp in Sources */, + 4A163C5378137EA216670C598ADD9839 /* version.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - E3C6DA299066A729C0B6410D98C33AFC /* Sources */ = { + E244A48ACFC423444B26D2E57E4B4326 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4E10585FFDE73A5A32F26F74246BC412 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-dummy.m in Sources */, + 8CDBCE46BEE7ABD1E58EEAE1B19EA8C7 /* Bolts-Swift-iOS-dummy.m in Sources */, + 84AF0DAFE2FECBAF83A804323488EA8E /* Errors.swift in Sources */, + 49DE6A9DAFB4D84F3B2DC9DF56EF79F1 /* Executor.swift in Sources */, + EB2FA25E219327C62D3640B26C9215A6 /* Task+ContinueWith.swift in Sources */, + 9A90C6CFA64219E2A19250AFD48CEFAE /* Task+Delay.swift in Sources */, + 7DC07F76B8133E5B18D94E90084D4905 /* Task+WhenAll.swift in Sources */, + EF17C7D424539599B55417410D131AC4 /* Task+WhenAny.swift in Sources */, + 97397FFE16EE3B02C0753B3D3AF89500 /* Task.swift in Sources */, + EB225BEDE5CB70EC7A03AB6C991BE0EC /* TaskCompletionSource.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - F6C43E73930CFCB810611E1647974D12 /* Sources */ = { + E6FE6D03C51B176D4A140C7512B6DA4F /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 9C45496F8DE1C75D431DD74BFBC14E1E /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-dummy.m in Sources */, + F9218689969864875E6BB46199319806 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FB9D8559345AF64666D887C62EC8A6C2 /* Sources */ = { + E953C624138966117535F939BFD65DA4 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5466835F96ACCB738F4799F906FEC98F /* FastCoder.m in Sources */, - DD98F8E8F994FE7FD1C78C4001CA8B5C /* FastCoding-iOS-dummy.m in Sources */, + 2DCE7704FD965864FCD1D4E4D3311BCB /* Pods-MetaWearIntegrationTests-iOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 068E7B1E100C2A95848CA2670B6F03CC /* PBXTargetDependency */ = { + 05E4B4BE29AADD9C3F9466871F5B6B2F /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "Zip-iOS"; target = F57306538B475B533545EE22C423E8EB /* Zip-iOS */; - targetProxy = 5289F5919DE1D3660573C77CBD10CDBB /* PBXContainerItemProxy */; + targetProxy = 4F81A551D5A6D98B80CE4657397F5EC8 /* PBXContainerItemProxy */; }; - 082614C16D1626C70031445962D599C5 /* PBXTargetDependency */ = { + 0B689CCAAE0CDFC76F8DD16C97893D16 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "FastCoding-tvOS"; - target = 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */; - targetProxy = 6705EE3E357A241852DE964187ED70E3 /* PBXContainerItemProxy */; - }; - 0D6BF654FC12FB2DA039E47BADD95613 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bolts-iOS"; - target = BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */; - targetProxy = 70FDF7E738FB11FA0FCB69E0B6147C52 /* PBXContainerItemProxy */; - }; - 0DF0D8219C1F7F2C149F8CE309EA015B /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FastCoding-macOS"; - target = 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */; - targetProxy = 0B52C7A6F916FFC354D4BB8618A80AE7 /* PBXContainerItemProxy */; - }; - 280D3AB9B1CBD5F26A25D0C9561D84D7 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FastCoding-iOS"; - target = E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */; - targetProxy = 328A0862F35BEFFB88A48A770BDC574B /* PBXContainerItemProxy */; + name = "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS"; + target = AD70FE1E93D40666D1ECF65358AE5515 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS */; + targetProxy = 7B305125E3EBCFB826BB4FC804FA137A /* PBXContainerItemProxy */; }; - 28EBD82FFE9A73BC2458E6EB26287621 /* PBXTargetDependency */ = { + 14C8FCE8A34E3579CC2A6354A14C730A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "FastCoding-macOS"; - target = 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */; - targetProxy = A8607D1C973697027D00FF4EEDA0F150 /* PBXContainerItemProxy */; + name = "MetaWear-tvOS"; + target = 1CF10E2AEEEB932120CC7181BD88C40C /* MetaWear-tvOS */; + targetProxy = 0A03F56C0BBE464F822860EC1EBBD7E2 /* PBXContainerItemProxy */; }; - 2E21A543CE7221A38EC06D1FE6A5E4D7 /* PBXTargetDependency */ = { + 1FB0394C7F3E00D5DB3D0CCC6AFA953B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Bolts-iOS"; - target = BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */; - targetProxy = 9CC9AD1AB418E49DD3277B9CEBCB2B13 /* PBXContainerItemProxy */; + name = "MetaWear-tvOS"; + target = 1CF10E2AEEEB932120CC7181BD88C40C /* MetaWear-tvOS */; + targetProxy = 3C6EBA196C0AF8334AEF9897D4B977F0 /* PBXContainerItemProxy */; }; - 381CCA2DA42947BD9177AF69FDC162E5 /* PBXTargetDependency */ = { + 39A18E45FEEE422E3FA583E189EEAC7A /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "MetaWearPrivate-macOS"; - target = E4C8A5130851E57DDABD17C30B3C75EF /* MetaWearPrivate-macOS */; - targetProxy = EC051370563EE8194F7EE52B86CCA91F /* PBXContainerItemProxy */; + name = "Bolts-Swift-iOS"; + target = 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */; + targetProxy = 65A19ED4033CAA93D85F9394E7560B6D /* PBXContainerItemProxy */; }; - 41995563A0F99758772002637709AE9E /* PBXTargetDependency */ = { + 3E326EF0A8496D3B103892FA5D1BA5EC /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "FastCoding-iOS"; - target = E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */; - targetProxy = A2AC400FD31BCC12622D5DD9E553D513 /* PBXContainerItemProxy */; + name = "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS"; + target = 35939192463050DFECFB86564016D871 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS */; + targetProxy = F8CCF6B54A8CF4018E6B35C09F8EF932 /* PBXContainerItemProxy */; }; - 47B3AE863117C7637968594440B9FAF0 /* PBXTargetDependency */ = { + 3E6A5A31D92D268199A6B6F69D30A915 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "MetaWearPrivate-iOS"; - target = 28835C651012C7B6AE21E36DC39BE97A /* MetaWearPrivate-iOS */; - targetProxy = AAE942D01BE8F06EDF07D2CC37862544 /* PBXContainerItemProxy */; + name = "MetaWear-macOS"; + target = E1A2C54E075045370CF68755E67F5C6F /* MetaWear-macOS */; + targetProxy = 9AB32DA1A9FFFC180AC39946F9E7B34C /* PBXContainerItemProxy */; }; - 47D90ABF36FA76D3B6F27A933A01B50F /* PBXTargetDependency */ = { + 5CFA5D849D38FEA9A515E313ABB3BBEE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "MetaWearPrivate-macOS"; - target = E4C8A5130851E57DDABD17C30B3C75EF /* MetaWearPrivate-macOS */; - targetProxy = 51E5FC8F20F0180F3F39EB3A314BC0E2 /* PBXContainerItemProxy */; + name = "Zip-iOS"; + target = F57306538B475B533545EE22C423E8EB /* Zip-iOS */; + targetProxy = 1879B032529D92714459BFBEABE4EA9E /* PBXContainerItemProxy */; }; - 48D97E753E2C40350618FDB70C4DD14E /* PBXTargetDependency */ = { + 6B1910B8621AF2E511BC2D958A653172 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "iOSDFULibrary-iOS"; - target = AA3C39426CBD48108BC3ABCF231AC2DE /* iOSDFULibrary-iOS */; - targetProxy = 0827BA9EE49A71078AB2DC803EC52213 /* PBXContainerItemProxy */; + name = "Bolts-Swift-tvOS"; + target = 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */; + targetProxy = 25F451D83A5AB85B1B507B1D894A4C48 /* PBXContainerItemProxy */; }; - 4DEC3F7F15D00FF9C5EF2783A2FB3601 /* PBXTargetDependency */ = { + 751287751C2F7BBDFAF625DDEB6E628B /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "FastCoding-iOS"; - target = E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */; - targetProxy = 2584C09FF19AC2245AFF5FD048108EA2 /* PBXContainerItemProxy */; + name = "Bolts-Swift-iOS"; + target = 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */; + targetProxy = F0F16FE856841D01C0E643771A88697D /* PBXContainerItemProxy */; }; - 5958DEB8144CECCE3C1338C06EBF662F /* PBXTargetDependency */ = { + 803A8ED2E3AF0B9B1727EF4B9EF0E4D2 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "FastCoding-tvOS"; - target = 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */; - targetProxy = A256A2F26723F4FBA060A740AA640E3B /* PBXContainerItemProxy */; + name = "Bolts-Swift-watchOS"; + target = 43AE0570AE9E038422E2E5E9A9BB0140 /* Bolts-Swift-watchOS */; + targetProxy = C8C18EC0AA3B465C13E3A2F473B161ED /* PBXContainerItemProxy */; }; - 5CFA5D849D38FEA9A515E313ABB3BBEE /* PBXTargetDependency */ = { + 88EDC18B67EEB21EDF48B05F11E0871F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Zip-iOS"; - target = F57306538B475B533545EE22C423E8EB /* Zip-iOS */; - targetProxy = 1879B032529D92714459BFBEABE4EA9E /* PBXContainerItemProxy */; + name = "Bolts-Swift-macOS"; + target = ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */; + targetProxy = 5863FF661E211D401694AE726135EFF6 /* PBXContainerItemProxy */; }; - 6006985220B1C890774F5A71982B1B1E /* PBXTargetDependency */ = { + 8EDE7CA1BC5276C209E050170504BA93 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Bolts-macOS"; - target = B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */; - targetProxy = 7F6949543922F753BC050F5987DBABF8 /* PBXContainerItemProxy */; + name = "MetaWear-iOS"; + target = FBCDB923BFEC9B087B78F572C6D26ABF /* MetaWear-iOS */; + targetProxy = 2E3F2D5254BF770423235A8D3123A61F /* PBXContainerItemProxy */; }; - 7825DC439165683D84A184A5AC3FF02E /* PBXTargetDependency */ = { + 9182A5D3785187D0202BF5067804865F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Bolts-tvOS"; - target = 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */; - targetProxy = BBE0A67BE8C6F6F8DF1DA2EF1E57444F /* PBXContainerItemProxy */; + name = "MetaWear-watchOS"; + target = D17D869CD175A025630F4E3D5BD9CB32 /* MetaWear-watchOS */; + targetProxy = DD8F918CBB1C83F2B78933D170DC3CFA /* PBXContainerItemProxy */; }; - 95138348E99E97A167B45C76BE33020D /* PBXTargetDependency */ = { + 9221CED58005C987C92889C4FFB2F65D /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Bolts-iOS"; - target = BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */; - targetProxy = 1EFD053252655D50BF69AB4135E424E5 /* PBXContainerItemProxy */; + name = "Bolts-Swift-tvOS"; + target = 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */; + targetProxy = 07D9FFE142062341B7EC749CAF7477EA /* PBXContainerItemProxy */; }; - A0CD2DE5137306D167F4355594F047A1 /* PBXTargetDependency */ = { + A7B27C3AAD5052C626D095A8C3204867 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Bolts-macOS"; - target = B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */; - targetProxy = 8D5A5037269951B72B96576AC2260ACD /* PBXContainerItemProxy */; + name = "MetaWear-macOS"; + target = E1A2C54E075045370CF68755E67F5C6F /* MetaWear-macOS */; + targetProxy = E06EA9E91C2D2B33F99EDEC815BC802B /* PBXContainerItemProxy */; }; - A4A6A08D4608F768C1F6545F38C498BD /* PBXTargetDependency */ = { + AB2617EC3C05774B94AF2337E5B2BE16 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "MetaWearPrivate-iOS"; - target = 28835C651012C7B6AE21E36DC39BE97A /* MetaWearPrivate-iOS */; - targetProxy = 2FF1C68E6C0B1733D6490A40E3965285 /* PBXContainerItemProxy */; + name = "Bolts-Swift-macOS"; + target = ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */; + targetProxy = 2BB83536BE03B40018D7C48BE08413DC /* PBXContainerItemProxy */; }; - B19664E6B8CCE6B0A609115FECE94390 /* PBXTargetDependency */ = { + B4F74C9D04B2980A8863C2582F9EFBEE /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "MetaWearPrivate-tvOS"; - target = 9913C873BD8A170381970D996D45827A /* MetaWearPrivate-tvOS */; - targetProxy = F47769296D590D44DA3A377F6233D10D /* PBXContainerItemProxy */; + name = "iOSDFULibrary-iOS"; + target = AA3C39426CBD48108BC3ABCF231AC2DE /* iOSDFULibrary-iOS */; + targetProxy = 0AE9A03071422A172CD99A1E9C2E7FD1 /* PBXContainerItemProxy */; }; - B4B01B63CE5D01122301B2B07CA32359 /* PBXTargetDependency */ = { + BCF770EC99CC441D0488D50C6DFCB766 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Zip-macOS"; - target = 581D3B58E73E74943B0B279158A37B4B /* Zip-macOS */; - targetProxy = F90FEB466C10460996EE628EAC85EEEB /* PBXContainerItemProxy */; + name = "Bolts-Swift-macOS"; + target = ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */; + targetProxy = 20BCC5CD831A1178AF1AEA4DED636CB0 /* PBXContainerItemProxy */; }; - CD3958FF8B2AC93358211B4C7B955ABD /* PBXTargetDependency */ = { + C345F426E075136A2D82BA866B3BDFBD /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "FastCoding-tvOS"; - target = 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */; - targetProxy = F1E97D9345197EF8F73D545C6A49F224 /* PBXContainerItemProxy */; + name = "Bolts-Swift-tvOS"; + target = 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */; + targetProxy = 4D84659AE95C7D4B2EFB470EEF57501F /* PBXContainerItemProxy */; }; - D01B8013EF4475431215D03E218BE776 /* PBXTargetDependency */ = { + E1785ABE531BA624AF32887EEA0E5D20 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "MetaWearPrivate-tvOS"; - target = 9913C873BD8A170381970D996D45827A /* MetaWearPrivate-tvOS */; - targetProxy = F837663636BE9BAABCFFD6B352F772D5 /* PBXContainerItemProxy */; + name = "MetaWear-iOS"; + target = FBCDB923BFEC9B087B78F572C6D26ABF /* MetaWear-iOS */; + targetProxy = 9F49822A316868D63A2AC763E8073B37 /* PBXContainerItemProxy */; }; - D50C31AA67479FAA3B5999A82282B29F /* PBXTargetDependency */ = { + E5524CE7CA7286A87F2169010E8B86D9 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "FastCoding-macOS"; - target = 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */; - targetProxy = 0B6B69CB1ECC5DDA5BA03176A2C94A33 /* PBXContainerItemProxy */; + name = "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS"; + target = 9DBFFED0D32FB704EBBE05B279730169 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS */; + targetProxy = BC89D64D40D6DA77D23DD051DFFA15B0 /* PBXContainerItemProxy */; }; - D69DB36828D23B09F0B0BDD6500CDEC6 /* PBXTargetDependency */ = { + EBE57F65497DC291F159BFC758190F7F /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Bolts-macOS"; - target = B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */; - targetProxy = 272CBDDAD8A2AD7B6A0165AE63D224F4 /* PBXContainerItemProxy */; + name = "Bolts-Swift-iOS"; + target = 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */; + targetProxy = 25953C50C67F2120A5CCE5B4CF329862 /* PBXContainerItemProxy */; }; F3176AEFB2095A5F79A0022F0BA42CA0 /* PBXTargetDependency */ = { isa = PBXTargetDependency; @@ -6081,278 +3757,69 @@ target = 581D3B58E73E74943B0B279158A37B4B /* Zip-macOS */; targetProxy = 963B7C1EC6008DBF76CE345E5A5E43C8 /* PBXContainerItemProxy */; }; - F4070B9B276286415D6C79E495803C8F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bolts-tvOS"; - target = 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */; - targetProxy = 49F366AFC0C226E5CE6EC482861E7AFB /* PBXContainerItemProxy */; - }; - FC078648D2607E265E01298B5028429F /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bolts-tvOS"; - target = 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */; - targetProxy = DC7FED3EE5B722B3EC74541DE88DC82A /* PBXContainerItemProxy */; - }; - FF6CE430298C3594D38F5A8F42AAB514 /* PBXTargetDependency */ = { + FA5C9463360660FC055D003BEBE4B605 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "iOSDFULibrary-macOS"; target = 9389CEE263723AA7A1038CEC838D4720 /* iOSDFULibrary-macOS */; - targetProxy = 48D712D3BA7FF013BA9F996DDD01DE43 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 06164384E150378D74110A72B709E479 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 606066652CE57A58078BEACCA8C31CDA /* FastCoding-tvOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-tvOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap"; - PRODUCT_NAME = FastCoding; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 063B4501F86D79398017365DFFC040FD /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FC4EDA409628927FB17680F4F9C569F2 /* Bolts-macOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-macOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; - MODULEMAP_FILE = "Target Support Files/Bolts-macOS/Bolts-macOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = macosx; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 09B7AED6184F6164C604FCC158AB0279 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4908104AEC6A7B88734A8D4E5AA92C6D /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 14AA845DF9D4BC2501D72949C97AD93B /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 77B18F36C85923BD0966BB5B3F4366C5 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; + targetProxy = AA664B84214C6225D65422A7EAD9D864 /* PBXContainerItemProxy */; }; - 2868BF004E4D1DF5D237A8F89241CBA5 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 76CF7D71EF15010446A78E798B39A0CE /* MetaWearPrivate-tvOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWearPrivate-tvOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.modulemap"; - PRODUCT_NAME = MetaWear; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; + FA9FDE169E0FD0F9261BA05C26BAE2D6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Zip-macOS"; + target = 581D3B58E73E74943B0B279158A37B4B /* Zip-macOS */; + targetProxy = 011CB45E024B018400CFE831A7BF4707 /* PBXContainerItemProxy */; }; - 2BFB091189788BD90A7D969F34D7CFEC /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_NO_COMMON_BLOCKS = YES; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = NO; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - SWIFT_VERSION = 4.0; - SYMROOT = "${SRCROOT}/../build"; - TVOS_DEPLOYMENT_TARGET = 10.0; - }; - name = Release; + FFB41562821C6674D5DE1765CFC9D624 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Bolts-Swift-watchOS"; + target = 43AE0570AE9E038422E2E5E9A9BB0140 /* Bolts-Swift-watchOS */; + targetProxy = C12C156D61CCEEF2B32DE43760FA9401 /* PBXContainerItemProxy */; }; - 2E0069C26322CAA6557E395E44BB9618 /* Release */ = { +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 05856CE4205CE42799B2E70BE78E671B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = C926B3FBE54B3DF99DD7B12C0402933C /* Pods-MetaWearIntegrationTests-iOS.release.xcconfig */; + baseConfigurationReference = 116203619F58C987920002EE6B37CE6E /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-iOS/Info.plist"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.modulemap"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWearIntegrationTests_iOS; - SDKROOT = iphoneos; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 3301EB268405386C17EF933272BDD6D6 /* Debug */ = { + 063C81A774D01D12D091481DB4092034 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BBC4EE879733B6643D4330B3DC8C441E /* MetaWearPrivate-macOS.xcconfig */; + baseConfigurationReference = 97FE0428CAC266D6962FC0DDA09AE0C1 /* iOSDFULibrary-macOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6364,24 +3831,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWearPrivate-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/iOSDFULibrary-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.modulemap"; - PRODUCT_NAME = MetaWear; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS.modulemap"; + PRODUCT_MODULE_NAME = iOSDFULibrary; + PRODUCT_NAME = iOSDFULibrary; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 476EB22030480C6B1C7A78ABA17DB9D6 /* Release */ = { + 0CB7666ED0517D9064AB225F9EDC9059 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7DCFCC9F3CE0E98A2FB7A289FAADE29C /* Bolts-iOS.xcconfig */; + baseConfigurationReference = 95445EEF9E827EC8E9F63E655AF31BA2 /* MetaWear-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6392,26 +3862,28 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-iOS/Bolts-iOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 484AAC9084430EDF334AC86DD02BB878 /* Release */ = { + 1E1871A1B63C2E0E74FD606B294E6BA5 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4114264FBB639E4DDB300CBAB7ECF23B /* iOSDFULibrary-iOS.xcconfig */; + baseConfigurationReference = FCC7F155A239579A1A9EDA4B5235E7D8 /* iOSDFULibrary-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6428,11 +3900,13 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/iOSDFULibrary-iOS/iOSDFULibrary-iOS.modulemap"; + PRODUCT_MODULE_NAME = iOSDFULibrary; PRODUCT_NAME = iOSDFULibrary; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -6440,39 +3914,11 @@ }; name = Release; }; - 4CA1594DED754565B69E9EE81B3F3C7D /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FE6E81CB78094B771484EE152018C0A1 /* MetaWearPrivate-iOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWearPrivate-iOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.modulemap"; - PRODUCT_NAME = MetaWear; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 4D1F16802117F4BB4A5FE412696AE9A2 /* Debug */ = { + 25F43B047C6AD69E9175810C1E6D27AE /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8266A1A9F7A6E2E88A09CECB83CCBEEE /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */; + baseConfigurationReference = A7CFC9099267EC880772C85661A5D2BE /* Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6482,18 +3928,19 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; @@ -6501,9 +3948,9 @@ }; name = Debug; }; - 4D9ACCF1557CE2503CCF25E15551D4A1 /* Debug */ = { + 2F774356B359C21F013E91955A0FDCE3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4114264FBB639E4DDB300CBAB7ECF23B /* iOSDFULibrary-iOS.xcconfig */; + baseConfigurationReference = FCC7F155A239579A1A9EDA4B5235E7D8 /* iOSDFULibrary-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6520,21 +3967,25 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/iOSDFULibrary-iOS/iOSDFULibrary-iOS.modulemap"; + PRODUCT_MODULE_NAME = iOSDFULibrary; PRODUCT_NAME = iOSDFULibrary; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 4FF3864B344558EB6B209FD5F42D350F /* Debug */ = { + 35A41B7A012CAEE6A223B869DF925BE4 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF9F74DB820671AFBE5EF84A20FFF98A /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig */; + baseConfigurationReference = 9A25E726BBBDC42DAD5305F6AC627028 /* Pods-MetaWearIntegrationTests-iOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6544,29 +3995,33 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 5289D52196B26BC71C42DD645DB95F88 /* Release */ = { + 35AAD9AF311AA3DD8906C99AC69D0338 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 074A291A191B13334260DE0EA07DE8F7 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig */; + baseConfigurationReference = 8380A1EF78B30ECA6F9BB67B1FC6B8DD /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6585,21 +4040,61 @@ OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_tvOS_MetaWearUnitTests_tvOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 10.0; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; + }; + 377B45A282D5D16D69D4C2A1A65AFC8E /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 17F9BC4775B3AC83A4B5A3EC8D1A0219 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + APPLICATION_EXTENSION_API_ONLY = YES; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = watchos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 4; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 4.0; + }; + name = Debug; }; - 564492BCF1CFEC60CED2DB03F8CB634E /* Release */ = { + 44B82B37A8EFD8D27197CAA4BCCDF0D9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5DA6D487C81E989C28B492074E5CB4C7 /* FastCoding-macOS.xcconfig */; + baseConfigurationReference = 79554846837812E127D72A9CB268E4CF /* Bolts-Swift-macOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6611,25 +4106,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.6; - MODULEMAP_FILE = "Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap"; - PRODUCT_NAME = FastCoding; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 59D354A4E379FDC96DBAC31324A8E6BE /* Debug */ = { + 4A6D839EF900CC60EF291B1584C3274F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A447138E6A37AE547D765D9B8ADC109F /* Bolts-tvOS.xcconfig */; + baseConfigurationReference = 429E6E3CF69870B5E4953FA8F6091C74 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6639,119 +4138,138 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-tvOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap"; - PRODUCT_NAME = Bolts; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; + TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 5BBDBB0CCE5690CF6191EC03D693DEB2 /* Release */ = { + 527420D395238EBB38226CD6E0EE5C0D /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FE6E81CB78094B771484EE152018C0A1 /* MetaWearPrivate-iOS.xcconfig */; + baseConfigurationReference = F6BADB08B39E768D55996606A798F6EC /* Zip-macOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWearPrivate-iOS/Info.plist"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/Zip-macOS/Zip-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Zip-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.modulemap"; - PRODUCT_NAME = MetaWear; - SDKROOT = iphoneos; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MODULEMAP_FILE = "Target Support Files/Zip-macOS/Zip-macOS.modulemap"; + PRODUCT_MODULE_NAME = Zip; + PRODUCT_NAME = Zip; + SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 642C5FC6BC837B54DB3273B90BCD9E13 /* Debug */ = { + 5FCA504CB5F714BEA047CAA12E2C4062 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 97FE0428CAC266D6962FC0DDA09AE0C1 /* iOSDFULibrary-macOS.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/iOSDFULibrary-macOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS.modulemap"; + PRODUCT_MODULE_NAME = iOSDFULibrary; + PRODUCT_NAME = iOSDFULibrary; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; - SYMROOT = "${SRCROOT}/../build"; - TVOS_DEPLOYMENT_TARGET = 10.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + 652D990111E646AD4F3F7321DB027579 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C5C9D3C7F4ED6D71887257593DC39FAE /* Pods-MetaWearIntegrationTests-macOS.release.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-macOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 65CFCE1B4CE29E9154278BCAACD44A60 /* Release */ = { + 67F67D92DCE8F884A0370F5ED6C80029 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A447138E6A37AE547D765D9B8ADC109F /* Bolts-tvOS.xcconfig */; + baseConfigurationReference = 94D6646C95EC7CE601758BE1A79E9ED6 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6761,56 +4279,65 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-tvOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = appletvos; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 6A334C687D0E4F81B03CFF18F99115C6 /* Release */ = { + 74C577DFE651F38763E27B6D4AB95252 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 606066652CE57A58078BEACCA8C31CDA /* FastCoding-tvOS.xcconfig */; + baseConfigurationReference = 53AF414AABC51FADC5F04FC9948ED862 /* MetaWear-macOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-tvOS/Info.plist"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-macOS/MetaWear-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap"; - PRODUCT_NAME = FastCoding; - SDKROOT = appletvos; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "Target Support Files/MetaWear-macOS/MetaWear-macOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 6C1EA68E7626C0911CCC1F39BBED3BB3 /* Debug */ = { + 7DDC54DE3FCE0CE920E0B418CE5F5473 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCC9170647CEAB49B708B47C9BD11B38 /* Zip-iOS.xcconfig */; + baseConfigurationReference = BE4E8BF5B5B1A1B4DE5D8C356701F76D /* Bolts-Swift-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6821,27 +4348,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Zip-iOS/Zip-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Zip-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Zip-iOS/Zip-iOS.modulemap"; - PRODUCT_NAME = Zip; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 6EEC9367BFD89608BFBB5FE52B257551 /* Release */ = { + 7FC74E62E14B0212F9174C3DF5991A60 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BCC9170647CEAB49B708B47C9BD11B38 /* Zip-iOS.xcconfig */; + baseConfigurationReference = D4EE2A9ECB28B9A3D098F32D9DF9290F /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6851,27 +4382,30 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Zip-iOS/Zip-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Zip-iOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Zip-iOS/Zip-iOS.modulemap"; - PRODUCT_NAME = Zip; - SDKROOT = iphoneos; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 77A1260D73498A3D53C430836CFC87AA /* Release */ = { + 7FDAE721BB351D0DC5F24AC0AB59001C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 382E9746B809B1165AE88FD8D3C60520 /* Zip-macOS.xcconfig */; + baseConfigurationReference = F6BADB08B39E768D55996606A798F6EC /* Zip-macOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6890,20 +4424,24 @@ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.9; MODULEMAP_FILE = "Target Support Files/Zip-macOS/Zip-macOS.modulemap"; + PRODUCT_MODULE_NAME = Zip; PRODUCT_NAME = Zip; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 79B7C732F5FDE78248498CFF80B3264D /* Release */ = { + 8D3B2EE92A3BC01EEB58198235ED7CBD /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 3316317DA6A7A83F1DABCD1D09831A1B /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig */; + baseConfigurationReference = 0AD9B4AE96B9446885844A4DB4245B2B /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6913,30 +4451,33 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS; - SDKROOT = appletvos; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - 7E6443FDB0A3A518DC52639A8793EED3 /* Debug */ = { + 91DD9CF689A9D0087EFE3F4649C68F5B /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED7F0459D000BE9D78FF3F5B0B65825E /* FastCoding-iOS.xcconfig */; + baseConfigurationReference = EDF35CC36FE684CAFD7BE8D93CAA0A22 /* MetaWear-watchOS.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6946,26 +4487,32 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-watchOS/MetaWear-watchOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-watchOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap"; - PRODUCT_NAME = FastCoding; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/MetaWear-watchOS/MetaWear-watchOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = watchos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 4; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 4.0; }; - name = Debug; + name = Release; }; - 844C99E5806C1E55AEE9A586DD7BA873 /* Debug */ = { + 973A91C90F8B00E111413389B89CDDF3 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 27CC639E6DE536C6F9FDEBCB0AFFEA31 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig */; + baseConfigurationReference = 6983CD1C0A1B54CA11B21A351889624C /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6981,57 +4528,153 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.13; MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + A0E8BBFDB7A2B0C0D11604F8B120E43D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + TVOS_DEPLOYMENT_TARGET = 10.0; + WATCHOS_DEPLOYMENT_TARGET = 4.0; + }; + name = Release; + }; + A2C90BE306767F71B14A8CEB2B3A0FCC /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = BE4E8BF5B5B1A1B4DE5D8C356701F76D /* Bolts-Swift-iOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-iOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 8BE4F7A5BA3E6E6C07D097B9EE5D69C2 /* Release */ = { + A784B6D0DBFB51111D9977B84B8C2226 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 637B0F3AD7EDFEA1AA5FF86CD752B8AF /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig */; + baseConfigurationReference = 0587D668F7D25D72E9A821CDEAFCB48B /* Bolts-Swift-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_macOS_MetaWearIntegrationTestHost_macOS; - SDKROOT = macosx; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; + SDKROOT = appletvos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - 975E89F4FF36CC45E2212FB5156543E0 /* Debug */ = { + AB4168977FFBF01BDF5CE155AA9F9BDF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB441AC5891DDB749070A4DEC74B4B13 /* iOSDFULibrary-macOS.xcconfig */; + baseConfigurationReference = 79554846837812E127D72A9CB268E4CF /* Bolts-Swift-macOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7043,25 +4686,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/iOSDFULibrary-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS.modulemap"; - PRODUCT_NAME = iOSDFULibrary; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 9E10F8764CA8A54E78038875A2061F98 /* Release */ = { + BA8D2966395230C1F5F815F0EA0FB711 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = ED7F0459D000BE9D78FF3F5B0B65825E /* FastCoding-iOS.xcconfig */; + baseConfigurationReference = 95445EEF9E827EC8E9F63E655AF31BA2 /* MetaWear-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7072,27 +4717,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap"; - PRODUCT_NAME = FastCoding; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - A69AC55FD2360FA20CFFE7343EBA8147 /* Release */ = { + BBBC344D8217AF2F9ABC97E752EF0B36 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 76CF7D71EF15010446A78E798B39A0CE /* MetaWearPrivate-tvOS.xcconfig */; + baseConfigurationReference = 4F30EDFE01E5E1B640B4A32654D0F155 /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7102,15 +4751,20 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWearPrivate-tvOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.modulemap"; - PRODUCT_NAME = MetaWear; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 10.0; VALIDATE_PRODUCT = YES; @@ -7119,9 +4773,9 @@ }; name = Release; }; - B238D53029171B7F70CF8923DA6D22F0 /* Debug */ = { + C0FFAA3CA7A57BEEB54AD578E314CE0C /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7DCFCC9F3CE0E98A2FB7A289FAADE29C /* Bolts-iOS.xcconfig */; + baseConfigurationReference = 0587D668F7D25D72E9A821CDEAFCB48B /* Bolts-Swift-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -7132,119 +4786,173 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-iOS/Bolts-iOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - B39104C80A0E3581B7C976AFAC3B5D80 /* Release */ = { + C7738645CF06732CB4851C0A2B6FBD37 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BBC4EE879733B6643D4330B3DC8C441E /* MetaWearPrivate-macOS.xcconfig */; + baseConfigurationReference = EDF35CC36FE684CAFD7BE8D93CAA0A22 /* MetaWear-watchOS.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWearPrivate-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-watchOS/MetaWear-watchOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-watchOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.modulemap"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MetaWear-watchOS/MetaWear-watchOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; PRODUCT_NAME = MetaWear; - SDKROOT = macosx; + SDKROOT = watchos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 4; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 4.0; + }; + name = Debug; + }; + CB76983288FBAB080BEECBCCD19594A4 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3679B8DC5C009AE10D92C7FF0C6B4EDB /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig */; + buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - BD801D6A5F37D4615BD9FEAD997354EF /* Release */ = { + CD4FFE437E8A72844940702476143C03 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 8E865202A724C2E7CA60627742396A26 /* Pods-MetaWearIntegrationTests-tvOS.release.xcconfig */; + baseConfigurationReference = C743D0A5845E523BA1629F6197814983 /* Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Info.plist"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.modulemap"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWearIntegrationTests_tvOS; - SDKROOT = appletvos; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = macosx; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - VALIDATE_PRODUCT = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - BE517AE944551992C7F8D07639332747 /* Debug */ = { + CE67E2EDEE10BD49C21FCF941ED3988F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC4EDA409628927FB17680F4F9C569F2 /* Bolts-macOS.xcconfig */; + baseConfigurationReference = 0F8706FC56F8FB1387E55C7D75725857 /* MetaWear-iOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; - MODULEMAP_FILE = "Target Support Files/Bolts-macOS/Bolts-macOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = macosx; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - C397548CDAD3A82E822CCBD31B625AD4 /* Debug */ = { + D007B521B4D2C3259F8704DB4D2AEBE6 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 096AC0C7692D6AFC9F02212305518A51 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig */; + baseConfigurationReference = 505657139C15274AA9DFFA6B200D42D7 /* Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7260,24 +4968,28 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.13; MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_macOS_MetaWearUnitTests_macOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - D096959C1EAA5266A8EDB6016FB4C13C /* Debug */ = { + D0D291BB0FBE34A811084E2C84DDEB16 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = E2A407E8B8FCC68152BFE4827C4D30C3 /* Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig */; + baseConfigurationReference = 0F8706FC56F8FB1387E55C7D75725857 /* MetaWear-iOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7287,60 +4999,64 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWearIntegrationTests_tvOS; - SDKROOT = appletvos; + MODULEMAP_FILE = "Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = iphoneos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - DBCD579D24EC8EDA9E714958F9CB0326 /* Debug */ = { + DBF5916A8447B255B94BE1901259DDCC /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 5DA6D487C81E989C28B492074E5CB4C7 /* FastCoding-macOS.xcconfig */; + baseConfigurationReference = 29A92F6A0289BED184257ACBD3631DAE /* Zip-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Zip-iOS/Zip-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Zip-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.6; - MODULEMAP_FILE = "Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap"; - PRODUCT_NAME = FastCoding; - SDKROOT = macosx; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Zip-iOS/Zip-iOS.modulemap"; + PRODUCT_MODULE_NAME = Zip; + PRODUCT_NAME = Zip; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - E247065B6AC9EC46A29BA84F40548A49 /* Debug */ = { + E06F5D167E06F337999BAEF3E2E11FD5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BB2393946755F5852638E025B4E4DCAE /* Pods-MetaWearIntegrationTests-macOS.debug.xcconfig */; + baseConfigurationReference = 857A49B325CE1FC467136648CDD25462 /* Pods-MetaWearIntegrationTests-macOS.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7356,26 +5072,28 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.13; MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWearIntegrationTests_macOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - E6AD0D3BD65142C46811DE8E6CB05692 /* Release */ = { + E5460A9161390BDE64AE4BF618E70218 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4A6F1CE1F4BCDD73772EF425AE6D9585 /* Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig */; + baseConfigurationReference = 19DE09EF16EFF2FD031FEC717665CC11 /* Bolts-Swift-watchOS.xcconfig */; buildSettings = { + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7385,30 +5103,66 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-watchOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_iOS_MetaWearUnitTests_iOS; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; + SDKROOT = watchos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 4; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Release; }; - E925757903C711423EA7C3C6491D69B7 /* Release */ = { + E98B88315E91004E06A62366E655BC2C /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 53AF414AABC51FADC5F04FC9948ED862 /* MetaWear-macOS.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-macOS/MetaWear-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-macOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "Target Support Files/MetaWear-macOS/MetaWear-macOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + EC07D0CA9236149E58D979F0A0890A69 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 1D2105D11274EFFCEC9477E527479DDD /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig */; + baseConfigurationReference = 81546B48ED29178160B847633CA7BD47 /* Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7420,7 +5174,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.modulemap"; @@ -7428,9 +5182,11 @@ OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_iOS_MetaWearIntegrationTestHost_iOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; @@ -7438,11 +5194,11 @@ }; name = Release; }; - EEBF943BA3D20F18ECB91BF13C9ABFEA /* Debug */ = { + EE4AE2696EB56812BCD45E2963D07339 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EC3D3272810170DC75367A98CF7776DB /* Pods-MetaWearIntegrationTests-iOS.debug.xcconfig */; + baseConfigurationReference = 19DE09EF16EFF2FD031FEC717665CC11 /* Bolts-Swift-watchOS.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7452,128 +5208,202 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-watchOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWearIntegrationTests_iOS; - SDKROOT = iphoneos; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; + SDKROOT = watchos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - TARGETED_DEVICE_FAMILY = "1,2"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 4; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 2.0; }; name = Debug; }; - F3C119A1C90A9C32EA5A47E6B7AEA55D /* Release */ = { + EF6CE9D7225B084FEB180340FA978E63 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 08A30E73050089FE33EF3E462555FFA5 /* Pods-MetaWearIntegrationTests-macOS.release.xcconfig */; + baseConfigurationReference = 10757DFF6BCC73CD3C6A2ADBCA5F960F /* Pods-MetaWearIntegrationTests-iOS.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-macOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWearIntegrationTests_macOS; - SDKROOT = macosx; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - F4A74622CD13C894702CBD44F534EA62 /* Release */ = { + F08C7E3776F8E41D0079A47BC3942DF1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FB441AC5891DDB749070A4DEC74B4B13 /* iOSDFULibrary-macOS.xcconfig */; + baseConfigurationReference = F2AEC1BD8F817359114D5C3E968702D0 /* Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/iOSDFULibrary-macOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.10; - MODULEMAP_FILE = "Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS.modulemap"; - PRODUCT_NAME = iOSDFULibrary; - SDKROOT = macosx; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - F647BBAE7945349E41567A56A3A41E7D /* Debug */ = { + F0E858D3D6AE0D60DA939A61AE29D5F6 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SYMROOT = "${SRCROOT}/../build"; + TVOS_DEPLOYMENT_TARGET = 10.0; + WATCHOS_DEPLOYMENT_TARGET = 4.0; + }; + name = Debug; + }; + FC963433F8AC61C515BCF92EC4F7A441 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 382E9746B809B1165AE88FD8D3C60520 /* Zip-macOS.xcconfig */; + baseConfigurationReference = 29A92F6A0289BED184257ACBD3631DAE /* Zip-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Zip-macOS/Zip-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Zip-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Zip-iOS/Zip-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Zip-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.9; - MODULEMAP_FILE = "Target Support Files/Zip-macOS/Zip-macOS.modulemap"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Zip-iOS/Zip-iOS.modulemap"; + PRODUCT_MODULE_NAME = Zip; PRODUCT_NAME = Zip; - SDKROOT = macosx; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - F86A7DE942E4DAFD6E4D66E88A91983B /* Debug */ = { + FCCD9A4009A19052216079FB32D79C26 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6F9197F2BE7F3786B0E3EA0800869EFC /* Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig */; + baseConfigurationReference = E89668BE7C1318F60E25D8D1162DC9A4 /* Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + APPLICATION_EXTENSION_API_ONLY = YES; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -7583,105 +5413,108 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_MetaWear_MetaWear_tvOS_MetaWearIntegrationTestHost_tvOS; - SDKROOT = appletvos; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = watchos; SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 4; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; + WATCHOS_DEPLOYMENT_TARGET = 4.0; }; - name = Debug; + name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1D0004B7C8634CA30AE87A84B60F0E6B /* Build configuration list for PBXNativeTarget "Bolts-macOS" */ = { + 051034339FF10B32F97909F260E192BE /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension" */ = { isa = XCConfigurationList; buildConfigurations = ( - BE517AE944551992C7F8D07639332747 /* Debug */, - 063B4501F86D79398017365DFFC040FD /* Release */, + 377B45A282D5D16D69D4C2A1A65AFC8E /* Debug */, + FCCD9A4009A19052216079FB32D79C26 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 21252E6CE3D099A3BE867C48DE81CB0E /* Build configuration list for PBXNativeTarget "Bolts-tvOS" */ = { + 071A10B196E9783245454CBC28C105D8 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 59D354A4E379FDC96DBAC31324A8E6BE /* Debug */, - 65CFCE1B4CE29E9154278BCAACD44A60 /* Release */, + 4A6D839EF900CC60EF291B1584C3274F /* Debug */, + BBBC344D8217AF2F9ABC97E752EF0B36 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 26A1736923C57EC134F968A76066E464 /* Build configuration list for PBXNativeTarget "Zip-macOS" */ = { + 1C97800C9B2F46D708BB7632FF922019 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - F647BBAE7945349E41567A56A3A41E7D /* Debug */, - 77A1260D73498A3D53C430836CFC87AA /* Release */, + 35AAD9AF311AA3DD8906C99AC69D0338 /* Debug */, + F08C7E3776F8E41D0079A47BC3942DF1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 295ECAA9B3954089BEFDC23B1D2C2730 /* Build configuration list for PBXNativeTarget "Bolts-iOS" */ = { + 1E0D707402CA1F63E60BDEC50D3F5F4C /* Build configuration list for PBXNativeTarget "Bolts-Swift-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - B238D53029171B7F70CF8923DA6D22F0 /* Debug */, - 476EB22030480C6B1C7A78ABA17DB9D6 /* Release */, + 44B82B37A8EFD8D27197CAA4BCCDF0D9 /* Debug */, + AB4168977FFBF01BDF5CE155AA9F9BDF /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 26A1736923C57EC134F968A76066E464 /* Build configuration list for PBXNativeTarget "Zip-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 642C5FC6BC837B54DB3273B90BCD9E13 /* Debug */, - 2BFB091189788BD90A7D969F34D7CFEC /* Release */, + 527420D395238EBB38226CD6E0EE5C0D /* Debug */, + 7FDAE721BB351D0DC5F24AC0AB59001C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 409DF430E10DE59723D94565356B7AA8 /* Build configuration list for PBXNativeTarget "FastCoding-macOS" */ = { + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - DBCD579D24EC8EDA9E714958F9CB0326 /* Debug */, - 564492BCF1CFEC60CED2DB03F8CB634E /* Release */, + F0E858D3D6AE0D60DA939A61AE29D5F6 /* Debug */, + A0E8BBFDB7A2B0C0D11604F8B120E43D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 427E8B32BB67876357C2FEBFEF955F38 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS" */ = { + 328B030FE1165BD98FDF24AA99CE5098 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4D1F16802117F4BB4A5FE412696AE9A2 /* Debug */, - 5289D52196B26BC71C42DD645DB95F88 /* Release */, + 67F67D92DCE8F884A0370F5ED6C80029 /* Debug */, + EC07D0CA9236149E58D979F0A0890A69 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 5FCDD95567D866067ED4FA76F99BA54B /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS" */ = { + 46923D72229C62A82BADAD675DD9D0AC /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - F86A7DE942E4DAFD6E4D66E88A91983B /* Debug */, - 79B7C732F5FDE78248498CFF80B3264D /* Release */, + EF6CE9D7225B084FEB180340FA978E63 /* Debug */, + 35A41B7A012CAEE6A223B869DF925BE4 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 60CB6BA1F7B001BEAC398F7DD550F6EB /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-iOS" */ = { + 6D25BE908A11A8DFF086E4DC69A4C498 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - EEBF943BA3D20F18ECB91BF13C9ABFEA /* Debug */, - 2E0069C26322CAA6557E395E44BB9618 /* Release */, + 973A91C90F8B00E111413389B89CDDF3 /* Debug */, + CD4FFE437E8A72844940702476143C03 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -7689,125 +5522,125 @@ 6F6615574989E1153960BD7419F45732 /* Build configuration list for PBXNativeTarget "Zip-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 6C1EA68E7626C0911CCC1F39BBED3BB3 /* Debug */, - 6EEC9367BFD89608BFBB5FE52B257551 /* Release */, + FC963433F8AC61C515BCF92EC4F7A441 /* Debug */, + DBF5916A8447B255B94BE1901259DDCC /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 8851B39D3FDAEB8C7A7D176C91EE797E /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS" */ = { + 70767C4BFAC315DA2508DCCB9C16C286 /* Build configuration list for PBXNativeTarget "MetaWear-watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - C397548CDAD3A82E822CCBD31B625AD4 /* Debug */, - 14AA845DF9D4BC2501D72949C97AD93B /* Release */, + C7738645CF06732CB4851C0A2B6FBD37 /* Debug */, + 91DD9CF689A9D0087EFE3F4649C68F5B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 977B070BE951745F89FD4BFF8AD984F7 /* Build configuration list for PBXNativeTarget "MetaWearPrivate-tvOS" */ = { + 7A99F8984F0AF2939FF62BFC08A6045A /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 2868BF004E4D1DF5D237A8F89241CBA5 /* Debug */, - A69AC55FD2360FA20CFFE7343EBA8147 /* Release */, + 25F43B047C6AD69E9175810C1E6D27AE /* Debug */, + 7FC74E62E14B0212F9174C3DF5991A60 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A09C3B4F80C8FB5757D543CE4106ADCD /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-tvOS" */ = { + 7B28A40CD46B75284864D77B8591DDD8 /* Build configuration list for PBXNativeTarget "MetaWear-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - D096959C1EAA5266A8EDB6016FB4C13C /* Debug */, - BD801D6A5F37D4615BD9FEAD997354EF /* Release */, + D0D291BB0FBE34A811084E2C84DDEB16 /* Debug */, + CE67E2EDEE10BD49C21FCF941ED3988F /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B1E2792ED12E5DC3D7604184C0D72737 /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-macOS" */ = { + 8571E09CFAF4D6DA510E6A8182A011D3 /* Build configuration list for PBXNativeTarget "MetaWear-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - E247065B6AC9EC46A29BA84F40548A49 /* Debug */, - F3C119A1C90A9C32EA5A47E6B7AEA55D /* Release */, + 0CB7666ED0517D9064AB225F9EDC9059 /* Debug */, + BA8D2966395230C1F5F815F0EA0FB711 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - B9842587D68AF02206041939E54C4BD7 /* Build configuration list for PBXNativeTarget "iOSDFULibrary-iOS" */ = { + 965F1DF3D567AD276B40466A5FE67385 /* Build configuration list for PBXNativeTarget "MetaWear-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4D9ACCF1557CE2503CCF25E15551D4A1 /* Debug */, - 484AAC9084430EDF334AC86DD02BB878 /* Release */, + E98B88315E91004E06A62366E655BC2C /* Debug */, + 74C577DFE651F38763E27B6D4AB95252 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BE63B01EC2E9EDE2D6F2E2ED0A2B78D4 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS" */ = { + 9C641F7A558089295E023DBC26F033A8 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 844C99E5806C1E55AEE9A586DD7BA873 /* Debug */, - 8BE4F7A5BA3E6E6C07D097B9EE5D69C2 /* Release */, + D007B521B4D2C3259F8704DB4D2AEBE6 /* Debug */, + 05856CE4205CE42799B2E70BE78E671B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - BFCF6718D822EF3B49C9D16E304BB183 /* Build configuration list for PBXNativeTarget "iOSDFULibrary-macOS" */ = { + A76123B13374DEB714801D51707DFF8A /* Build configuration list for PBXNativeTarget "Bolts-Swift-watchOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 975E89F4FF36CC45E2212FB5156543E0 /* Debug */, - F4A74622CD13C894702CBD44F534EA62 /* Release */, + EE4AE2696EB56812BCD45E2963D07339 /* Debug */, + E5460A9161390BDE64AE4BF618E70218 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C1BAFA6DF62F72E7F34D56E69C8D6CC6 /* Build configuration list for PBXNativeTarget "FastCoding-iOS" */ = { + B9842587D68AF02206041939E54C4BD7 /* Build configuration list for PBXNativeTarget "iOSDFULibrary-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7E6443FDB0A3A518DC52639A8793EED3 /* Debug */, - 9E10F8764CA8A54E78038875A2061F98 /* Release */, + 2F774356B359C21F013E91955A0FDCE3 /* Debug */, + 1E1871A1B63C2E0E74FD606B294E6BA5 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D1193726905C957D99D8331B471F0480 /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS" */ = { + BFCF6718D822EF3B49C9D16E304BB183 /* Build configuration list for PBXNativeTarget "iOSDFULibrary-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 09B7AED6184F6164C604FCC158AB0279 /* Debug */, - E6AD0D3BD65142C46811DE8E6CB05692 /* Release */, + 5FCA504CB5F714BEA047CAA12E2C4062 /* Debug */, + 063C81A774D01D12D091481DB4092034 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D1F4E3E3C0A78CF1DCF1FDDA908A3C9C /* Build configuration list for PBXNativeTarget "MetaWearPrivate-iOS" */ = { + C15248F9A568EEF86060A82785EBEB09 /* Build configuration list for PBXNativeTarget "Bolts-Swift-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4CA1594DED754565B69E9EE81B3F3C7D /* Debug */, - 5BBDBB0CCE5690CF6191EC03D693DEB2 /* Release */, + A2C90BE306767F71B14A8CEB2B3A0FCC /* Debug */, + 7DDC54DE3FCE0CE920E0B418CE5F5473 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - D75ADFF3CA2C855E2C240F7340ADB3FF /* Build configuration list for PBXNativeTarget "FastCoding-tvOS" */ = { + C639184846A9E6F594B835BCD9A3CF93 /* Build configuration list for PBXNativeTarget "Pods-MetaWearIntegrationTests-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 06164384E150378D74110A72B709E479 /* Debug */, - 6A334C687D0E4F81B03CFF18F99115C6 /* Release */, + E06F5D167E06F337999BAEF3E2E11FD5 /* Debug */, + 652D990111E646AD4F3F7321DB027579 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - E101A7BC9BEC1599D17C52C72C1BE387 /* Build configuration list for PBXNativeTarget "MetaWearPrivate-macOS" */ = { + E4A6F070BCD73543FD7F22BD026494C8 /* Build configuration list for PBXNativeTarget "Bolts-Swift-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3301EB268405386C17EF933272BDD6D6 /* Debug */, - B39104C80A0E3581B7C976AFAC3B5D80 /* Release */, + A784B6D0DBFB51111D9977B84B8C2226 /* Debug */, + C0FFAA3CA7A57BEEB54AD578E314CE0C /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - EAC4CC993034F896B9B84262454F21DB /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS" */ = { + F70BA197CE481A4ACFBCDC223D2FB2EC /* Build configuration list for PBXNativeTarget "Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 4FF3864B344558EB6B209FD5F42D350F /* Debug */, - E925757903C711423EA7C3C6491D69B7 /* Release */, + CB76983288FBAB080BEECBCCD19594A4 /* Debug */, + 8D3B2EE92A3BC01EEB58198235ED7CBD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m new file mode 100644 index 0000000..744176b --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts_Swift_iOS : NSObject +@end +@implementation PodsDummy_Bolts_Swift_iOS +@end diff --git a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch rename to MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch diff --git a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-umbrella.h similarity index 62% rename from StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch rename to MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-umbrella.h index beb2a24..7acccef 100644 --- a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-umbrella.h @@ -10,3 +10,7 @@ #endif #endif + +FOUNDATION_EXPORT double BoltsSwiftVersionNumber; +FOUNDATION_EXPORT const unsigned char BoltsSwiftVersionString[]; + diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap new file mode 100644 index 0000000..3f8322f --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap @@ -0,0 +1,6 @@ +framework module BoltsSwift { + umbrella header "Bolts-Swift-iOS-umbrella.h" + + export * + module * { export * } +} diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig new file mode 100644 index 0000000..5dbf909 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts-Swift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/FastCoding-iOS/Info.plist b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Info.plist similarity index 96% rename from MetaWear/Pods/Target Support Files/FastCoding-iOS/Info.plist rename to MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Info.plist index 160d676..b6b2813 100644 --- a/MetaWear/Pods/Target Support Files/FastCoding-iOS/Info.plist +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-iOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 3.2.2 + 1.3.0 CFBundleSignature ???? CFBundleVersion diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m new file mode 100644 index 0000000..ee545cf --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts_Swift_macOS : NSObject +@end +@implementation PodsDummy_Bolts_Swift_macOS +@end diff --git a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch rename to MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch diff --git a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-umbrella.h b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h similarity index 59% rename from MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-umbrella.h rename to MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h index 3a89654..f09b19c 100644 --- a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-umbrella.h +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h @@ -10,8 +10,7 @@ #endif #endif -#import "FastCoder.h" -FOUNDATION_EXPORT double FastCodingVersionNumber; -FOUNDATION_EXPORT const unsigned char FastCodingVersionString[]; +FOUNDATION_EXPORT double BoltsSwiftVersionNumber; +FOUNDATION_EXPORT const unsigned char BoltsSwiftVersionString[]; diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap new file mode 100644 index 0000000..3be9eae --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap @@ -0,0 +1,6 @@ +framework module BoltsSwift { + umbrella header "Bolts-Swift-macOS-umbrella.h" + + export * + module * { export * } +} diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig new file mode 100644 index 0000000..016ea0d --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig @@ -0,0 +1,10 @@ +CODE_SIGN_IDENTITY = +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts-Swift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/Bolts-iOS/Info.plist b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Info.plist similarity index 96% rename from MetaWear/Pods/Target Support Files/Bolts-iOS/Info.plist rename to MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Info.plist index db9e5d8..b6b2813 100644 --- a/MetaWear/Pods/Target Support Files/Bolts-iOS/Info.plist +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-macOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.8.4 + 1.3.0 CFBundleSignature ???? CFBundleVersion diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m new file mode 100644 index 0000000..610d2b1 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts_Swift_tvOS : NSObject +@end +@implementation PodsDummy_Bolts_Swift_tvOS +@end diff --git a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch rename to MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h new file mode 100644 index 0000000..7acccef --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double BoltsSwiftVersionNumber; +FOUNDATION_EXPORT const unsigned char BoltsSwiftVersionString[]; + diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap new file mode 100644 index 0000000..e1dd470 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap @@ -0,0 +1,6 @@ +framework module BoltsSwift { + umbrella header "Bolts-Swift-tvOS-umbrella.h" + + export * + module * { export * } +} diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig new file mode 100644 index 0000000..6b00bea --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts-Swift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/Bolts-macOS/Info.plist b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Info.plist similarity index 96% rename from MetaWear/Pods/Target Support Files/Bolts-macOS/Info.plist rename to MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Info.plist index db9e5d8..b6b2813 100644 --- a/MetaWear/Pods/Target Support Files/Bolts-macOS/Info.plist +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-tvOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.8.4 + 1.3.0 CFBundleSignature ???? CFBundleVersion diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-dummy.m b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-dummy.m new file mode 100644 index 0000000..0e3d3aa --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts_Swift_watchOS : NSObject +@end +@implementation PodsDummy_Bolts_Swift_watchOS +@end diff --git a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-prefix.pch similarity index 83% rename from StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch rename to MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-prefix.pch index 082f8af..e33fc32 100644 --- a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-prefix.pch @@ -1,5 +1,5 @@ #ifdef __OBJC__ -#import +#import #else #ifndef FOUNDATION_EXPORT #if defined(__cplusplus) diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-umbrella.h b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-umbrella.h new file mode 100644 index 0000000..a489149 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double BoltsSwiftVersionNumber; +FOUNDATION_EXPORT const unsigned char BoltsSwiftVersionString[]; + diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.modulemap b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.modulemap new file mode 100644 index 0000000..dd411cf --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.modulemap @@ -0,0 +1,6 @@ +framework module BoltsSwift { + umbrella header "Bolts-Swift-watchOS-umbrella.h" + + export * + module * { export * } +} diff --git a/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.xcconfig b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.xcconfig new file mode 100644 index 0000000..c13c8b5 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Bolts-Swift-watchOS.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-watchOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts-Swift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Info.plist b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Info.plist similarity index 96% rename from MetaWear/Pods/Target Support Files/Bolts-tvOS/Info.plist rename to MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Info.plist index db9e5d8..b6b2813 100644 --- a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Info.plist +++ b/MetaWear/Pods/Target Support Files/Bolts-Swift-watchOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.8.4 + 1.3.0 CFBundleSignature ???? CFBundleVersion diff --git a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-dummy.m b/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-dummy.m deleted file mode 100644 index 0893b48..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Bolts_iOS : NSObject -@end -@implementation PodsDummy_Bolts_iOS -@end diff --git a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-umbrella.h b/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-umbrella.h deleted file mode 100644 index 61c8a40..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-umbrella.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" -#import "BFCancellationTokenSource.h" -#import "BFExecutor.h" -#import "BFTask+Exceptions.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "Bolts.h" - -FOUNDATION_EXPORT double BoltsVersionNumber; -FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; - diff --git a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.modulemap b/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.modulemap deleted file mode 100644 index db2b046..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts-iOS-umbrella.h" - - export * - module * { export * } -} diff --git a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.xcconfig b/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.xcconfig deleted file mode 100644 index a42f182..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-dummy.m b/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-dummy.m deleted file mode 100644 index 8c5fb2a..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Bolts_macOS : NSObject -@end -@implementation PodsDummy_Bolts_macOS -@end diff --git a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-umbrella.h b/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-umbrella.h deleted file mode 100644 index 5becf56..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-umbrella.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" -#import "BFCancellationTokenSource.h" -#import "BFExecutor.h" -#import "BFTask+Exceptions.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "Bolts.h" - -FOUNDATION_EXPORT double BoltsVersionNumber; -FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; - diff --git a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.modulemap b/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.modulemap deleted file mode 100644 index 150ef2c..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts-macOS-umbrella.h" - - export * - module * { export * } -} diff --git a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.xcconfig b/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.xcconfig deleted file mode 100644 index 731d7b2..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-dummy.m b/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-dummy.m deleted file mode 100644 index 6e34fe8..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Bolts_tvOS : NSObject -@end -@implementation PodsDummy_Bolts_tvOS -@end diff --git a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-umbrella.h b/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-umbrella.h deleted file mode 100644 index 61c8a40..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-umbrella.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" -#import "BFCancellationTokenSource.h" -#import "BFExecutor.h" -#import "BFTask+Exceptions.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "Bolts.h" - -FOUNDATION_EXPORT double BoltsVersionNumber; -FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; - diff --git a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap b/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap deleted file mode 100644 index 33bc224..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts-tvOS-umbrella.h" - - export * - module * { export * } -} diff --git a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.xcconfig b/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.xcconfig deleted file mode 100644 index 7d188a4..0000000 --- a/MetaWear/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-dummy.m b/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-dummy.m deleted file mode 100644 index 7d6642f..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FastCoding_iOS : NSObject -@end -@implementation PodsDummy_FastCoding_iOS -@end diff --git a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-umbrella.h b/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-umbrella.h deleted file mode 100644 index 5852db1..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FastCoder.h" - -FOUNDATION_EXPORT double FastCodingVersionNumber; -FOUNDATION_EXPORT const unsigned char FastCodingVersionString[]; - diff --git a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap b/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap deleted file mode 100644 index 748b4a1..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FastCoding { - umbrella header "FastCoding-iOS-umbrella.h" - - export * - module * { export * } -} diff --git a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.xcconfig b/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.xcconfig deleted file mode 100644 index d66c902..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FastCoding -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-dummy.m b/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-dummy.m deleted file mode 100644 index c26d48b..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FastCoding_macOS : NSObject -@end -@implementation PodsDummy_FastCoding_macOS -@end diff --git a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap b/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap deleted file mode 100644 index d488a54..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FastCoding { - umbrella header "FastCoding-macOS-umbrella.h" - - export * - module * { export * } -} diff --git a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.xcconfig b/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.xcconfig deleted file mode 100644 index a5be12f..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FastCoding -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/FastCoding-macOS/Info.plist b/MetaWear/Pods/Target Support Files/FastCoding-macOS/Info.plist deleted file mode 100644 index 160d676..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-macOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.2.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-dummy.m b/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-dummy.m deleted file mode 100644 index 7a27272..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FastCoding_tvOS : NSObject -@end -@implementation PodsDummy_FastCoding_tvOS -@end diff --git a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-umbrella.h b/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-umbrella.h deleted file mode 100644 index 5852db1..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FastCoder.h" - -FOUNDATION_EXPORT double FastCodingVersionNumber; -FOUNDATION_EXPORT const unsigned char FastCodingVersionString[]; - diff --git a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap b/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap deleted file mode 100644 index a932e5c..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FastCoding { - umbrella header "FastCoding-tvOS-umbrella.h" - - export * - module * { export * } -} diff --git a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.xcconfig b/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.xcconfig deleted file mode 100644 index ef99a06..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FastCoding -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/Info.plist b/MetaWear/Pods/Target Support Files/FastCoding-tvOS/Info.plist deleted file mode 100644 index 160d676..0000000 --- a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.2.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/MetaWear/Pods/Target Support Files/MetaWear-iOS/Info.plist b/MetaWear/Pods/Target Support Files/MetaWear-iOS/Info.plist new file mode 100644 index 0000000..4522675 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-iOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-dummy.m b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-dummy.m new file mode 100644 index 0000000..ac05091 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MetaWear_iOS : NSObject +@end +@implementation PodsDummy_MetaWear_iOS +@end diff --git a/MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch rename to MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch diff --git a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-umbrella.h similarity index 63% rename from StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch rename to MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-umbrella.h index beb2a24..47e16ae 100644 --- a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch +++ b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-umbrella.h @@ -10,3 +10,7 @@ #endif #endif + +FOUNDATION_EXPORT double MetaWearVersionNumber; +FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; + diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.modulemap b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap similarity index 56% rename from MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.modulemap rename to MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap index 44e9f19..0e15b0c 100644 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.modulemap +++ b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap @@ -1,5 +1,5 @@ framework module MetaWear { - umbrella header "MetaWearPrivate-iOS-umbrella.h" + umbrella header "MetaWear-iOS-umbrella.h" export * module * { export * } diff --git a/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.xcconfig b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.xcconfig new file mode 100644 index 0000000..2318419 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +OTHER_LDFLAGS = -framework "CoreBluetooth" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +SWIFT_VERSION = 4.0 diff --git a/MetaWear/Pods/Target Support Files/MetaWear-macOS/Info.plist b/MetaWear/Pods/Target Support Files/MetaWear-macOS/Info.plist new file mode 100644 index 0000000..4522675 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-macOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-dummy.m b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-dummy.m new file mode 100644 index 0000000..4efd653 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MetaWear_macOS : NSObject +@end +@implementation PodsDummy_MetaWear_macOS +@end diff --git a/MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch rename to MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-prefix.pch diff --git a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-umbrella.h similarity index 63% rename from StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch rename to MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-umbrella.h index 082f8af..c609c4e 100644 --- a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch +++ b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-umbrella.h @@ -10,3 +10,7 @@ #endif #endif + +FOUNDATION_EXPORT double MetaWearVersionNumber; +FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; + diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.modulemap b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.modulemap similarity index 55% rename from MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.modulemap rename to MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.modulemap index 60621a1..7c961d6 100644 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.modulemap +++ b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.modulemap @@ -1,5 +1,5 @@ framework module MetaWear { - umbrella header "MetaWearPrivate-tvOS-umbrella.h" + umbrella header "MetaWear-macOS-umbrella.h" export * module * { export * } diff --git a/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.xcconfig b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.xcconfig new file mode 100644 index 0000000..74ff1cb --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.xcconfig @@ -0,0 +1,15 @@ +CODE_SIGN_IDENTITY = +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +OTHER_LDFLAGS = -framework "CoreBluetooth" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +SWIFT_VERSION = 4.0 diff --git a/MetaWear/Pods/Target Support Files/MetaWear-tvOS/Info.plist b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/Info.plist new file mode 100644 index 0000000..4522675 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-dummy.m b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-dummy.m new file mode 100644 index 0000000..0d07bf3 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MetaWear_tvOS : NSObject +@end +@implementation PodsDummy_MetaWear_tvOS +@end diff --git a/MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch rename to MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch diff --git a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-umbrella.h similarity index 63% rename from StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch rename to MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-umbrella.h index beb2a24..47e16ae 100644 --- a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch +++ b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-umbrella.h @@ -10,3 +10,7 @@ #endif #endif + +FOUNDATION_EXPORT double MetaWearVersionNumber; +FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; + diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.modulemap b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap similarity index 55% rename from MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.modulemap rename to MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap index 850651c..e928159 100644 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.modulemap +++ b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap @@ -1,5 +1,5 @@ framework module MetaWear { - umbrella header "MetaWearPrivate-macOS-umbrella.h" + umbrella header "MetaWear-tvOS-umbrella.h" export * module * { export * } diff --git a/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.xcconfig b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.xcconfig new file mode 100644 index 0000000..d9737c9 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +OTHER_LDFLAGS = -framework "CoreBluetooth" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +SWIFT_VERSION = 4.0 diff --git a/MetaWear/Pods/Target Support Files/MetaWear-watchOS/Info.plist b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/Info.plist new file mode 100644 index 0000000..4522675 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 3.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-dummy.m b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-dummy.m new file mode 100644 index 0000000..0f134f8 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_MetaWear_watchOS : NSObject +@end +@implementation PodsDummy_MetaWear_watchOS +@end diff --git a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-prefix.pch similarity index 83% rename from StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch rename to MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-prefix.pch index beb2a24..e33fc32 100644 --- a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch +++ b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-prefix.pch @@ -1,5 +1,5 @@ #ifdef __OBJC__ -#import +#import #else #ifndef FOUNDATION_EXPORT #if defined(__cplusplus) diff --git a/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-umbrella.h b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-umbrella.h new file mode 100644 index 0000000..34cbd56 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double MetaWearVersionNumber; +FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; + diff --git a/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS.modulemap b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS.modulemap new file mode 100644 index 0000000..4066de4 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS.modulemap @@ -0,0 +1,6 @@ +framework module MetaWear { + umbrella header "MetaWear-watchOS-umbrella.h" + + export * + module * { export * } +} diff --git a/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS.xcconfig b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS.xcconfig new file mode 100644 index 0000000..b216bcf --- /dev/null +++ b/MetaWear/Pods/Target Support Files/MetaWear-watchOS/MetaWear-watchOS.xcconfig @@ -0,0 +1,14 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-watchOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-watchOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +HEADER_SEARCH_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +OTHER_LDFLAGS = -framework "CoreBluetooth" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +SWIFT_VERSION = 4.0 diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/Info.plist b/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/Info.plist deleted file mode 100644 index 6bb2a2f..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.10.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-dummy.m b/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-dummy.m deleted file mode 100644 index b15491c..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_MetaWearPrivate_iOS : NSObject -@end -@implementation PodsDummy_MetaWearPrivate_iOS -@end diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-umbrella.h b/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-umbrella.h deleted file mode 100644 index 1e09ff5..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-umbrella.h +++ /dev/null @@ -1,226 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFTask+MBLExtensions.h" -#import "MBLAnonymousEvent.h" -#import "MBLConstants.h" -#import "MBLData.h" -#import "MBLDataSample.h" -#import "MBLDataSwitch.h" -#import "MBLDeviceInfo.h" -#import "MBLEntityEvent.h" -#import "MBLEntityModule.h" -#import "MBLEvent.h" -#import "MBLFilter.h" -#import "MBLFirmwareUpdateInfo.h" -#import "MBLMetaWear.h" -#import "MBLMetaWearManager.h" -#import "MBLModule.h" -#import "MBLNumericData.h" -#import "MBLRegister.h" -#import "MBLStringData.h" -#import "MetaWear.h" -#import "MBLAccelerometerBMA255.h" -#import "MBLAccelerometerBMA255MotionEvent.h" -#import "MBLAccelerometerBMI160.h" -#import "MBLAccelerometerBMI160MotionEvent.h" -#import "MBLAccelerometerBosch.h" -#import "MBLAccelerometerBoschFlatData.h" -#import "MBLAccelerometerBoschFlatEvent.h" -#import "MBLAccelerometerBoschLowOrHighGEvent.h" -#import "MBLAccelerometerBoschTapEvent.h" -#import "MBLAccelerometer.h" -#import "MBLAccelerometerData.h" -#import "MBLOrientationData.h" -#import "MBLRMSAccelerometerData.h" -#import "MBLAccelerometerMMA8452Q.h" -#import "MBLAmbientLightLTR329.h" -#import "MBLAmbientLight.h" -#import "MBLANCS.h" -#import "MBLANCSEventData.h" -#import "MBLBarometerBME280.h" -#import "MBLBarometerBMP280.h" -#import "MBLBarometerBosch.h" -#import "MBLBarometer.h" -#import "MBLConductance.h" -#import "MBLGPIO.h" -#import "MBLGPIOPin.h" -#import "bmi160.h" -#import "MBLGyroBMI160.h" -#import "MBLGyro.h" -#import "MBLGyroData.h" -#import "MBLHapticBuzzer.h" -#import "MBLHygrometerBME280.h" -#import "MBLHygrometer.h" -#import "MBLI2C.h" -#import "MBLiBeacon.h" -#import "MBLLED.h" -#import "MBLMagnetometerBMM150.h" -#import "MBLMagnetometer.h" -#import "MBLMagnetometerData.h" -#import "MBLMechanicalSwitch.h" -#import "MBLNeopixel.h" -#import "MBLNeopixelStrand.h" -#import "MBLPhotometer.h" -#import "MBLRGBData.h" -#import "MBLPhotometerTCS3472.h" -#import "MBLProximity.h" -#import "MBLProximityTSL2671.h" -#import "MBLEulerAngleData.h" -#import "MBLQuaternionData.h" -#import "MBLSensorFusion.h" -#import "MBLI2CData.h" -#import "MBLSerial.h" -#import "MBLSPIData.h" -#import "MBLSettings.h" -#import "MBLExternalThermistor.h" -#import "MBLTemperature.h" -#import "MBLTimer.h" -#import "MBLTimerEvent.h" -#import "BFTask+MBLPrivate.h" -#import "MBLCategoryLoader.h" -#import "MBLAnalytics.h" -#import "MBLAnonymousEvent+Private.h" -#import "MBLConstants+Private.h" -#import "MBLConversion.h" -#import "MBLData+Private.h" -#import "MBLDataSample+Private.h" -#import "MBLDependentData.h" -#import "MBLDispatchQueue.h" -#import "MBLDownloadOnlyEvent.h" -#import "MBLEntityEvent+Private.h" -#import "MBLEntityModule+Private.h" -#import "MBLEvent+Private.h" -#import "MBLFilter+Private.h" -#import "MBLFirmwareBuild.h" -#import "MBLFormat.h" -#import "MBLLogger.h" -#import "MBLMacAddressFormat.h" -#import "MBLMetaWear+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLModule+Private.h" -#import "MBLModuleInfo.h" -#import "MBLMovingAverage.h" -#import "MBLNonVolatileState.h" -#import "MBLNumericData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLRegister+Private.h" -#import "MBLStringData+Private.h" -#import "MBLTriggeredRead.h" -#import "MBLFirmwareUpdateManager.h" -#import "MBLBluetoothCentral.h" -#import "MBLBluetoothCentralMock.h" -#import "MBLBluetoothPeripheral.h" -#import "MBLBluetoothPeripheralMock.h" -#import "MBLDeviceLookup.h" -#import "MBLMockPeripheralFactory.h" -#import "MBLMockUtils.h" -#import "MBLModuleMock.h" -#import "MBLAccelerometerBMA255+Private.h" -#import "MBLAccelerometerBMA255MotionEvent+Private.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLAccelerometerBMI160MotionEvent+Private.h" -#import "MBLAccelerometerBMI160StepEvent.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLAccelerometerBoschAxisReadyEvent.h" -#import "MBLAccelerometerBoschDataReadyEvent.h" -#import "MBLAccelerometerBoschFlatData+Private.h" -#import "MBLAccelerometerBoschFlatEvent+Private.h" -#import "MBLAccelerometerBoschFlatFormat.h" -#import "MBLAccelerometerBoschFormat.h" -#import "MBLAccelerometerBoschLowOrHighGEvent+Private.h" -#import "MBLAccelerometerBoschOrientationEvent.h" -#import "MBLAccelerometerBoschOrientationFormat.h" -#import "MBLAccelerometerBoschPackedDataReadyEvent.h" -#import "MBLAccelerometerBoschRMSFormat.h" -#import "MBLAccelerometerBoschTapEvent+Private.h" -#import "MBLAccelerometer+Private.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLOrientationData+Private.h" -#import "MBLRMSAccelerometerData+Private.h" -#import "MBLAccelerometerAxisReadyEvent.h" -#import "MBLAccelerometerDataReadyEvent.h" -#import "MBLAccelerometerFreeFallEvent.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometerMMA8452QFormat.h" -#import "MBLAccelerometerMMA8452QOrientationFormat.h" -#import "MBLAccelerometerMMA8452QRMSFormat.h" -#import "MBLAccelerometerOrientationEvent.h" -#import "MBLAccelerometerPackedDataReadyEvent.h" -#import "MBLAccelerometerShakeEvent.h" -#import "MBLAccelerometerTapEvent.h" -#import "mma8452q.h" -#import "MBLAmbientLight+Private.h" -#import "MBLANCSEventData+Private.h" -#import "MBLBarometerBosch+Private.h" -#import "MBLBarometerBoschPeriodicAltitudeEvent.h" -#import "MBLBarometerBoschPeriodicPressureEvent.h" -#import "MBLBarometer+Private.h" -#import "MBLCommand.h" -#import "MBLConductanceData.h" -#import "MBLDataProcessor.h" -#import "MBLGPIO+Private.h" -#import "MBLGPIOData.h" -#import "MBLGPIOPin+Private.h" -#import "MBLGPIOPinChangeEvent.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLGyroBMI160AxisReadyEvent.h" -#import "MBLGyroBMI160DataReadyEvent.h" -#import "MBLGyroBMI160Format.h" -#import "MBLGyroBMI160PackedDataReadyEvent.h" -#import "MBLGyro+Private.h" -#import "MBLGyroData+Private.h" -#import "MBLHygrometerBME280PeriodicHumidityEvent.h" -#import "MBLHygrometer+Private.h" -#import "MBLLED+Private.h" -#import "MBLLogging.h" -#import "MBLLoggingV0.h" -#import "MBLLoggingV1.h" -#import "MBLLoggingV2.h" -#import "MBLMacro.h" -#import "MBLMagnetometerBMM150+Private.h" -#import "MBLMagnetometerBMM150Format.h" -#import "MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h" -#import "MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h" -#import "MBLMagnetometer+Private.h" -#import "MBLMagnetometerData+Private.h" -#import "MBLNeopixel+Private.h" -#import "MBLNeopixelStrand+Private.h" -#import "MBLPhotometer+Private.h" -#import "MBLRGBData+Private.h" -#import "MBLPhotometerTCS3472Format.h" -#import "MBLProximity+Private.h" -#import "MBLBitmaskEvent.h" -#import "MBLCorrectedFormat.h" -#import "MBLEulerAngleData+Private.h" -#import "MBLEulerFormat.h" -#import "MBLGravityFormat.h" -#import "MBLQuaternionData+Private.h" -#import "MBLQuaternionFormat.h" -#import "MBLSensorFusion+Private.h" -#import "MBLI2CData+Private.h" -#import "MBLSerial+Private.h" -#import "MBLSPIData+Private.h" -#import "MBLSettings+Private.h" -#import "MBLExternalThermistor0.h" -#import "MBLExternalThermistor1.h" -#import "MBLOnDieTemperature0.h" -#import "MBLTemperature+Private.h" -#import "MBLTemperatureV0.h" -#import "MBLTemperatureV1.h" -#import "MBLTestDebug.h" -#import "MBLTimer+Private.h" -#import "MBLTimerEvent+Private.h" - -FOUNDATION_EXPORT double MetaWearVersionNumber; -FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; - diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.xcconfig b/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.xcconfig deleted file mode 100644 index 88b3647..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreBluetooth" -framework "CoreData" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/Info.plist b/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/Info.plist deleted file mode 100644 index 6bb2a2f..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.10.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-dummy.m b/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-dummy.m deleted file mode 100644 index 9f27cb9..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_MetaWearPrivate_macOS : NSObject -@end -@implementation PodsDummy_MetaWearPrivate_macOS -@end diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-umbrella.h b/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-umbrella.h deleted file mode 100644 index fee918d..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-umbrella.h +++ /dev/null @@ -1,226 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFTask+MBLExtensions.h" -#import "MBLAnonymousEvent.h" -#import "MBLConstants.h" -#import "MBLData.h" -#import "MBLDataSample.h" -#import "MBLDataSwitch.h" -#import "MBLDeviceInfo.h" -#import "MBLEntityEvent.h" -#import "MBLEntityModule.h" -#import "MBLEvent.h" -#import "MBLFilter.h" -#import "MBLFirmwareUpdateInfo.h" -#import "MBLMetaWear.h" -#import "MBLMetaWearManager.h" -#import "MBLModule.h" -#import "MBLNumericData.h" -#import "MBLRegister.h" -#import "MBLStringData.h" -#import "MetaWear.h" -#import "MBLAccelerometerBMA255.h" -#import "MBLAccelerometerBMA255MotionEvent.h" -#import "MBLAccelerometerBMI160.h" -#import "MBLAccelerometerBMI160MotionEvent.h" -#import "MBLAccelerometerBosch.h" -#import "MBLAccelerometerBoschFlatData.h" -#import "MBLAccelerometerBoschFlatEvent.h" -#import "MBLAccelerometerBoschLowOrHighGEvent.h" -#import "MBLAccelerometerBoschTapEvent.h" -#import "MBLAccelerometer.h" -#import "MBLAccelerometerData.h" -#import "MBLOrientationData.h" -#import "MBLRMSAccelerometerData.h" -#import "MBLAccelerometerMMA8452Q.h" -#import "MBLAmbientLightLTR329.h" -#import "MBLAmbientLight.h" -#import "MBLANCS.h" -#import "MBLANCSEventData.h" -#import "MBLBarometerBME280.h" -#import "MBLBarometerBMP280.h" -#import "MBLBarometerBosch.h" -#import "MBLBarometer.h" -#import "MBLConductance.h" -#import "MBLGPIO.h" -#import "MBLGPIOPin.h" -#import "bmi160.h" -#import "MBLGyroBMI160.h" -#import "MBLGyro.h" -#import "MBLGyroData.h" -#import "MBLHapticBuzzer.h" -#import "MBLHygrometerBME280.h" -#import "MBLHygrometer.h" -#import "MBLI2C.h" -#import "MBLiBeacon.h" -#import "MBLLED.h" -#import "MBLMagnetometerBMM150.h" -#import "MBLMagnetometer.h" -#import "MBLMagnetometerData.h" -#import "MBLMechanicalSwitch.h" -#import "MBLNeopixel.h" -#import "MBLNeopixelStrand.h" -#import "MBLPhotometer.h" -#import "MBLRGBData.h" -#import "MBLPhotometerTCS3472.h" -#import "MBLProximity.h" -#import "MBLProximityTSL2671.h" -#import "MBLEulerAngleData.h" -#import "MBLQuaternionData.h" -#import "MBLSensorFusion.h" -#import "MBLI2CData.h" -#import "MBLSerial.h" -#import "MBLSPIData.h" -#import "MBLSettings.h" -#import "MBLExternalThermistor.h" -#import "MBLTemperature.h" -#import "MBLTimer.h" -#import "MBLTimerEvent.h" -#import "BFTask+MBLPrivate.h" -#import "MBLCategoryLoader.h" -#import "MBLAnalytics.h" -#import "MBLAnonymousEvent+Private.h" -#import "MBLConstants+Private.h" -#import "MBLConversion.h" -#import "MBLData+Private.h" -#import "MBLDataSample+Private.h" -#import "MBLDependentData.h" -#import "MBLDispatchQueue.h" -#import "MBLDownloadOnlyEvent.h" -#import "MBLEntityEvent+Private.h" -#import "MBLEntityModule+Private.h" -#import "MBLEvent+Private.h" -#import "MBLFilter+Private.h" -#import "MBLFirmwareBuild.h" -#import "MBLFormat.h" -#import "MBLLogger.h" -#import "MBLMacAddressFormat.h" -#import "MBLMetaWear+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLModule+Private.h" -#import "MBLModuleInfo.h" -#import "MBLMovingAverage.h" -#import "MBLNonVolatileState.h" -#import "MBLNumericData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLRegister+Private.h" -#import "MBLStringData+Private.h" -#import "MBLTriggeredRead.h" -#import "MBLFirmwareUpdateManager.h" -#import "MBLBluetoothCentral.h" -#import "MBLBluetoothCentralMock.h" -#import "MBLBluetoothPeripheral.h" -#import "MBLBluetoothPeripheralMock.h" -#import "MBLDeviceLookup.h" -#import "MBLMockPeripheralFactory.h" -#import "MBLMockUtils.h" -#import "MBLModuleMock.h" -#import "MBLAccelerometerBMA255+Private.h" -#import "MBLAccelerometerBMA255MotionEvent+Private.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLAccelerometerBMI160MotionEvent+Private.h" -#import "MBLAccelerometerBMI160StepEvent.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLAccelerometerBoschAxisReadyEvent.h" -#import "MBLAccelerometerBoschDataReadyEvent.h" -#import "MBLAccelerometerBoschFlatData+Private.h" -#import "MBLAccelerometerBoschFlatEvent+Private.h" -#import "MBLAccelerometerBoschFlatFormat.h" -#import "MBLAccelerometerBoschFormat.h" -#import "MBLAccelerometerBoschLowOrHighGEvent+Private.h" -#import "MBLAccelerometerBoschOrientationEvent.h" -#import "MBLAccelerometerBoschOrientationFormat.h" -#import "MBLAccelerometerBoschPackedDataReadyEvent.h" -#import "MBLAccelerometerBoschRMSFormat.h" -#import "MBLAccelerometerBoschTapEvent+Private.h" -#import "MBLAccelerometer+Private.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLOrientationData+Private.h" -#import "MBLRMSAccelerometerData+Private.h" -#import "MBLAccelerometerAxisReadyEvent.h" -#import "MBLAccelerometerDataReadyEvent.h" -#import "MBLAccelerometerFreeFallEvent.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometerMMA8452QFormat.h" -#import "MBLAccelerometerMMA8452QOrientationFormat.h" -#import "MBLAccelerometerMMA8452QRMSFormat.h" -#import "MBLAccelerometerOrientationEvent.h" -#import "MBLAccelerometerPackedDataReadyEvent.h" -#import "MBLAccelerometerShakeEvent.h" -#import "MBLAccelerometerTapEvent.h" -#import "mma8452q.h" -#import "MBLAmbientLight+Private.h" -#import "MBLANCSEventData+Private.h" -#import "MBLBarometerBosch+Private.h" -#import "MBLBarometerBoschPeriodicAltitudeEvent.h" -#import "MBLBarometerBoschPeriodicPressureEvent.h" -#import "MBLBarometer+Private.h" -#import "MBLCommand.h" -#import "MBLConductanceData.h" -#import "MBLDataProcessor.h" -#import "MBLGPIO+Private.h" -#import "MBLGPIOData.h" -#import "MBLGPIOPin+Private.h" -#import "MBLGPIOPinChangeEvent.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLGyroBMI160AxisReadyEvent.h" -#import "MBLGyroBMI160DataReadyEvent.h" -#import "MBLGyroBMI160Format.h" -#import "MBLGyroBMI160PackedDataReadyEvent.h" -#import "MBLGyro+Private.h" -#import "MBLGyroData+Private.h" -#import "MBLHygrometerBME280PeriodicHumidityEvent.h" -#import "MBLHygrometer+Private.h" -#import "MBLLED+Private.h" -#import "MBLLogging.h" -#import "MBLLoggingV0.h" -#import "MBLLoggingV1.h" -#import "MBLLoggingV2.h" -#import "MBLMacro.h" -#import "MBLMagnetometerBMM150+Private.h" -#import "MBLMagnetometerBMM150Format.h" -#import "MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h" -#import "MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h" -#import "MBLMagnetometer+Private.h" -#import "MBLMagnetometerData+Private.h" -#import "MBLNeopixel+Private.h" -#import "MBLNeopixelStrand+Private.h" -#import "MBLPhotometer+Private.h" -#import "MBLRGBData+Private.h" -#import "MBLPhotometerTCS3472Format.h" -#import "MBLProximity+Private.h" -#import "MBLBitmaskEvent.h" -#import "MBLCorrectedFormat.h" -#import "MBLEulerAngleData+Private.h" -#import "MBLEulerFormat.h" -#import "MBLGravityFormat.h" -#import "MBLQuaternionData+Private.h" -#import "MBLQuaternionFormat.h" -#import "MBLSensorFusion+Private.h" -#import "MBLI2CData+Private.h" -#import "MBLSerial+Private.h" -#import "MBLSPIData+Private.h" -#import "MBLSettings+Private.h" -#import "MBLExternalThermistor0.h" -#import "MBLExternalThermistor1.h" -#import "MBLOnDieTemperature0.h" -#import "MBLTemperature+Private.h" -#import "MBLTemperatureV0.h" -#import "MBLTemperatureV1.h" -#import "MBLTestDebug.h" -#import "MBLTimer+Private.h" -#import "MBLTimerEvent+Private.h" - -FOUNDATION_EXPORT double MetaWearVersionNumber; -FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; - diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.xcconfig b/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.xcconfig deleted file mode 100644 index d7571eb..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS.xcconfig +++ /dev/null @@ -1,12 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreBluetooth" -framework "CoreData" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/Info.plist b/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/Info.plist deleted file mode 100644 index 6bb2a2f..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 2.10.0 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-dummy.m b/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-dummy.m deleted file mode 100644 index d72eb76..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_MetaWearPrivate_tvOS : NSObject -@end -@implementation PodsDummy_MetaWearPrivate_tvOS -@end diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-umbrella.h b/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-umbrella.h deleted file mode 100644 index 1e09ff5..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-umbrella.h +++ /dev/null @@ -1,226 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFTask+MBLExtensions.h" -#import "MBLAnonymousEvent.h" -#import "MBLConstants.h" -#import "MBLData.h" -#import "MBLDataSample.h" -#import "MBLDataSwitch.h" -#import "MBLDeviceInfo.h" -#import "MBLEntityEvent.h" -#import "MBLEntityModule.h" -#import "MBLEvent.h" -#import "MBLFilter.h" -#import "MBLFirmwareUpdateInfo.h" -#import "MBLMetaWear.h" -#import "MBLMetaWearManager.h" -#import "MBLModule.h" -#import "MBLNumericData.h" -#import "MBLRegister.h" -#import "MBLStringData.h" -#import "MetaWear.h" -#import "MBLAccelerometerBMA255.h" -#import "MBLAccelerometerBMA255MotionEvent.h" -#import "MBLAccelerometerBMI160.h" -#import "MBLAccelerometerBMI160MotionEvent.h" -#import "MBLAccelerometerBosch.h" -#import "MBLAccelerometerBoschFlatData.h" -#import "MBLAccelerometerBoschFlatEvent.h" -#import "MBLAccelerometerBoschLowOrHighGEvent.h" -#import "MBLAccelerometerBoschTapEvent.h" -#import "MBLAccelerometer.h" -#import "MBLAccelerometerData.h" -#import "MBLOrientationData.h" -#import "MBLRMSAccelerometerData.h" -#import "MBLAccelerometerMMA8452Q.h" -#import "MBLAmbientLightLTR329.h" -#import "MBLAmbientLight.h" -#import "MBLANCS.h" -#import "MBLANCSEventData.h" -#import "MBLBarometerBME280.h" -#import "MBLBarometerBMP280.h" -#import "MBLBarometerBosch.h" -#import "MBLBarometer.h" -#import "MBLConductance.h" -#import "MBLGPIO.h" -#import "MBLGPIOPin.h" -#import "bmi160.h" -#import "MBLGyroBMI160.h" -#import "MBLGyro.h" -#import "MBLGyroData.h" -#import "MBLHapticBuzzer.h" -#import "MBLHygrometerBME280.h" -#import "MBLHygrometer.h" -#import "MBLI2C.h" -#import "MBLiBeacon.h" -#import "MBLLED.h" -#import "MBLMagnetometerBMM150.h" -#import "MBLMagnetometer.h" -#import "MBLMagnetometerData.h" -#import "MBLMechanicalSwitch.h" -#import "MBLNeopixel.h" -#import "MBLNeopixelStrand.h" -#import "MBLPhotometer.h" -#import "MBLRGBData.h" -#import "MBLPhotometerTCS3472.h" -#import "MBLProximity.h" -#import "MBLProximityTSL2671.h" -#import "MBLEulerAngleData.h" -#import "MBLQuaternionData.h" -#import "MBLSensorFusion.h" -#import "MBLI2CData.h" -#import "MBLSerial.h" -#import "MBLSPIData.h" -#import "MBLSettings.h" -#import "MBLExternalThermistor.h" -#import "MBLTemperature.h" -#import "MBLTimer.h" -#import "MBLTimerEvent.h" -#import "BFTask+MBLPrivate.h" -#import "MBLCategoryLoader.h" -#import "MBLAnalytics.h" -#import "MBLAnonymousEvent+Private.h" -#import "MBLConstants+Private.h" -#import "MBLConversion.h" -#import "MBLData+Private.h" -#import "MBLDataSample+Private.h" -#import "MBLDependentData.h" -#import "MBLDispatchQueue.h" -#import "MBLDownloadOnlyEvent.h" -#import "MBLEntityEvent+Private.h" -#import "MBLEntityModule+Private.h" -#import "MBLEvent+Private.h" -#import "MBLFilter+Private.h" -#import "MBLFirmwareBuild.h" -#import "MBLFormat.h" -#import "MBLLogger.h" -#import "MBLMacAddressFormat.h" -#import "MBLMetaWear+Private.h" -#import "MBLMetaWearManager+Private.h" -#import "MBLModule+Private.h" -#import "MBLModuleInfo.h" -#import "MBLMovingAverage.h" -#import "MBLNonVolatileState.h" -#import "MBLNumericData+Private.h" -#import "MBLNumericFormatter.h" -#import "MBLRegister+Private.h" -#import "MBLStringData+Private.h" -#import "MBLTriggeredRead.h" -#import "MBLFirmwareUpdateManager.h" -#import "MBLBluetoothCentral.h" -#import "MBLBluetoothCentralMock.h" -#import "MBLBluetoothPeripheral.h" -#import "MBLBluetoothPeripheralMock.h" -#import "MBLDeviceLookup.h" -#import "MBLMockPeripheralFactory.h" -#import "MBLMockUtils.h" -#import "MBLModuleMock.h" -#import "MBLAccelerometerBMA255+Private.h" -#import "MBLAccelerometerBMA255MotionEvent+Private.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLAccelerometerBMI160MotionEvent+Private.h" -#import "MBLAccelerometerBMI160StepEvent.h" -#import "MBLAccelerometerBosch+Private.h" -#import "MBLAccelerometerBoschAxisReadyEvent.h" -#import "MBLAccelerometerBoschDataReadyEvent.h" -#import "MBLAccelerometerBoschFlatData+Private.h" -#import "MBLAccelerometerBoschFlatEvent+Private.h" -#import "MBLAccelerometerBoschFlatFormat.h" -#import "MBLAccelerometerBoschFormat.h" -#import "MBLAccelerometerBoschLowOrHighGEvent+Private.h" -#import "MBLAccelerometerBoschOrientationEvent.h" -#import "MBLAccelerometerBoschOrientationFormat.h" -#import "MBLAccelerometerBoschPackedDataReadyEvent.h" -#import "MBLAccelerometerBoschRMSFormat.h" -#import "MBLAccelerometerBoschTapEvent+Private.h" -#import "MBLAccelerometer+Private.h" -#import "MBLAccelerometerData+Private.h" -#import "MBLOrientationData+Private.h" -#import "MBLRMSAccelerometerData+Private.h" -#import "MBLAccelerometerAxisReadyEvent.h" -#import "MBLAccelerometerDataReadyEvent.h" -#import "MBLAccelerometerFreeFallEvent.h" -#import "MBLAccelerometerMMA8452Q+Private.h" -#import "MBLAccelerometerMMA8452QFormat.h" -#import "MBLAccelerometerMMA8452QOrientationFormat.h" -#import "MBLAccelerometerMMA8452QRMSFormat.h" -#import "MBLAccelerometerOrientationEvent.h" -#import "MBLAccelerometerPackedDataReadyEvent.h" -#import "MBLAccelerometerShakeEvent.h" -#import "MBLAccelerometerTapEvent.h" -#import "mma8452q.h" -#import "MBLAmbientLight+Private.h" -#import "MBLANCSEventData+Private.h" -#import "MBLBarometerBosch+Private.h" -#import "MBLBarometerBoschPeriodicAltitudeEvent.h" -#import "MBLBarometerBoschPeriodicPressureEvent.h" -#import "MBLBarometer+Private.h" -#import "MBLCommand.h" -#import "MBLConductanceData.h" -#import "MBLDataProcessor.h" -#import "MBLGPIO+Private.h" -#import "MBLGPIOData.h" -#import "MBLGPIOPin+Private.h" -#import "MBLGPIOPinChangeEvent.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLGyroBMI160AxisReadyEvent.h" -#import "MBLGyroBMI160DataReadyEvent.h" -#import "MBLGyroBMI160Format.h" -#import "MBLGyroBMI160PackedDataReadyEvent.h" -#import "MBLGyro+Private.h" -#import "MBLGyroData+Private.h" -#import "MBLHygrometerBME280PeriodicHumidityEvent.h" -#import "MBLHygrometer+Private.h" -#import "MBLLED+Private.h" -#import "MBLLogging.h" -#import "MBLLoggingV0.h" -#import "MBLLoggingV1.h" -#import "MBLLoggingV2.h" -#import "MBLMacro.h" -#import "MBLMagnetometerBMM150+Private.h" -#import "MBLMagnetometerBMM150Format.h" -#import "MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h" -#import "MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h" -#import "MBLMagnetometer+Private.h" -#import "MBLMagnetometerData+Private.h" -#import "MBLNeopixel+Private.h" -#import "MBLNeopixelStrand+Private.h" -#import "MBLPhotometer+Private.h" -#import "MBLRGBData+Private.h" -#import "MBLPhotometerTCS3472Format.h" -#import "MBLProximity+Private.h" -#import "MBLBitmaskEvent.h" -#import "MBLCorrectedFormat.h" -#import "MBLEulerAngleData+Private.h" -#import "MBLEulerFormat.h" -#import "MBLGravityFormat.h" -#import "MBLQuaternionData+Private.h" -#import "MBLQuaternionFormat.h" -#import "MBLSensorFusion+Private.h" -#import "MBLI2CData+Private.h" -#import "MBLSerial+Private.h" -#import "MBLSPIData+Private.h" -#import "MBLSettings+Private.h" -#import "MBLExternalThermistor0.h" -#import "MBLExternalThermistor1.h" -#import "MBLOnDieTemperature0.h" -#import "MBLTemperature+Private.h" -#import "MBLTemperatureV0.h" -#import "MBLTemperatureV1.h" -#import "MBLTestDebug.h" -#import "MBLTimer+Private.h" -#import "MBLTimerEvent+Private.h" - -FOUNDATION_EXPORT double MetaWearVersionNumber; -FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; - diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.xcconfig b/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.xcconfig deleted file mode 100644 index dd1c8f3..0000000 --- a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS.xcconfig +++ /dev/null @@ -1,11 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreBluetooth" -framework "CoreData" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown index f721b2b..e538173 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,31 +34,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - -## MetaWearPrivate +## MetaWear See https://www.mbientlab.com/terms/ Generated by CocoaPods - https://cocoapods.org diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist index 7b7226a..7d1f2a8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier @@ -87,7 +57,7 @@ freely, subject to the following restrictions: License Commercial Title - MetaWearPrivate + MetaWear Type PSGroupSpecifier diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh index 248b1a5..d12ab3c 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,18 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-iOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-iOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig index 7565835..a6cb6bf 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.debug.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS" +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig index 7565835..a6cb6bf 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearIntegrationTestHost-iOS.release.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS" +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown index f721b2b..e538173 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,31 +34,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - -## MetaWearPrivate +## MetaWear See https://www.mbientlab.com/terms/ Generated by CocoaPods - https://cocoapods.org diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist index 7b7226a..7d1f2a8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier @@ -87,7 +57,7 @@ freely, subject to the following restrictions: License Commercial Title - MetaWearPrivate + MetaWear Type PSGroupSpecifier diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh index 248b1a5..d12ab3c 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,18 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-iOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-iOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig index 7565835..081329e 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.debug.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig index 7565835..081329e 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS/Pods-MetaWear-MetaWear-iOS-MetaWearUnitTests-iOS.release.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown index f721b2b..e538173 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,31 +34,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - -## MetaWearPrivate +## MetaWear See https://www.mbientlab.com/terms/ Generated by CocoaPods - https://cocoapods.org diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist index 7b7226a..7d1f2a8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier @@ -87,7 +57,7 @@ freely, subject to the following restrictions: License Commercial Title - MetaWearPrivate + MetaWear Type PSGroupSpecifier diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh index 1a32437..9397357 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,18 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-macOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-macOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig index 4a592c8..9dfe002 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.debug.xcconfig @@ -1,10 +1,12 @@ CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS" +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig index 4a592c8..9dfe002 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearIntegrationTestHost-macOS.release.xcconfig @@ -1,10 +1,12 @@ CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS" +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown index f721b2b..e538173 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,31 +34,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - -## MetaWearPrivate +## MetaWear See https://www.mbientlab.com/terms/ Generated by CocoaPods - https://cocoapods.org diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist index 7b7226a..7d1f2a8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier @@ -87,7 +57,7 @@ freely, subject to the following restrictions: License Commercial Title - MetaWearPrivate + MetaWear Type PSGroupSpecifier diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh index 1a32437..9397357 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,18 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-macOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-macOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig index e371be4..932cd28 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.debug.xcconfig @@ -1,10 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig index e371be4..932cd28 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS/Pods-MetaWear-MetaWear-macOS-MetaWearUnitTests-macOS.release.xcconfig @@ -1,10 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown index f721b2b..e538173 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,31 +34,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - -## MetaWearPrivate +## MetaWear See https://www.mbientlab.com/terms/ Generated by CocoaPods - https://cocoapods.org diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist index 7b7226a..7d1f2a8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier @@ -87,7 +57,7 @@ freely, subject to the following restrictions: License Commercial Title - MetaWearPrivate + MetaWear Type PSGroupSpecifier diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh index b09face..cc07b00 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,18 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-tvOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-tvOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig index 093ef78..76dd728 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.debug.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS" +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig index 093ef78..76dd728 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearIntegrationTestHost-tvOS.release.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS" +EMBEDDED_CONTENT_CONTAINS_SWIFT = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown index f721b2b..e538173 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,31 +34,7 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - -## MetaWearPrivate +## MetaWear See https://www.mbientlab.com/terms/ Generated by CocoaPods - https://cocoapods.org diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist index 7b7226a..7d1f2a8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier @@ -87,7 +57,7 @@ freely, subject to the following restrictions: License Commercial Title - MetaWearPrivate + MetaWear Type PSGroupSpecifier diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh index b09face..cc07b00 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,18 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-tvOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework" - install_framework "${BUILT_PRODUCTS_DIR}/MetaWearPrivate-tvOS/MetaWear.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig index 093ef78..3ce76f8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.debug.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig index 093ef78..3ce76f8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS/Pods-MetaWear-MetaWear-tvOS-MetaWearUnitTests-tvOS.release.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Info.plist b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Info.plist new file mode 100644 index 0000000..2243fe6 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.markdown b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.markdown new file mode 100644 index 0000000..e538173 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.markdown @@ -0,0 +1,40 @@ +# Acknowledgements +This application makes use of the following third party libraries: + +## Bolts-Swift + +BSD License + +For Bolts-Swift software + +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +## MetaWear + +See https://www.mbientlab.com/terms/ +Generated by CocoaPods - https://cocoapods.org diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.plist b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.plist new file mode 100644 index 0000000..7d1f2a8 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-acknowledgements.plist @@ -0,0 +1,78 @@ + + + + + PreferenceSpecifiers + + + FooterText + This application makes use of the following third party libraries: + Title + Acknowledgements + Type + PSGroupSpecifier + + + FooterText + BSD License + +For Bolts-Swift software + +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + * Neither the name Facebook nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + License + BSD + Title + Bolts-Swift + Type + PSGroupSpecifier + + + FooterText + See https://www.mbientlab.com/terms/ + License + Commercial + Title + MetaWear + Type + PSGroupSpecifier + + + FooterText + Generated by CocoaPods - https://cocoapods.org + Title + + Type + PSGroupSpecifier + + + StringsTable + Acknowledgements + Title + Acknowledgements + + diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m new file mode 100644 index 0000000..ba2e2df --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension : NSObject +@end +@implementation PodsDummy_Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension +@end diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh new file mode 100755 index 0000000..293e9a0 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-frameworks.sh @@ -0,0 +1,155 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" +SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" + +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +# Copies and strips a vendored framework +install_framework() +{ + if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then + local source="${BUILT_PRODUCTS_DIR}/$1" + elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then + local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" + elif [ -r "$1" ]; then + local source="$1" + fi + + local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + + if [ -L "${source}" ]; then + echo "Symlinked..." + source="$(readlink "${source}")" + fi + + # Use filter instead of exclude so missing patterns don't throw errors. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" + + local basename + basename="$(basename -s .framework "$1")" + binary="${destination}/${basename}.framework/${basename}" + if ! [ -r "$binary" ]; then + binary="${destination}/${basename}" + fi + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then + strip_invalid_archs "$binary" + fi + + # Resign the code if required by the build settings to avoid unstable apps + code_sign_if_enabled "${destination}/$(basename "$1")" + + # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. + if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then + local swift_runtime_libs + swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) + for lib in $swift_runtime_libs; do + echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" + rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" + code_sign_if_enabled "${destination}/${lib}" + done + fi +} + +# Copies and strips a vendored dSYM +install_dsym() { + local source="$1" + if [ -r "$source" ]; then + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi + fi +} + +# Signs a framework with the provided identity +code_sign_if_enabled() { + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + # Use the current code_sign_identitiy + echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" + + if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + code_sign_cmd="$code_sign_cmd &" + fi + echo "$code_sign_cmd" + eval "$code_sign_cmd" + fi +} + +# Strip invalid architectures +strip_invalid_archs() { + binary="$1" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi + stripped="" + for arch in $binary_archs; do + if ! [[ "${ARCHS}" == *"$arch"* ]]; then + # Strip non-valid architectures in-place + lipo -remove "$arch" -output "$binary" "$binary" || exit 1 + stripped="$stripped $arch" + fi + done + if [[ "$stripped" ]]; then + echo "Stripped $binary of architectures:$stripped" + fi + STRIP_BINARY_RETVAL=1 +} + + +if [[ "$CONFIGURATION" == "Debug" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-watchOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-watchOS/MetaWear.framework" +fi +if [[ "$CONFIGURATION" == "Release" ]]; then + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-watchOS/BoltsSwift.framework" + install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-watchOS/MetaWear.framework" +fi +if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then + wait +fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-resources.sh new file mode 100755 index 0000000..fe3f9c7 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-resources.sh @@ -0,0 +1,118 @@ +#!/bin/sh +set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + +RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt +> "$RESOURCES_TO_COPY" + +XCASSET_FILES=() + +# This protects against multiple targets copying the same framework dependency at the same time. The solution +# was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html +RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") + +case "${TARGETED_DEVICE_FAMILY:-}" in + 1,2) + TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" + ;; + 1) + TARGET_DEVICE_ARGS="--target-device iphone" + ;; + 2) + TARGET_DEVICE_ARGS="--target-device ipad" + ;; + 3) + TARGET_DEVICE_ARGS="--target-device tv" + ;; + 4) + TARGET_DEVICE_ARGS="--target-device watch" + ;; + *) + TARGET_DEVICE_ARGS="--target-device mac" + ;; +esac + +install_resource() +{ + if [[ "$1" = /* ]] ; then + RESOURCE_PATH="$1" + else + RESOURCE_PATH="${PODS_ROOT}/$1" + fi + if [[ ! -e "$RESOURCE_PATH" ]] ; then + cat << EOM +error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. +EOM + exit 1 + fi + case $RESOURCE_PATH in + *.storyboard) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.xib) + echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true + ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} + ;; + *.framework) + echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" + ;; + *.xcdatamodel) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" + ;; + *.xcdatamodeld) + echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true + xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" + ;; + *.xcmappingmodel) + echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true + xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" + ;; + *.xcassets) + ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" + XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") + ;; + *) + echo "$RESOURCE_PATH" || true + echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" + ;; + esac +} + +mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then + mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" +fi +rm -f "$RESOURCES_TO_COPY" + +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] +then + # Find all other xcassets (this unfortunately includes those of path pods and other targets). + OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) + while read line; do + if [[ $line != "${PODS_ROOT}*" ]]; then + XCASSET_FILES+=("$line") + fi + done <<<"$OTHER_XCASSETS" + + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi +fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h new file mode 100644 index 0000000..d596db0 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_ExtensionVersionNumber; +FOUNDATION_EXPORT const unsigned char Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_ExtensionVersionString[]; + diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig new file mode 100644 index 0000000..0ea73a7 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.debug.xcconfig @@ -0,0 +1,11 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-watchOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-watchOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-watchOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-watchOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap new file mode 100644 index 0000000..05dffcc --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.modulemap @@ -0,0 +1,6 @@ +framework module Pods_MetaWear_MetaWear_watchOS_MetaWearIntegrationTestHost_watchOS_Extension { + umbrella header "Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension-umbrella.h" + + export * + module * { export * } +} diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig new file mode 100644 index 0000000..0ea73a7 --- /dev/null +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension/Pods-MetaWear-MetaWear-watchOS-MetaWearIntegrationTestHost-watchOS Extension.release.xcconfig @@ -0,0 +1,11 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-watchOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-watchOS" +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-watchOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-watchOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_PODFILE_DIR_PATH = ${SRCROOT}/. +PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-frameworks.sh index 587555f..1211208 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,6 +138,7 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.debug.xcconfig index aeb4821..31db3a8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.debug.xcconfig @@ -1,11 +1,11 @@ -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Zip-iOS" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-iOS" "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Zip-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip-iOS/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-iOS/iOSDFULibrary.framework/Headers" $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS/MetaWear.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Zip-iOS/Zip.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-iOS/iOSDFULibrary.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS/MetaWear.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "Zip" -framework "iOSDFULibrary" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.release.xcconfig index aeb4821..31db3a8 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-iOS/Pods-MetaWearIntegrationTests-iOS.release.xcconfig @@ -1,11 +1,11 @@ -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Zip-iOS" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-iOS" "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Zip-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip-iOS/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-iOS/iOSDFULibrary.framework/Headers" $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-iOS/MetaWear.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Zip-iOS/Zip.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-iOS/iOSDFULibrary.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS/MetaWear.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "Zip" -framework "iOSDFULibrary" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-frameworks.sh index eef143a..84ca936 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,6 +138,7 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.debug.xcconfig index 529350e..31eb70d 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.debug.xcconfig @@ -1,12 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CODE_SIGN_IDENTITY = -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Zip-macOS" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-macOS" "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Zip-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip-macOS/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-macOS/iOSDFULibrary.framework/Headers" $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS/MetaWear.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Zip-macOS/Zip.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-macOS/iOSDFULibrary.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS/MetaWear.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "Zip" -framework "iOSDFULibrary" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.release.xcconfig index 529350e..31eb70d 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-macOS/Pods-MetaWearIntegrationTests-macOS.release.xcconfig @@ -1,12 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CODE_SIGN_IDENTITY = -EMBEDDED_CONTENT_CONTAINS_SWIFT = YES -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Zip-macOS" "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-macOS" "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Zip-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/../Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Zip-macOS/Zip.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-macOS/iOSDFULibrary.framework/Headers" $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-macOS/MetaWear.framework/Headers" +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Zip-macOS/Zip.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-macOS/iOSDFULibrary.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS/MetaWear.framework/Headers" OTHER_LDFLAGS = $(inherited) -framework "Zip" -framework "iOSDFULibrary" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-frameworks.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-frameworks.sh index 88dd537..08e3eaa 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-frameworks.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,6 +138,7 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-resources.sh b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-resources.sh index a7df440..fe3f9c7 100755 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-resources.sh +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig index bf62ad3..52281e9 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.debug.xcconfig @@ -1,8 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS/MetaWear.framework/Headers" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS/MetaWear.framework/Headers" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.release.xcconfig b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.release.xcconfig index bf62ad3..52281e9 100644 --- a/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.release.xcconfig +++ b/MetaWear/Pods/Target Support Files/Pods-MetaWearIntegrationTests-tvOS/Pods-MetaWearIntegrationTests-tvOS.release.xcconfig @@ -1,8 +1,8 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWearPrivate-tvOS/MetaWear.framework/Headers" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS/MetaWear.framework/Headers" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/MetaWear/Pods/Target Support Files/Zip-iOS/Zip-iOS.xcconfig b/MetaWear/Pods/Target Support Files/Zip-iOS/Zip-iOS.xcconfig index 322d554..7ecabbf 100644 --- a/MetaWear/Pods/Target Support Files/Zip-iOS/Zip-iOS.xcconfig +++ b/MetaWear/Pods/Target Support Files/Zip-iOS/Zip-iOS.xcconfig @@ -1,13 +1,12 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Zip-iOS +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Zip-iOS GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" LIBRARY_SEARCH_PATHS = $(inherited) $(SRCROOT)/Zip/Zip/ OTHER_LDFLAGS = -l"z" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Zip PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES -SWIFT_INCLUDE_PATHS = $(SRCROOT)/Zip/Zip/minizip/** +SWIFT_INCLUDE_PATHS = $(inherited) $(SRCROOT)/Zip/Zip/minizip/** diff --git a/MetaWear/Pods/Target Support Files/Zip-macOS/Zip-macOS.xcconfig b/MetaWear/Pods/Target Support Files/Zip-macOS/Zip-macOS.xcconfig index dca590d..88b8110 100644 --- a/MetaWear/Pods/Target Support Files/Zip-macOS/Zip-macOS.xcconfig +++ b/MetaWear/Pods/Target Support Files/Zip-macOS/Zip-macOS.xcconfig @@ -1,14 +1,13 @@ CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Zip-macOS +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Zip-macOS GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" LIBRARY_SEARCH_PATHS = $(inherited) $(SRCROOT)/Zip/Zip/ OTHER_LDFLAGS = -l"z" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/Zip PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES -SWIFT_INCLUDE_PATHS = $(SRCROOT)/Zip/Zip/minizip/** +SWIFT_INCLUDE_PATHS = $(inherited) $(SRCROOT)/Zip/Zip/minizip/** diff --git a/MetaWear/Pods/Target Support Files/iOSDFULibrary-iOS/Info.plist b/MetaWear/Pods/Target Support Files/iOSDFULibrary-iOS/Info.plist index c26f36f..182eda1 100644 --- a/MetaWear/Pods/Target Support Files/iOSDFULibrary-iOS/Info.plist +++ b/MetaWear/Pods/Target Support Files/iOSDFULibrary-iOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.1.0 + 4.1.3 CFBundleSignature ???? CFBundleVersion diff --git a/MetaWear/Pods/Target Support Files/iOSDFULibrary-iOS/iOSDFULibrary-iOS.xcconfig b/MetaWear/Pods/Target Support Files/iOSDFULibrary-iOS/iOSDFULibrary-iOS.xcconfig index fc3b3c5..1eb8b5f 100644 --- a/MetaWear/Pods/Target Support Files/iOSDFULibrary-iOS/iOSDFULibrary-iOS.xcconfig +++ b/MetaWear/Pods/Target Support Files/iOSDFULibrary-iOS/iOSDFULibrary-iOS.xcconfig @@ -1,10 +1,9 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-iOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Zip-iOS" +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-iOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Zip-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/iOSDFULibrary PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} diff --git a/MetaWear/Pods/Target Support Files/iOSDFULibrary-macOS/Info.plist b/MetaWear/Pods/Target Support Files/iOSDFULibrary-macOS/Info.plist index c26f36f..182eda1 100644 --- a/MetaWear/Pods/Target Support Files/iOSDFULibrary-macOS/Info.plist +++ b/MetaWear/Pods/Target Support Files/iOSDFULibrary-macOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 4.1.0 + 4.1.3 CFBundleSignature ???? CFBundleVersion diff --git a/MetaWear/Pods/Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS.xcconfig b/MetaWear/Pods/Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS.xcconfig index 906f710..1db0f2d 100644 --- a/MetaWear/Pods/Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS.xcconfig +++ b/MetaWear/Pods/Target Support Files/iOSDFULibrary-macOS/iOSDFULibrary-macOS.xcconfig @@ -1,11 +1,10 @@ CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/iOSDFULibrary-macOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Zip-macOS" +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/iOSDFULibrary-macOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Zip-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/iOSDFULibrary PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} diff --git a/MetaWear/Pods/iOSDFULibrary/README.md b/MetaWear/Pods/iOSDFULibrary/README.md index da33803..67d0fa1 100644 --- a/MetaWear/Pods/iOSDFULibrary/README.md +++ b/MetaWear/Pods/iOSDFULibrary/README.md @@ -109,9 +109,16 @@ The library is compatible with nRF51 and nRF52 devices with S-Series Soft Device * **SDK 12.0.0** - New Secure DFU has been released. This library is fully backwards compatible so supports both the new and legacy DFU. * **SDK 13.0.0** - Buttonless DFU (still experimental) uses different UUIDs. No bond sharing supported. Bootloader will use address +1. * **SDK 14.0.0** - Buttonless DFU no longer experimental. New buttonless characteristic added for bonded devices (requires bond, cache cleaning relies on Service Changed indication). +* **SDK 15.0.0** - Support for higher MTUs will be added (may be postponed). + +This library is fully backwards compatible and supports both the new and legacy DFU. The experimental buttonless DFU service from SDK 12 is supported since version 1.1.0. Due to the fact, that this experimental service from SDK 12 is not safe, you have to call [dfuInitiator.enableUnsafeExperimentalButtonlessServiceInSecureDfu = true](https://github.com/NordicSemiconductor/IOS-Pods-DFU-Library/blob/master/iOSDFULibrary/Classes/Implementation/DFUServiceInitiator.swift#L196) to enable it, this is off by default. Read the method documentation for details. It is recommended to use the Buttonless service from SDK 13 (for non-bonded devices, or 14 for bonded). Both are supported since DFU Library 1.3.0. Check platform folders for mode details about compatibility for each library. +### React Native + +An unofficial library for both iOS and Android that is based on this library is available for React Native: [react-native-nordic-dfu](https://github.com/Pilloxa/react-native-nordic-dfu) + --- ### Resources diff --git a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/DFUServiceDelegate.swift b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/DFUServiceDelegate.swift index 1e9bdb3..ff306d9 100644 --- a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/DFUServiceDelegate.swift +++ b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/DFUServiceDelegate.swift @@ -20,6 +20,8 @@ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import Foundation + @objc public enum DFUError : Int { // Legacy DFU errors case remoteLegacyDFUSuccess = 1 @@ -46,7 +48,7 @@ case remoteExperimentalButtonlessDFUOpCodeNotSupported = 9002 // 9000 + 2 case remoteExperimentalButtonlessDFUOperationFailed = 9004 // 9000 + 4 - // Buttonless DFU errors (received value + 9000 as they overlap legacy and secure DFU errors) + // Buttonless DFU errors (received value + 30 as they overlap legacy and secure DFU errors) case remoteButtonlessDFUSuccess = 31 // 30 + 1 case remoteButtonlessDFUOpCodeNotSupported = 32 // 30 + 2 case remoteButtonlessDFUOperationFailed = 34 // 30 + 4 diff --git a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/Firmware/DFUFirmware.swift b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/Firmware/DFUFirmware.swift index 6aa1b1a..028f1d2 100644 --- a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/Firmware/DFUFirmware.swift +++ b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/Firmware/DFUFirmware.swift @@ -19,6 +19,7 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import Foundation /** The type of the BIN or HEX file, or selection of content from the Distribution packet (ZIP) file. @@ -230,7 +231,7 @@ Creates the DFU Firmware object from a HEX data. Setting the DAT file with an Init packet is optional, but may be required by the bootloader (SDK 7.0.0+). - - parameter binFile: Content of the HEX file containing new firmware + - parameter hexFile: Content of the HEX file containing new firmware - parameter datFile: An optional DAT file data with the Init packet - parameter type: The type of the firmware diff --git a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/GenericDFU/DFUExecutor.swift b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/GenericDFU/DFUExecutor.swift index 8a7a414..b658d5e 100644 --- a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/GenericDFU/DFUExecutor.swift +++ b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/GenericDFU/DFUExecutor.swift @@ -135,17 +135,16 @@ internal protocol DFUExecutor : DFUExecutorAPI, BaseDFUExecutor, DFUPeripheralDe extension DFUExecutor { - // MARK: - BasePeripheralDelegate API + // MARK: - DFUPeripheralDelegate API - func peripheralDidDisconnectAfterFirmwarePartSent() { + func peripheralDidDisconnectAfterFirmwarePartSent() -> Bool { // Check if there is another part of the firmware that has to be sent if firmware.hasNextPart() { firmware.switchToNextPart() DispatchQueue.main.async(execute: { self.delegate?.dfuStateDidChange(to: .connecting) }) - peripheral.switchToNewPeripheralAndConnect() - return + return true } // If not, we are done here. Congratulations! DispatchQueue.main.async(execute: { @@ -155,5 +154,6 @@ extension DFUExecutor { // Release the cyclic reference peripheral.destroy() + return false } } diff --git a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheral.swift b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheral.swift index 92cd255..c09350f 100644 --- a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheral.swift +++ b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/GenericDFU/DFUPeripheral.swift @@ -179,6 +179,10 @@ internal class BaseDFUPeripheral : NSObject, BaseDF } func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) { + guard peripheral.isEqual(self.peripheral) else { + return + } + cleanUp() logger.d("[Callback] Central Manager did connect peripheral") @@ -194,6 +198,10 @@ internal class BaseDFUPeripheral : NSObject, BaseDF } func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) { + guard peripheral.isEqual(self.peripheral) else { + return + } + cleanUp() if let error = error { @@ -207,6 +215,10 @@ internal class BaseDFUPeripheral : NSObject, BaseDF } func centralManager(_ central: CBCentralManager, didDisconnectPeripheral peripheral: CBPeripheral, error: Error?) { + guard peripheral.isEqual(self.peripheral) else { + return + } + cleanUp() // We may expect an error with @@ -476,8 +488,23 @@ internal class BaseCommonDFUPeripheral Bool } diff --git a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUControlPoint.swift b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUControlPoint.swift index cc3ded3..7525d29 100644 --- a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUControlPoint.swift +++ b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/Characteristics/DFUControlPoint.swift @@ -288,17 +288,18 @@ internal struct PacketReceiptNotification { // Set the peripheral delegate to self peripheral.delegate = self - - logger.a("Uploading firmware...") - logger.v("Sending firmware to DFU Packet characteristic...") } // MARK: - Peripheral Delegate callbacks func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: Error?) { if error != nil { - logger.e("Enabling notifications failed") + logger.e("Enabling notifications failed. Check if Service Changed service is enabled.") logger.e(error!) + // Note: + // Error 253: Unknown ATT error. + // This most proably is caching issue. Check if your device had Service Changed characteristic (for non-bonded devices) + // in both app and bootloader modes. For bonded devices make sure it sends the Service Changed indication after connecting. report?(.enablingControlPointFailed, "Enabling notifications failed") } else { logger.v("Notifications enabled for \(characteristic.uuid.uuidString)") @@ -317,8 +318,12 @@ internal struct PacketReceiptNotification { if error != nil { if !resetSent { - logger.e("Writing to characteristic failed") + logger.e("Writing to characteristic failed. Check if Service Changed service is enabled.") logger.e(error!) + // Note: + // Error 3: Writing is not permitted + // This most proably is caching issue. Check if your device had Service Changed characteristic (for non-bonded devices) + // in both app and bootloader modes. For bonded devices make sure it sends the Service Changed indication after connecting. report?(.writingCharacteristicFailed, "Writing to characteristic failed") } else { // When a 'JumpToBootloader', 'Activate and Reset' or 'Reset' command is sent the device may reset before sending the acknowledgement. diff --git a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUExecutor.swift b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUExecutor.swift index b546952..fe838c1 100644 --- a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUExecutor.swift +++ b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/DFU/LegacyDFUExecutor.swift @@ -19,6 +19,8 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import Foundation +import Dispatch internal class LegacyDFUExecutor : DFUExecutor, LegacyDFUPeripheralDelegate { typealias DFUPeripheralType = LegacyDFUPeripheral diff --git a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheral.swift b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheral.swift index 0331c05..08e478f 100644 --- a/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheral.swift +++ b/MetaWear/Pods/iOSDFULibrary/iOSDFULibrary/Classes/Implementation/LegacyDFU/Peripherals/LegacyDFUPeripheral.swift @@ -23,6 +23,7 @@ import CoreBluetooth internal class LegacyDFUPeripheral : BaseCommonDFUPeripheral { + var slowDfuMode = false // MARK: - Peripheral API @@ -71,6 +72,7 @@ internal class LegacyDFUPeripheral : BaseCommonDFUPeripheral 2) { + prn = 2 + } + dfuService!.sendPacketReceiptNotificationRequest(prn, onSuccess: { // Now the service is ready to send the firmware - self.dfuService!.sendFirmware(aFirmware, andReportProgressTo: progressDelegate, + self.dfuService!.sendFirmware(aFirmware, withDelay: self.slowDfuMode, andReportProgressTo: progressDelegate, onSuccess: { self.delegate?.peripheralDidReceiveFirmware() }, onError: self.defaultErrorCallback ) @@ -172,6 +183,12 @@ internal class LegacyDFUPeripheral : BaseCommonDFUPeripheral - -@property (nonatomic) MBLFilter *pressureEvent; -@property (nonatomic) MBLFilter *xFilter; -@property (nonatomic) MBLFilter *zFilter; - -- (void)startSession; -- (void)stopSession; - -@end diff --git a/MetaWear/Tests/Integration/AccelConfig.m b/MetaWear/Tests/Integration/AccelConfig.m deleted file mode 100644 index 1425464..0000000 --- a/MetaWear/Tests/Integration/AccelConfig.m +++ /dev/null @@ -1,82 +0,0 @@ -/** - * AccelConfig.m - * MetaWearTests - * - * Created by Stephen Schiffli on 4/18/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "AccelConfig.h" - - -@implementation AccelConfig - -- (void)runOnDeviceBoot:(MBLMetaWear *)device -{ - MBLBarometerBosch *barometer = (MBLBarometerBosch *)device.barometer; - self.pressureEvent = [barometer.periodicPressure changeOfEventByDelta:1.8 output:MBLDeltaValueOutputAbsolute]; - - self.xFilter = [device.accelerometer.xAxisReadyEvent averageOfEventWithDepth:128]; - self.zFilter = [device.accelerometer.zAxisReadyEvent averageOfEventWithDepth:128]; -} - -- (void)startSession -{ - [self.pressureEvent startLoggingAsync]; - - [self.xFilter programCommandsToRunOnEventAsync:^{ - [self.xFilter resetAsync]; - }]; - [self.xFilter startLoggingAsync]; - - [self.zFilter programCommandsToRunOnEventAsync:^{ - [self.zFilter resetAsync]; - }]; - [self.zFilter startLoggingAsync]; -} - -- (void)stopSession -{ - [[self.pressureEvent downloadLogAndStopLoggingAsync:YES] success:^(NSArray *result) { - NSLog(@"%@", result); - }]; - - [[self.xFilter downloadLogAndStopLoggingAsync:YES] success:^(NSArray *result) { - NSLog(@"%@", result); - }]; - [self.xFilter eraseCommandsToRunOnEventAsync]; - - [[self.zFilter downloadLogAndStopLoggingAsync:YES] success:^(NSArray *result) { - NSLog(@"%@", result); - }]; - [self.zFilter eraseCommandsToRunOnEventAsync]; -} - -@end diff --git a/MetaWear/Tests/Integration/AccelerometerTests.m b/MetaWear/Tests/Integration/AccelerometerTests.m deleted file mode 100644 index dc309ed..0000000 --- a/MetaWear/Tests/Integration/AccelerometerTests.m +++ /dev/null @@ -1,163 +0,0 @@ -/** - * AccelerometerTests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 10/15/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" - -@interface AccelerometerTests : MetaWearTest -@end - -@implementation AccelerometerTests - -- (void)testDataUpdates -{ - self.device.accelerometer.sampleFrequency = 800; - [self eventUpdateTest:self.device.accelerometer.dataReadyEvent time:3]; -} - -- (void)testDataLogging -{ - self.device.accelerometer.sampleFrequency = 100; - [self eventLoggingTest:self.device.accelerometer.dataReadyEvent time:2]; -} - -- (void)testXAxisUpdates -{ - self.device.accelerometer.sampleFrequency = 50; - [self eventUpdateTest:self.device.accelerometer.xAxisReadyEvent time:5]; -} - -- (void)testXAxisLogging -{ - self.device.accelerometer.sampleFrequency = 50; - [self eventLoggingTest:self.device.accelerometer.xAxisReadyEvent time:5]; -} - -- (void)testYAxisUpdates -{ - self.device.accelerometer.sampleFrequency = 50; - [self eventUpdateTest:self.device.accelerometer.yAxisReadyEvent time:5]; -} - -- (void)testYAxisLogging -{ - self.device.accelerometer.sampleFrequency = 50; - [self eventLoggingTest:self.device.accelerometer.yAxisReadyEvent time:5]; -} - -- (void)testZAxisUpdates -{ - self.device.accelerometer.sampleFrequency = 50; - [self eventUpdateTest:self.device.accelerometer.zAxisReadyEvent time:5]; -} - -- (void)testZAxisLogging -{ - self.device.accelerometer.sampleFrequency = 50; - [self eventLoggingTest:self.device.accelerometer.zAxisReadyEvent time:5]; -} - -- (void)testRMSUpdates -{ - [self eventUpdateTest:self.device.accelerometer.rmsDataReadyEvent time:5]; -} - -- (void)testRMSLogging -{ - [self eventLoggingTest:self.device.accelerometer.rmsDataReadyEvent time:5]; -} - -- (void)testLogRecovery -{ - [self.device.accelerometer.rmsDataReadyEvent startLoggingAsync]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testLogRecovery"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.testDebug resetDevice]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [self.device.accelerometer.rmsDataReadyEvent startLoggingAsync]; - [[self.device.accelerometer.rmsDataReadyEvent downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - for (MBLRMSAccelerometerData *obj in result) { - NSLog(@"%@", obj); - } - [waitingExpectation fulfill]; - }]; - return nil; - }]; - }); - }); - [self waitForExpectationsWithTimeout:30 handler:nil]; -} - - -- (void)testSummedRMSPeriodicUpdates -{ - MBLEvent *event = [[self.device.accelerometer.rmsDataReadyEvent summationOfEvent] periodicSampleOfEvent:200]; - [self eventUpdateTest:event time:5]; -} - -- (void)testSummedRMSPeriodicLogging -{ - MBLEvent *event = [[self.device.accelerometer.rmsDataReadyEvent summationOfEvent] periodicSampleOfEvent:200]; - [self eventLoggingTest:event time:5]; -} - -- (void)testRMSLoggingDisconnect -{ - [self.device.accelerometer.rmsDataReadyEvent startLoggingAsync]; - [[self.device disconnectAsync] success:^(id result) { - NSLog(@"Bye Bye"); - }]; - - // Reconnect after a few seconds - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testRMSLoggingDisconnect"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.device.accelerometer.rmsDataReadyEvent.isLogging); - [[self.device.accelerometer.rmsDataReadyEvent downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - for (MBLRMSAccelerometerData *obj in result) { - NSLog(@"Log: %@", obj); - } - [waitingExpectation fulfill]; - }]; - return nil; - }]; - }); - [self waitForExpectationsWithTimeout:60 handler:nil]; -} - -@end diff --git a/MetaWear/Tests/Integration/AutomaticTests.m b/MetaWear/Tests/Integration/AutomaticTests.m deleted file mode 100644 index 264247b..0000000 --- a/MetaWear/Tests/Integration/AutomaticTests.m +++ /dev/null @@ -1,2115 +0,0 @@ -/** - * AutomaticTests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 10/7/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" -#import "TempLoggerConfiguration.h" -#import "IncrementingEventConfig.h" - -@interface AutomaticTests : MetaWearTest -@end - -@implementation AutomaticTests - -// Helpful Macros - Note we don't use functions to preserve proper line -// numbers in error reporting -#define AssertModule(module, imp, rev) \ - XCTAssertNotNil(module); \ - XCTAssertEqual(module.moduleInfo.moduleImplementation, imp); \ - XCTAssertEqual(module.moduleInfo.moduleRevision, rev); - -#define AssertNilModule(module) \ - XCTAssertNil(module); - -#define CapabilityCheck(thingThatNeedsToExist) \ - if (!(thingThatNeedsToExist)) { self.disconnectAtEnd = NO; return; } - -- (void)testModuleVersions -{ - XCTAssertEqual(self.model, self.device.model); - switch (self.model) { - case MBLModelMetaWearR: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 1); - AssertModule(self.device.accelerometer, 0, 1); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 2); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 2); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 1); - AssertModule(self.device.ancs, 0, 0); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 6); - AssertNilModule(self.device.barometer); - AssertNilModule(self.device.gyro); - AssertNilModule(self.device.ambientLight); - AssertNilModule(self.device.magnetometer); - AssertNilModule(self.device.hygrometer); - AssertNilModule(self.device.photometer); - AssertNilModule(self.device.proximity); - break; - case MBLModelMetaWearRG: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 1); - AssertModule(self.device.accelerometer, 1, 1); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 2); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 0); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 1); - AssertModule(self.device.ancs, 0, 0); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 4); - AssertNilModule(self.device.barometer); - AssertModule(self.device.gyro, 0, 1); - AssertNilModule(self.device.ambientLight); - AssertNilModule(self.device.magnetometer); - AssertNilModule(self.device.hygrometer); - AssertNilModule(self.device.photometer); - AssertNilModule(self.device.proximity); - break; - case MBLModelMetaWearRPro: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 1); - AssertModule(self.device.accelerometer, 1, 1); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 2); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 0); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 1); - AssertModule(self.device.ancs, 0, 0); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 4); - AssertModule(self.device.barometer, 0, 0); - AssertModule(self.device.gyro, 0, 1); - AssertModule(self.device.ambientLight, 0, 0); - AssertNilModule(self.device.magnetometer); - AssertNilModule(self.device.hygrometer); - AssertNilModule(self.device.photometer); - AssertNilModule(self.device.proximity); - break; - case MBLModelMetaWearC: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 1); - AssertModule(self.device.accelerometer, 1, 1); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 2); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 0); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 1); - AssertModule(self.device.ancs, 0, 0); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 4); - AssertNilModule(self.device.barometer); - AssertModule(self.device.gyro, 0, 1); - AssertNilModule(self.device.ambientLight); - AssertNilModule(self.device.magnetometer); - AssertNilModule(self.device.hygrometer); - AssertNilModule(self.device.photometer); - AssertNilModule(self.device.proximity); - break; - case MBLModelMetaWearCPro: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 1); - AssertModule(self.device.accelerometer, 1, 1); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 2); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 0); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 1); - AssertModule(self.device.ancs, 0, 0); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 4); - AssertModule(self.device.barometer, 0, 0); - AssertModule(self.device.gyro, 0, 1); - AssertModule(self.device.ambientLight, 0, 0); - AssertModule(self.device.magnetometer, 0, 1); - AssertNilModule(self.device.hygrometer); - AssertNilModule(self.device.photometer); - AssertNilModule(self.device.proximity); - break; - case MBLModelMetaDetector: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 1); - AssertModule(self.device.accelerometer, 3, 1); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 2); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 0); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 1); - AssertModule(self.device.ancs, 0, 0); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 4); - AssertNilModule(self.device.barometer); - AssertNilModule(self.device.gyro); - AssertModule(self.device.ambientLight, 0, 0); - AssertNilModule(self.device.magnetometer); - AssertNilModule(self.device.hygrometer); - AssertNilModule(self.device.photometer); - AssertModule(self.device.proximity, 0, 0); - break; - case MBLModelMetaEnvironment: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 0); - AssertModule(self.device.accelerometer, 3, 0); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 1); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 0); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 0); - AssertModule(self.device.ancs, 0, 0); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 3); - AssertModule(self.device.barometer, 1, 0); - AssertNilModule(self.device.gyro); - AssertNilModule(self.device.ambientLight); - AssertNilModule(self.device.magnetometer); - AssertModule(self.device.hygrometer, 0, 0); - AssertModule(self.device.photometer, 0, 0); - AssertNilModule(self.device.proximity); - break; - case MBLModelMetaTracker: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 1); - AssertModule(self.device.accelerometer, 1, 1); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 2); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 0); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 1); - AssertNilModule(self.device.ancs); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 4); - AssertModule(self.device.barometer, 1, 0); - AssertModule(self.device.gyro, 0, 1); - AssertModule(self.device.ambientLight, 0, 0); - AssertNilModule(self.device.magnetometer); - AssertModule(self.device.hygrometer, 0, 0); - AssertNilModule(self.device.photometer); - AssertNilModule(self.device.proximity); - break; - case MBLModelMetaMotionR: - AssertModule(self.device.mechanicalSwitch, 0, 0); - AssertModule(self.device.led, 0, 1); - AssertModule(self.device.accelerometer, 1, 2); - AssertModule(self.device.temperature, 1, 0); - AssertModule(self.device.gpio, 0, 2); - AssertModule(self.device.neopixel, 0, 0); - AssertModule(self.device.iBeacon, 0, 0); - AssertModule(self.device.hapticBuzzer, 0, 0); - AssertModule(self.device.dataProcessor, 0, 2); - AssertModule(self.device.command, 0, 0); - AssertModule(self.device.logging, 0, 2); - AssertModule(self.device.timer, 0, 0); - AssertModule(self.device.serial, 0, 1); - AssertNilModule(self.device.ancs); - AssertModule(self.device.macro, 0, 1); - AssertNilModule(self.device.conductance); - AssertModule(self.device.settings, 0, 6); - AssertModule(self.device.barometer, 0, 0); - AssertModule(self.device.gyro, 0, 1); - AssertModule(self.device.ambientLight, 0, 0); - AssertModule(self.device.magnetometer, 0, 2); - AssertNilModule(self.device.hygrometer); - AssertNilModule(self.device.photometer); - AssertNilModule(self.device.proximity); - AssertModule(self.device.sensorFusion, 0, 0); - break; - default: - XCTFail("Not enabeled"); - break; - } -} - - -- (void)testArchiveSpeed -{ - [self measureBlock:^{ - [self.device synchronizeAsync]; - dispatch_sync([MBLConstants metaWearQueue], ^{ - }); - }]; -} - -- (void)testSwitchRead -{ - CapabilityCheck(self.device.mechanicalSwitch.switchValue); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testSwitchRead"]; - - [[self.device.mechanicalSwitch.switchValue readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqual(result.value.boolValue, NO); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testMultiConnect -{ - XCTestExpectation *firstConnection = [self expectationWithDescription:@"firstConnection"]; - XCTestExpectation *secondConnection = [self expectationWithDescription:@"secondConnection"]; - - [[self.device disconnectAsync] success:^(id result) { - [[self.device connectAsync] success:^(id result) { - [firstConnection fulfill]; - }]; - }]; - [[self.device disconnectAsync] success:^(id result) { - [[self.device connectAsync] success:^(id result) { - [secondConnection fulfill]; - }]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testMultiTimeoutConnect -{ - XCTestExpectation *firstConnection = [self expectationWithDescription:@"firstConnection"]; - XCTestExpectation *secondConnection = [self expectationWithDescription:@"secondConnection"]; - - [[self.device disconnectAsync] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [[self.device connectWithTimeoutAsync:0.1] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertEqual(t.error.domain, kMBLErrorDomain); - XCTAssertEqual(t.error.code, kMBLErrorConnectionTimeout); - [firstConnection fulfill]; - return nil; - }]; - [[self.device connectWithTimeoutAsync:30] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [secondConnection fulfill]; - return nil; - }]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:30 handler:nil]; -} - -- (void)testDisconnectedErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testDisconnectedErrors"]; - - [[[self.device disconnectAsync] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.device setConfigurationAsync:nil]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertEqual(t.error.code, kMBLErrorNotConnected); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testAccelerometerUpdates -{ - CapabilityCheck(self.device.accelerometer.dataReadyEvent); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testAccelerometerUpdates"]; - - self.device.accelerometer.sampleFrequency = [self accelerometerFrequencyNear:50]; - int __block count = 0; - [self.device.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - // The RMS when not moving should be gravity only, or sqrt(1000*1000/3) = 577 - XCTAssertEqualWithAccuracy(obj.RMS, 0.577, 0.1); - count++; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.accelerometer.dataReadyEvent stopNotificationsAsync]; - // Check for 2 seconds worth of updates - XCTAssertEqualWithAccuracy(count, self.device.accelerometer.sampleFrequency * 2.0, self.device.accelerometer.sampleFrequency / 2.0); - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testAccelerometerStreamDisconnect -{ - CapabilityCheck(self.device.accelerometer.dataReadyEvent); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"waitingExpectation"]; - XCTestExpectation *errorExpectation = [self expectationWithDescription:@"errorExpectation"]; - - self.device.accelerometer.sampleFrequency = 50; - BOOL __block expectSample = YES; - [self.device.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - if (error) { - [errorExpectation fulfill]; - } else { - XCTAssertEqualWithAccuracy(obj.RMS, 0.577, 0.1); - XCTAssertTrue(expectSample); - } - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device disconnectAsync] success:^(id result) { - expectSample = NO; - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - // Make sure we don't get any stray notifications - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - return nil; - }]; - }]; - }); - - [self waitForExpectationsWithTimeout:30 handler:nil]; -} - -- (void)testAccelerometerLogging -{ - CapabilityCheck(self.device.accelerometer.dataReadyEvent); - - self.device.accelerometer.sampleFrequency = [self accelerometerFrequencyNear:200]; - - int __block notificationCount = 0; - [self.device.accelerometer.dataReadyEvent startLoggingAsync]; - [self.device.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerData *sample, NSError *error) { - XCTAssertEqualWithAccuracy(sample.RMS, 0.577, 0.1); - notificationCount++; - }]; - - float __block progress = 0; - int __block progressCount = 0; - - XCTestExpectation *loggingExpectation = [self expectationWithDescription:@"logging accelerometer data"]; - // Let the log run for 3.0 seconds - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.accelerometer.dataReadyEvent stopNotificationsAsync]; - [[self.device.accelerometer.dataReadyEvent downloadLogAndStopLoggingAsync:YES progressHandler:^(float number) { - XCTAssertLessThanOrEqual(number, 1.0); - XCTAssertGreaterThanOrEqual(number, 0.0); - XCTAssertGreaterThanOrEqual(number, progress); - progress = number; - progressCount++; - }] success:^(NSArray * _Nonnull result) { - // Make sure progress reported complete before this handler gets called - XCTAssertEqual(progress, 1.0); - // Make sure we got at least as many log entries as notifications - XCTAssertGreaterThanOrEqual(result.count, notificationCount); - // Make sure the number of notifications is in an expected range...this is from trial and error - XCTAssertEqualWithAccuracy(notificationCount, self.device.accelerometer.sampleFrequency * 3.0, self.device.accelerometer.sampleFrequency / 2.0); - - for (MBLAccelerometerData *sample in result) { - // The RMS when not moving should be gravity only, or sqrt(1000*1000/3) = 577 - XCTAssertEqualWithAccuracy(sample.RMS, 0.577, 0.1); - } - // Finished the test! - // We were having trouble with extra samples getting into the log after the above - // readout, so here we do an extra purge after the accelermoeter has had time to - // empty its buffers. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device.logging stopAndClearLog] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [loggingExpectation fulfill]; - return nil; - }]; - }); - }]; - }); - [self waitForExpectationsWithTimeout:60 handler:nil]; - XCTAssertGreaterThanOrEqual(progressCount, 4); -} - -- (void)testStopLogWithoutDownload -{ - CapabilityCheck(self.device.accelerometer.dataReadyEvent); - - self.device.accelerometer.sampleFrequency = [self accelerometerFrequencyNear:200]; - - int __block entryCount = 0; - [self.device.accelerometer.dataReadyEvent startLoggingAsync]; - - XCTestExpectation *loggingExpectation = [self expectationWithDescription:@"logging accelerometer data"]; - // Let the log run for 2.0 seconds - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device.accelerometer.dataReadyEvent stopLoggingAsync] success:^(MBLNumericData * _Nonnull result) { - entryCount = result.value.intValue; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device.accelerometer.dataReadyEvent downloadLogAndStopLoggingAsync:YES remainingHandler:^(uint32_t totalEntries, uint32_t remainingEntries) { - XCTAssertEqual(totalEntries, entryCount); - }] success:^(NSArray * _Nonnull result) { - // Finished the test! - // We were having trouble with extra samples getting into the log after the above - // readout, so here we do an extra purge after the accelermoeter has had time to - // empty its buffers. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device.logging stopAndClearLog] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [loggingExpectation fulfill]; - return nil; - }]; - }); - }]; - }); - }]; - }); - [self waitForExpectationsWithTimeout:60 handler:nil]; -} - -- (void)testAccelerometerRMSLogging -{ - CapabilityCheck(self.device.accelerometer.rmsDataReadyEvent); - - self.device.accelerometer.sampleFrequency = [self accelerometerFrequencyNear:200]; - - int __block notificationCount = 0; - [self.device.accelerometer.rmsDataReadyEvent startLoggingAsync]; - [self.device.accelerometer.rmsDataReadyEvent startNotificationsWithHandlerAsync:^(MBLRMSAccelerometerData *sample, NSError *error) { - XCTAssertNil(error); - XCTAssertEqualWithAccuracy(sample.rms, 0.577, 0.1); - notificationCount++; - }]; - - uint32_t __block previousTotal = 0; - uint32_t __block previousRemaining = UINT32_MAX; - int __block progressCount = 0; - - XCTestExpectation *loggingExpectation = [self expectationWithDescription:@"logging accelerometer data"]; - // Let the log run for 3.0 seconds - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.accelerometer.rmsDataReadyEvent stopNotificationsAsync]; - [[self.device.accelerometer.rmsDataReadyEvent downloadLogAndStopLoggingAsync:YES remainingHandler:^(uint32_t totalEntries, uint32_t remainingEntries) { - NSLog(@"%d %d", remainingEntries, totalEntries); - XCTAssertLessThanOrEqual(remainingEntries, totalEntries); - XCTAssertLessThanOrEqual(remainingEntries, previousRemaining); - previousRemaining = remainingEntries; - previousTotal = totalEntries; - progressCount++; - }] success:^(NSArray * _Nonnull result) { - // Make sure progress reported complete before this handler gets called - XCTAssertEqual(previousRemaining, 0); - // Make sure we got at least as many log entries as notifications - XCTAssertGreaterThanOrEqual(result.count, notificationCount); - // Make sure the number of notifications is in an expected range...this is from trial and error - XCTAssertEqualWithAccuracy(notificationCount, self.device.accelerometer.sampleFrequency * 3.0, self.device.accelerometer.sampleFrequency / 2.0); - - for (MBLRMSAccelerometerData *sample in result) { - // The RMS when not moving should be gravity only, or sqrt(1000*1000/3) = 577 - XCTAssertEqualWithAccuracy(sample.rms, 0.577, 0.1); - } - // Finished the test! - // We were having trouble with extra samples getting into the log after the above - // readout, so here we do an extra purge after the accelermoeter has had time to - // empty its buffers. - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device.logging stopAndClearLog] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [loggingExpectation fulfill]; - return nil; - }]; - }); - }]; - }); - [self waitForExpectationsWithTimeout:60 handler:nil]; - XCTAssertGreaterThanOrEqual(progressCount, 4); -} - -- (void)testTemperatureRead -{ - CapabilityCheck(self.device.temperature); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testTemperatureRead"]; - - NSMutableArray *tasks = [NSMutableArray array]; - for (MBLData *channel in self.device.temperature.channels) { - BFTask *readTask; - if ([channel isKindOfClass:[MBLExternalThermistor class]]) { - ((MBLExternalThermistor *)channel).readPin = 0; - ((MBLExternalThermistor *)channel).enablePin = 1; - readTask = [channel readAsync]; - } else { - readTask = [channel readAsync]; - [readTask success:^(MBLNumericData * _Nonnull result) { - // Make sure the temp is in an expected range - XCTAssertEqualWithAccuracy(result.value.floatValue, 35.0, 20.0); - }]; - } - [tasks addObject:readTask]; - } - - [[BFTask taskForCompletionOfAllTasks:tasks] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertNil(task.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testGpioReads -{ - CapabilityCheck(self.device.gpio); - - for (MBLGPIOPin *pin in self.device.gpio.pins) { - // TODO: Add pin change test - if (pin.digitalValue) { - { - // Digital out in high - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Digital out in high"]; - [pin setToDigitalValueAsync:NO]; - [pin setToDigitalValueAsync:YES]; - [[pin.digitalValue readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqual(result.value.boolValue, YES); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - { - // Digital out in low - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Digital out in low"]; - [pin setToDigitalValueAsync:YES]; - [pin setToDigitalValueAsync:NO]; - [[pin.digitalValue readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqual(result.value.boolValue, NO); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - { - // Digital in pullup - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Digital in pullup"]; - pin.configuration = MBLPinConfigurationPulldown; - pin.configuration = MBLPinConfigurationPullup; - [[pin.digitalValue readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqual(result.value.boolValue, YES); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - { - // Digital in pulldown - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Digital in pulldown"]; - pin.configuration = MBLPinConfigurationPullup; - pin.configuration = MBLPinConfigurationPulldown; - [[pin.digitalValue readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqual(result.value.boolValue, NO); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - } - if (pin.analogRatio) { - { - // Analog ratio in pullup - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Analog ratio in pullup"]; - pin.configuration = MBLPinConfigurationPulldown; - pin.configuration = MBLPinConfigurationPullup; - [[pin.analogRatio readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.value.floatValue, 0.976540, 0.25); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - { - // Analog ratio in pulldown - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Analog ratio in pulldown"]; - pin.configuration = MBLPinConfigurationPullup; - pin.configuration = MBLPinConfigurationPulldown; - [[pin.analogRatio readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.value.floatValue, 0.006843, 0.25); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - } - if (pin.analogAbsolute) { - { - // Analog abs in pullup - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Analog abs in pullup"]; - pin.configuration = MBLPinConfigurationPulldown; - pin.configuration = MBLPinConfigurationPullup; - [[pin.analogAbsolute readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.value.floatValue, 2.956000, 0.25); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - { - // Analog abs in pulldown - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Analog abs in pulldown"]; - pin.configuration = MBLPinConfigurationPullup; - pin.configuration = MBLPinConfigurationPulldown; - [[pin.analogAbsolute readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.value.floatValue, 0.024000, 0.25); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; - } - } - } -} - -- (void)testTimer -{ - CapabilityCheck(self.device.timer); - - MBLEvent *event = [self.device.timer eventWithPeriod:500 eventCount:4]; - - int __block count = 0; - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testTimer"]; - [event startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"%@", obj); - count++; - if (count == 4) { - [event stopNotificationsAsync]; - [waitingExpectation fulfill]; - } - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testLogDownloadWithoutStopping -{ - CapabilityCheck(self.device.temperature.onDieThermistor); - - int samplePeriod = 200; - int __block notificationCount = 0; - int __block logCount = 0; - - MBLEvent *event = [self.device.temperature.onDieThermistor periodicReadWithPeriod:samplePeriod]; - [event startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"%@", obj); - notificationCount++; - }]; - - [event startLoggingAsync]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - XCTAssertTrue(event.isLogging); - [[event downloadLogAndStopLoggingAsync:NO] success:^(NSArray * _Nonnull result) { - for (id obj in result) { - NSLog(@"Log: %@", obj); - } - logCount += result.count; - }]; - }); - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[event downloadLogAndStopLoggingAsync:NO] success:^(NSArray * _Nonnull result) { - for (id obj in result) { - NSLog(@"Log: %@", obj); - } - logCount += result.count; - }]; - }); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testLogDownloadWithoutStopping"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [event stopNotificationsAsync]; - [[event downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - for (id obj in result) { - NSLog(@"Log: %@", obj); - } - logCount += result.count; - XCTAssertGreaterThanOrEqual(logCount, notificationCount); - [waitingExpectation fulfill]; - }]; - }); - - [self waitForExpectationsWithTimeout:15 handler:nil]; -} - -- (void)recursiveSaturation:(int)i expectation:(XCTestExpectation *)expectation -{ - [[self.device disconnectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - NSLog(@"Bye Bye"); - // Reconnect after a random time goes by - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((arc4random() % 16) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - TempLoggerConfiguration *configuration = self.device.configuration; - XCTAssertNotNil(configuration); - XCTAssertTrue(configuration.periodicTemperature.isLogging); - [[configuration.periodicTemperature downloadLogAndStopLoggingAsync:i == 0 progressHandler:^(float number) { - NSLog(@"Progress: %f", number); - }] success:^(NSArray * _Nonnull result) { - XCTAssertNotEqual(result.count, 0); - NSLog(@"Total: %lu", (unsigned long)result.count); - if (i > 0) { - [self recursiveSaturation:i - 1 expectation:expectation]; - } else { - [expectation fulfill]; - } - }]; - return nil; - }]; - }); - return nil; - }]; -} - -- (void)testLogSaturation -{ - CapabilityCheck(self.device.temperature.onDieThermistor); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testLogSaturation recursive loop"]; - [[self.device setConfigurationAsync:[[TempLoggerConfiguration alloc] initWithPeriod:2]] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - if (!t.error) { - [self recursiveSaturation:2 expectation:waitingExpectation]; - } else { - [waitingExpectation fulfill]; - } - return nil; - }]; - [self waitForExpectationsWithTimeout:500 handler:nil]; - - // Now clear all the state - waitingExpectation = [self expectationWithDescription:@"testLogSaturation clear all state"]; - [[[self.device connectAsync] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.device setConfigurationAsync:nil]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:45 handler:nil]; -} - -- (void)testLogDownloadDisconnect -{ - CapabilityCheck(self.device.timer); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"logging"]; - - [[[self.device setConfigurationAsync:[[IncrementingEventConfig alloc] initWithPeriod:20]] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - // Give it some time to log quality data - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - IncrementingEventConfig *configuration = self.device.configuration; - XCTAssertNotNil(configuration); - XCTAssertTrue(configuration.incrementingCounter.isLogging); - [[configuration.incrementingCounter downloadLogAndStopLoggingAsync:YES progressHandler:^(float number) { - if (number > 0.25) { - NSLog(@"Disconnecting!"); - [[MBLMetaWearManager sharedManager] disconnectMetaWear:self.device fromPeripheralSide:NO]; - } - }] failure:^(NSError * _Nonnull error) { - [waitingExpectation fulfill]; - }]; - }); - return nil; - }] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:40 handler:nil]; - - waitingExpectation = [self expectationWithDescription:@"downloading"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - IncrementingEventConfig *configuration = self.device.configuration; - if (configuration) { - [[configuration.incrementingCounter downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - NSLog(@"%@", result); - for (int i = 1; i <= result.count; i++) { - MBLNumericData *obj = result[i - 1]; - XCTAssertEqual(obj.value.intValue, i); - } - [waitingExpectation fulfill]; - }]; - } - return nil; - }]; - }); - [self waitForExpectationsWithTimeout:40 handler:nil]; - - // Now clear all the state - waitingExpectation = [self expectationWithDescription:@"clearing state"]; - [[[self.device connectAsync] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.device setConfigurationAsync:nil]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:45 handler:nil]; -} - -- (void)testLogDownloadReset -{ - CapabilityCheck(self.device.timer); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"logging"]; - [[self.device setConfigurationAsync:[[IncrementingEventConfig alloc] initWithPeriod:20]] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - if (!t.error) { - // Give it some time to log quality data - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - IncrementingEventConfig *configuration = self.device.configuration; - XCTAssertNotNil(configuration); - XCTAssertTrue(configuration.incrementingCounter.isLogging); - [[configuration.incrementingCounter downloadLogAndStopLoggingAsync:YES progressHandler:^(float number) { - if (number > 0.25) { - NSLog(@"Resetting!"); - [self.device.testDebug resetDevice]; - } - }] failure:^(NSError * _Nonnull error) { - [waitingExpectation fulfill]; - }]; - }); - } else { - [waitingExpectation fulfill]; - } - return nil; - }]; - [self waitForExpectationsWithTimeout:40 handler:nil]; - - waitingExpectation = [self expectationWithDescription:@"downloading"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - IncrementingEventConfig *configuration = self.device.configuration; - XCTAssertNotNil(configuration); - [[configuration.incrementingCounter downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - NSLog(@"%@", result); - int offset = 0; - for (int i = 1; i <= result.count; i++) { - MBLNumericData *obj = result[i - 1]; - if (obj.value.intValue == 1) { - offset = i - 1; - } - XCTAssertEqual(obj.value.intValue, i - offset); - } - [waitingExpectation fulfill]; - }]; - return nil; - }]; - }); - [self waitForExpectationsWithTimeout:40 handler:nil]; - - // Now clear all the state - waitingExpectation = [self expectationWithDescription:@"clear state"]; - [[[self.device connectAsync] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.device setConfigurationAsync:nil]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:45 handler:nil]; -} - -- (void)testLogDontAckReadout -{ - // TODO: Don't make this depend on i2c - CapabilityCheck(self.device.serial); - CapabilityCheck((self.i2cDevice != 0)); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reset"]; - - const int ENTRIES = 200; - const float PERIOD = 0.010; - NSInteger __block sizeFirstReadout = 0; - - MBLI2CData *whoami = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cReadOnlyReg length:1]; - MBLEvent *periodicReg = [whoami periodicReadWithPeriod:PERIOD * 1000.0 eventCount:ENTRIES]; - [[periodicReg startLoggingAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(((ENTRIES * PERIOD) + 1.0) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self.device.logging->noAckMode = YES; - [[periodicReg downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - NSLog(@"%@", result); - sizeFirstReadout = result.count; - for (MBLDataSample *entry in result) { - XCTAssertEqual(self.i2cReadOnlyRegValue, *(uint8_t *)entry.data.bytes); - } - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.testDebug resetDevice]; // Reset after not ack-ing - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - }); - }]; - }); - return nil; - }]; - - - [self waitForExpectationsWithTimeout:30 handler:nil]; - - waitingExpectation = [self expectationWithDescription:@"download"]; - - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - MBLI2CData *whoami = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cReadOnlyReg length:1]; - MBLEvent *periodicReg = [whoami periodicReadWithPeriod:PERIOD * 1000.0 eventCount:ENTRIES]; - [periodicReg startLoggingAsync]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(((ENTRIES * PERIOD) + 1.0) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self.device.logging->noAckMode = NO; - [[periodicReg downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - NSLog(@"%@", result); - XCTAssertEqual(result.count, (ENTRIES * 2) - sizeFirstReadout); - for (MBLDataSample *entry in result) { - XCTAssertEqual(self.i2cReadOnlyRegValue, *(uint8_t *)entry.data.bytes); - } - [waitingExpectation fulfill]; - }]; - }); - return nil; - }]; - - [self waitForExpectationsWithTimeout:120 handler:nil]; // TODO: Set this timeout down -} - -- (void)testLogDownloadAfterReconnect -{ - CapabilityCheck(self.device.temperature.onDieThermistor); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testLogDownloadAfterReconnect"]; - - [[self.device setConfigurationAsync:[[TempLoggerConfiguration alloc] initWithPeriod:200]] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - [[self.device disconnectAsync] success:^(id result) { - NSLog(@"Bye Bye"); - }]; - - // Reconnect after a few seconds - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - TempLoggerConfiguration *configuration = self.device.configuration; - XCTAssertNotNil(configuration); - XCTAssertTrue(configuration.periodicTemperature.isLogging); - [[configuration.periodicTemperature downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - XCTAssertNotEqual(result.count, 0); - for (id obj in result) { - NSLog(@"Log: %@", obj); - } - [waitingExpectation fulfill]; - }]; - return nil; - }]; - }); - return nil; - }]; - - [self waitForExpectationsWithTimeout:60 handler:nil]; - - // Now clear all the state - waitingExpectation = [self expectationWithDescription:@"clear state"]; - [[[self.device connectAsync] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.device setConfigurationAsync:nil]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:45 handler:nil]; -} - -- (void)testPeriodicLogDownloadAfterReset -{ - CapabilityCheck(self.device.temperature.onDieThermistor); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testPeriodicLogDownloadAfterReset"]; - - const double frequency = 20; - [[self.device setConfigurationAsync:[[TempLoggerConfiguration alloc] initWithPeriod:1000 / frequency]] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - NSDate *methodStart = [NSDate date]; - XCTAssertNil(t.error); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device resetDevice]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - TempLoggerConfiguration *configuration = self.device.configuration; - XCTAssertNotNil(configuration); - XCTAssertTrue(configuration.periodicTemperature.isLogging); - NSDate *methodFinish = [NSDate date]; - [[configuration.periodicTemperature downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - NSLog(@"%@", result); - BOOL singleZero = NO; - NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart]; - XCTAssertEqualWithAccuracy(result.count, frequency * executionTime, frequency / 2.0); - for (MBLNumericData *obj in result) { - if (!singleZero && (fabs(obj.value.doubleValue) < DBL_EPSILON)) { - singleZero = YES; - continue; - } - XCTAssertEqualWithAccuracy(obj.value.floatValue, 35.0, 20.0); - } - [waitingExpectation fulfill]; - }]; - return nil; - }]; - }); - }); - return nil; - }]; - [self waitForExpectationsWithTimeout:60 handler:nil]; - - // Now clear all the state - waitingExpectation = [self expectationWithDescription:@"clear state"]; - [[[self.device connectAsync] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - return [self.device setConfigurationAsync:nil]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:45 handler:nil]; -} - -- (void)testBigStream -{ - MBLBarometerBosch *barometer = (MBLBarometerBosch *)self.device.barometer; - if ([barometer isKindOfClass:[MBLBarometerBMP280 class]]) { - ((MBLBarometerBMP280 *)barometer).standbyTime = MBLBarometerBMP280Standby62_5; - } else if ([barometer isKindOfClass:[MBLBarometerBME280 class]]) { - ((MBLBarometerBME280 *)barometer).standbyTime = MBLBarometerBME280Standby62_5; - } - MBLMagnetometerBMM150 *magnetometer = (MBLMagnetometerBMM150 *)self.device.magnetometer; - magnetometer.powerPreset = MBLMagnetometerBMM150PresetLowPower; - self.device.gyro.sampleFrequency = 25; - MBLAccelerometer *accelerometer = self.device.accelerometer; - if ([accelerometer isKindOfClass:[MBLAccelerometerBMA255 class]]) { - accelerometer.sampleFrequency = 31.26; - } else if ([accelerometer isKindOfClass:[MBLAccelerometerBMI160 class]]) { - accelerometer.sampleFrequency = 25; - } else if ([accelerometer isKindOfClass:[MBLAccelerometerMMA8452Q class]]) { - accelerometer.sampleFrequency = 12.5; - } - - int __block barometerCount = 0; - int __block magnetometerCount = 0; - int __block gyroCount = 0; - int __block accelerometerCount = 0; - - NSMutableArray *tasks = [NSMutableArray array]; - if (barometer.periodicAltitude) { - [tasks addObject:[barometer.periodicAltitude startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - barometerCount++; - }]]; - } - if (magnetometer.periodicMagneticField) { - [tasks addObject:[magnetometer.periodicMagneticField startNotificationsWithHandlerAsync:^(MBLMagnetometerData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - magnetometerCount++; - }]]; - } - if (self.device.gyro.dataReadyEvent) { - [tasks addObject:[self.device.gyro.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLGyroData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - gyroCount++; - }]]; - } - if (self.device.accelerometer.dataReadyEvent) { - [tasks addObject:[self.device.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - accelerometerCount++; - }]]; - } - [[BFTask taskForCompletionOfAllTasks:tasks] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertNil(task.error); - return nil; - }]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"checking counts"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - NSMutableArray *tasks = [NSMutableArray array]; - if (barometer.periodicAltitude) { - [tasks addObject:[barometer.periodicAltitude stopNotificationsAsync]]; - XCTAssertEqualWithAccuracy(barometerCount, 142, 25); - } - if (magnetometer.periodicMagneticField) { - [tasks addObject:[magnetometer.periodicMagneticField stopNotificationsAsync]]; - XCTAssertEqualWithAccuracy(magnetometerCount, 110, 25); - } - if (self.device.gyro.dataReadyEvent) { - [tasks addObject:[self.device.gyro.dataReadyEvent stopNotificationsAsync]]; - XCTAssertEqualWithAccuracy(gyroCount, 250, 25); - } - if (self.device.accelerometer.dataReadyEvent) { - [tasks addObject:[self.device.accelerometer.dataReadyEvent stopNotificationsAsync]]; - XCTAssertEqualWithAccuracy(accelerometerCount, accelerometer.sampleFrequency * 10, accelerometer.sampleFrequency); - } - - [[BFTask taskForCompletionOfAllTasks:tasks] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertNil(task.error); - [waitingExpectation fulfill]; - return nil; - }]; - }); - [self waitForExpectationsWithTimeout:50 handler:nil]; -} - -- (void)testDroppedReadsWhileStreaming -{ - CapabilityCheck(self.device.accelerometer.dataReadyEvent); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"Make sure we dont drop reads"]; - - self.device.accelerometer.sampleFrequency = 400; - [self.device.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - }]; - - int __block count = 0; - const int expected = 1000; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - for (int i = 0; i < expected; i++) { - [self.device.testDebug.keyRegister writeDataAsync:[NSData dataWithBytes:&i length:4]]; - [[self.device.testDebug.keyRegister readAsync] success:^(MBLNumericData *result) { - XCTAssertEqual(result.value.intValue, i); - count++; - if (count == expected) { - [waitingExpectation fulfill]; - } - }]; - } - }); - - [self waitForExpectationsWithTimeout:60 handler:nil]; - XCTAssertEqual(count, expected); - if (count != expected) { - // Flush out all the droped reads - [self.device.zeroCountQueue forceResume]; - } - - [self.device.accelerometer.dataReadyEvent stopNotificationsAsync]; -} - -- (void)testI2CReadWrite -{ - CapabilityCheck(self.device.serial); - CapabilityCheck((self.i2cDevice != 0)); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLI2CData *aReg = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cScratchReg length:1]; - [aReg writeByteAsync:self.i2cScratchRegValue]; - [[aReg readAsync] success:^(MBLDataSample * _Nonnull result) { - XCTAssertEqual(self.i2cScratchRegValue, *(uint8_t *)result.data.bytes); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testI2CMultipleReadWrite -{ - CapabilityCheck(self.device.serial); - CapabilityCheck((self.i2cDevice != 0)); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLI2CData *whoami = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cReadOnlyReg length:1]; - MBLI2CData *aReg = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cScratchReg length:1]; - [aReg writeByteAsync:self.i2cScratchRegValue]; - [[aReg readAsync] success:^(MBLDataSample * _Nonnull result) { - XCTAssertEqual(self.i2cScratchRegValue, *(uint8_t *)result.data.bytes); - }]; - [[whoami readAsync] success:^(MBLDataSample * _Nonnull result) { - XCTAssertEqual(self.i2cReadOnlyRegValue, *(uint8_t *)result.data.bytes); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testI2CPeriodicRead -{ - CapabilityCheck(self.device.serial); - CapabilityCheck((self.i2cDevice != 0)); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testI2CPeriodicRead"]; - - MBLI2CData *whoami = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cReadOnlyReg length:1]; - MBLEvent *periodicReg = [whoami periodicReadWithPeriod:1500 eventCount:5]; - int __block notificationCount = 0; - [periodicReg startNotificationsWithHandlerAsync:^(MBLDataSample *obj, NSError *error) { - XCTAssertEqual(self.i2cReadOnlyRegValue, *(uint8_t *)obj.data.bytes); - NSLog(@"%@", obj); - notificationCount++; - if (notificationCount == 5) { - [periodicReg stopNotificationsAsync]; - [waitingExpectation fulfill]; - } - }]; - - [self waitForExpectationsWithTimeout:20 handler:nil]; -} - -- (void)testI2CPeriodicLog -{ - CapabilityCheck(self.device.serial); - CapabilityCheck((self.i2cDevice != 0)); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testI2CPeriodicLog"]; - - MBLI2CData *whoami = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cReadOnlyReg length:1]; - MBLEvent *periodicReg = [whoami periodicReadWithPeriod:1000 eventCount:5]; - [periodicReg startLoggingAsync]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(7.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[periodicReg downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - for (MBLDataSample *entry in result) { - XCTAssertEqual(self.i2cReadOnlyRegValue, *(uint8_t *)entry.data.bytes); - NSLog(@"%@", entry); - } - [waitingExpectation fulfill]; - }]; - }); - - [self waitForExpectationsWithTimeout:2000000000 handler:nil]; // TODO: Set this timeout down -} - -- (void)testI2CPeriodicReadIntoFilter -{ - CapabilityCheck(self.device.serial); - CapabilityCheck((self.i2cDevice != 0)); - - // TEST CASE: Read sensor once a second, throw out values over 250 - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLI2CData *whoami = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cReadOnlyReg length:1]; - MBLEvent *summedWhoami = [[whoami periodicReadWithPeriod:1000] summationOfEvent]; - int __block notificationCount = 0; - [summedWhoami startNotificationsWithHandlerAsync:^(MBLDataSample *obj, NSError *error) { - notificationCount++; - - XCTAssertEqual(self.i2cReadOnlyRegValue * notificationCount, *(uint32_t *)obj.data.bytes); - NSLog(@"%@", obj); - if (notificationCount == 5) { - [summedWhoami stopNotificationsAsync]; - [waitingExpectation fulfill]; - } - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - - -- (void)testMultiLog -{ - CapabilityCheck(self.device.serial); - CapabilityCheck((self.i2cDevice != 0)); - - XCTestExpectation *waiting1 = [self expectationWithDescription:@"wait for reads"]; - XCTestExpectation *waiting2 = [self expectationWithDescription:@"wait for reads"]; - const double frequency = 100.0; - - MBLI2CData *whoami1 = [self.device.serial dataAtDeviceAddress:self.i2cDevice registerAddress:self.i2cReadOnlyReg length:1]; - MBLI2CData *whoami2 = [self.device.serial numberAtDeviceAddress:self.i2cDevice registerAddress:self.i2cReadOnlyReg length:1 isSigned:NO]; - - MBLEvent *periodicReg1 = [whoami1 periodicReadWithPeriod:1000.0 / frequency]; - [periodicReg1 startLoggingAsync]; - - MBLEvent *periodicReg2 = [[whoami2 periodicReadWithPeriod:1000.0 / frequency] modifyEventUsingOperation:MBLArithmeticOperationMultiply withData:2]; - [periodicReg2 startLoggingAsync]; - - NSDate *methodStart = [NSDate date]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - NSDate *methodFinish = [NSDate date]; - NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart]; - [[periodicReg1 downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.count, frequency * executionTime, frequency / 2.0); - for (MBLDataSample *entry in result) { - XCTAssertEqual(self.i2cReadOnlyRegValue, *(uint8_t *)entry.data.bytes); - } - [waiting1 fulfill]; - }]; - - [[periodicReg2 downloadLogAndStopLoggingAsync:YES] success:^(NSArray * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.count, frequency * executionTime, frequency / 2.0); - for (MBLNumericData *entry in result) { - XCTAssertEqual(self.i2cReadOnlyRegValue * 2, entry.value.intValue); - } - [waiting2 fulfill]; - }]; - }); - - [self waitForExpectationsWithTimeout:20 handler:nil]; -} - -- (void)testProgrammedByOtherAppConnection -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"checking for other app connection"]; - - uint32_t realKey = self.device.testDebug.magicKey; - - XCTAssertFalse(self.device.programedByOtherApp); - [[self.device disconnectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - if (t.error) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - } else { - self.device.testDebug.magicKey = 1; - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - if (!t.error) { - XCTAssertTrue(self.device.programedByOtherApp); - } - [waitingExpectation fulfill]; - return nil; - }]; - } - return nil; - }]; - - [self waitForExpectationsWithTimeout:60 handler:nil]; - - // Perform cleanup - self.device.testDebug.magicKey = realKey; -} - -- (void)testFilterFromOffsetedEntry -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"filter tests"]; - - MBLAccelerometerMMA8452QFormat *format = [[MBLAccelerometerMMA8452QFormat alloc] initWithAxis:MBLAccelerometerAxisZ]; - MBLEvent *spoof = [self.device.testDebug spoofEvent:format]; - - MBLEvent *event1 = [spoof conditionalDataSwitch:YES]; - MBLEvent *event2 = [spoof countingDataSwitch:1]; - MBLEvent *event3 = [spoof summationOfEvent]; - MBLEvent *event4 = [spoof counterOfEvent]; - MBLEvent *event5 = [spoof averageOfEventWithDepth:2]; - MBLEvent *event6 = [spoof compareEventUsingOperation:MBLComparisonOperationLessThan data:@[@0.0] output:MBLComparisonOutputValue]; - MBLEvent *event7 = [spoof periodicSampleOfEvent:50]; - MBLEvent *event8 = [spoof differentialSampleOfEvent:50]; - MBLEvent *event9 = [spoof delayOfEventWithCount:1]; - MBLEvent *event10 = [spoof pulseDetectorOfEventWithThreshold:-0.5 width:1 output:MBLPulseOutputPeak]; - MBLEvent *event11 = [spoof changeOfEventByDelta:0.5 output:MBLDeltaValueOutputAbsolute]; - MBLEvent *event12 = [spoof changeOfEventAcrossThreshold:-0.5 hysteresis:0.1 output:MBLThresholdValueOutputAbsolute]; - - __block BOOL first = YES; - - [event1 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.997, 0.001); - } else { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 0.097, 0.001); - } - }]; - [event2 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.997, 0.001); - } else { - XCTFail("Counting switch shouldn't get second value"); - } - }]; - [event3 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.997, 0.001); - } else { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.9, 0.001); - } - }]; - [event4 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTAssertEqual(obj.value.intValue, 1); - } else { - XCTAssertEqual(obj.value.intValue, 2); - } - }]; - [event5 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTFail("Average filter shouldn't get first value"); - } else { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.45, 0.001); - } - }]; - [event6 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.997, 0.001); - } else { - XCTFail("Compare switch shouldn't get second value"); - } - }]; - [event7 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.997, 0.001); - } else { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 0.097, 0.001); - } - }]; - [event8 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.997, 0.001); - } else { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 1.094, 0.001); - } - }]; - [event9 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTFail("Delay filter shouldn't get first value"); - } else { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.997, 0.001); - } - }]; - [event10 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - XCTFail("Pulse detector shouldn't get any values"); - }]; - [event11 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, -0.997, 0.001); - } else { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 0.097, 0.001); - } - }]; - [event12 startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - if (first) { - XCTFail("Threshold filter shouldn't get first value"); - } else { - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 0.097, 0.001); - } - }]; - - [[self.device waitForCommandCompletion] success:^(id result) { - [self.device.testDebug spoofData:@[@"61-00-D8-FF-1B-FC"] - notification:NO]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - first = NO; - [self.device.testDebug spoofData:@[@"1B-FC-D8-FF-61-00"] - notification:NO]; - }); - }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [event1 stopNotificationsAsync]; - [event2 stopNotificationsAsync]; - [event3 stopNotificationsAsync]; - [event4 stopNotificationsAsync]; - [event5 stopNotificationsAsync]; - [event6 stopNotificationsAsync]; - [event7 stopNotificationsAsync]; - [event8 stopNotificationsAsync]; - [event9 stopNotificationsAsync]; - [event10 stopNotificationsAsync]; - [event11 stopNotificationsAsync]; - [event12 stopNotificationsAsync]; - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:60 handler:nil]; -} - - - -- (void)testConditionalDataSwitch -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLEvent *spoof = [self.device.testDebug spoofEvent:self.device.temperature.onDieThermistor.format]; - MBLDataSwitch *spoofSwitch = [spoof conditionalDataSwitch:NO]; - float __block expected = 25.5; - int __block count = -1; - [spoofSwitch startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - XCTAssertNil(error); - XCTAssertNotEqual(count, -1, @"Expected switch to filter all data"); - XCTAssertEqualWithAccuracy(obj.value.floatValue, expected, 0.1); - count++; - expected += 1.0; - if (count == 7) { - [spoofSwitch stopNotificationsAsync]; - [waitingExpectation fulfill]; - } - }]; - [[self.device waitForCommandCompletion] success:^(id result) { - [self.device.testDebug spoofData:@[@"CC-00", - @"D4-00", - @"DC-00", - @"E4-00", - @"EC-00", - @"F4-00", - @"FC-00"] - notification:NO]; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - count = 0; - [spoofSwitch resetConditionalAsync:YES]; - [self.device.testDebug spoofData:@[@"CC-00", - @"D4-00", - @"DC-00", - @"E4-00", - @"EC-00", - @"F4-00", - @"FC-00"] - notification:NO]; - }); - - [self waitForExpectationsWithTimeout:30 handler:nil]; -} - -- (void)testChangeOfEventByDelta -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLEvent *spoof = [self.device.testDebug spoofEvent:self.device.temperature.onDieThermistor.format]; - spoof = [spoof changeOfEventByDelta:2.2 output:MBLDeltaValueOutputAbsolute]; - float __block expected = 25.5; - int __block count = 0; - [spoof startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - XCTAssertNil(error); - XCTAssertEqualWithAccuracy(obj.value.floatValue, expected, 0.1); - count++; - expected += 3.0; - if (count == 3) { - [spoof stopNotificationsAsync]; - [waitingExpectation fulfill]; - } - }]; - - [[self.device waitForCommandCompletion] success:^(id result) { - [self.device.testDebug spoofData:@[@"CC-00", - @"D4-00", - @"DC-00", - @"E4-00", - @"EC-00", - @"F4-00", - @"FC-00", - @"FF-00"] - notification:NO]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testChangeOfEventAcrossThreshold -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLEvent *spoof = [self.device.testDebug spoofEvent:self.device.temperature.onDieThermistor.format]; - spoof = [spoof changeOfEventAcrossThreshold:28.0 hysteresis:2.2 output:MBLThresholdValueOutputAbsolute]; - int __block count = 0; - [spoof startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - XCTAssertEqualWithAccuracy(obj.value.floatValue, 28.5, 0.1); - count++; - }]; - - [[self.device waitForCommandCompletion] success:^(id result) { - [self.device.testDebug spoofData:@[@"CC-00", - @"D4-00", - @"DC-00", - @"E4-00", - @"DC-00", - @"E4-00"] - notification:NO]; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - XCTAssertEqual(count, 1); - [[spoof stopNotificationsAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [waitingExpectation fulfill]; - return task; - }]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testPulseDetectorOfEventWithThreshold -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLEvent *spoof = [self.device.testDebug spoofEvent:self.device.temperature.onDieThermistor.format]; - spoof = [spoof pulseDetectorOfEventWithThreshold:-62.0 width:3 output:MBLPulseOutputArea]; - int __block count = 0; - [spoof startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - XCTAssertEqualWithAccuracy(obj.value.floatValue, -183.25, 0.1); - count++; - }]; - - [[self.device waitForCommandCompletion] success:^(id result) { - [self.device.testDebug spoofData:@[@"01-FE", // -63.9 - @"06-FE", // -63.3 - @"13-FE", // -61.7 - @"1C-FE", // -60.6 - @"17-FE", // -61.1 - @"FC-FD"] // -64.4 - notification:NO]; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - XCTAssertEqual(count, 1); - [spoof stopNotificationsAsync]; - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testCounterOfEvents -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLEvent *spoof = [self.device.testDebug spoofEvent:self.device.temperature.onDieThermistor.format]; - spoof = [spoof counterOfEvent]; - int __block count = 0; - [spoof startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - count++; - XCTAssertEqual(count, obj.value.intValue); - }]; - - [[self.device waitForCommandCompletion] success:^(id result) { - [self.device.testDebug spoofData:@[@"01-FE", // -63.9 - @"06-FE", // -63.3 - @"13-FE", // -61.7 - @"1C-FE", // -60.6 - @"17-FE", // -61.1 - @"FC-FD"] // -64.4 - notification:NO]; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - XCTAssertEqual(count, 6); - [spoof stopNotificationsAsync]; - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testModifyEventUsingOperation -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testModifyEventUsingOperation"]; - - MBLEvent *temp = [self.device.temperature.onDieThermistor periodicReadWithPeriod:500]; - MBLFilter *doubleTemp = [temp modifyEventUsingOperation:MBLArithmeticOperationMultiply withData:2]; - MBLFilter *halfTemp = [temp modifyEventUsingOperation:MBLArithmeticOperationDivide withData:2]; - MBLFilter *fiftyLessTemp = [temp modifyEventUsingOperation:MBLArithmeticOperationSubtract withData:50.0]; - MBLFilter *absTemp = [fiftyLessTemp modifyEventUsingOperation:MBLArithmeticOperationAbsoluteValue withData:0]; - - double __block actualTemp = 0.0; - [temp startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - actualTemp = obj.value.doubleValue; - [temp stopNotificationsAsync]; - }]; - [doubleTemp startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - XCTAssertEqualWithAccuracy(actualTemp * 2.0, obj.value.doubleValue, 0.1); - [doubleTemp stopNotificationsAsync]; - }]; - [halfTemp startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - XCTAssertEqualWithAccuracy(actualTemp / 2.0, obj.value.doubleValue, 0.1); - [halfTemp stopNotificationsAsync]; - }]; - [fiftyLessTemp startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - XCTAssertEqualWithAccuracy(actualTemp - 50.0, obj.value.doubleValue, 0.1); - [fiftyLessTemp stopNotificationsAsync]; - }]; - [absTemp startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - XCTAssertNil(error); - XCTAssertEqualWithAccuracy(fabs(actualTemp - 50.0), obj.value.doubleValue, 0.1); - [absTemp stopNotificationsAsync]; - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - - -- (void)testProximity -{ - CapabilityCheck(self.device.proximity); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLProximityTSL2671 *proximity = (MBLProximityTSL2671 *)self.device.proximity; - MBLEvent *event = [proximity.proximity periodicReadWithPeriod:500]; - int __block count = 0; - [event startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - // Somewhere in the [0, 1024] range by default - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 512, 512); - count++; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [event stopNotificationsAsync]; - // 5 seconds @2Hz gives us 10 samples - XCTAssertEqualWithAccuracy(count, 10, 2); - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testHumidityRead -{ - CapabilityCheck(self.device.hygrometer); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLHygrometerBME280 *hygrometer = (MBLHygrometerBME280 *)self.device.hygrometer; - MBLEvent *event = [hygrometer.humidity periodicReadWithPeriod:500]; - int __block count = 0; - [event startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - // Somewhere in the [20, 90] for indoor humidity i'd assume? - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 55, 35); - count++; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [event stopNotificationsAsync]; - // 5 seconds @2Hz gives us 10 samples - XCTAssertEqualWithAccuracy(count, 10, 2); - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testHumidityPeriodicRead -{ - CapabilityCheck(self.device.hygrometer); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLHygrometerBME280 *hygrometer = (MBLHygrometerBME280 *)self.device.hygrometer; - hygrometer.humidityOversampling = MBLHygrometerBME280Oversample16X; - int __block count = 0; - [hygrometer.periodicHumidity startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - // Somewhere in the [20, 90] for indoor humidity i'd assume? - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 55, 35); - count++; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [hygrometer.periodicHumidity stopNotificationsAsync]; - hygrometer.humidityOversampling = MBLHygrometerBME280Oversample1X; - - XCTAssertEqualWithAccuracy(count, 122, 20); // Based on the barometer default tStandby - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testPressurePeriodicRead -{ - CapabilityCheck(self.device.barometer); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLBarometerBosch *barometer = (MBLBarometerBosch *)self.device.barometer; - int __block count = 0; - [barometer.periodicPressure startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - // A first guess at typical atmosphere pressure - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 101374.296875, 3000.0); - count++; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [barometer.periodicPressure stopNotificationsAsync]; - - XCTAssertEqualWithAccuracy(count, 10, 2); // Based on the default settings - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testAltitudePeriodicRead -{ - CapabilityCheck(self.device.barometer); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLBarometerBosch *barometer = (MBLBarometerBosch *)self.device.barometer; - int __block count = 0; - [barometer.periodicAltitude startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - // We usually test around sea level +-500m - XCTAssertEqualWithAccuracy(obj.value.doubleValue, 0, 500); - count++; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [barometer.periodicAltitude stopNotificationsAsync]; - - XCTAssertEqualWithAccuracy(count, 10, 2); // Based on the default settings - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testPhotometerPeriodicRead -{ - CapabilityCheck(self.device.photometer); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLPhotometerTCS3472 *photometer = (MBLPhotometerTCS3472 *)self.device.photometer; - photometer.gain = MBLPhotometerTCS3472Gain1X; - photometer.integrationTime = 50.0; - photometer.ledFlash = YES; - MBLEvent *event = [photometer.color periodicReadWithPeriod:500]; - int __block count = 0; - [event startNotificationsWithHandlerAsync:^(MBLRGBData * _Nullable obj, NSError * _Nullable error) { - // Somewhere in the 100 range for these settings - XCTAssertEqualWithAccuracy(obj.red, 100, 100); - XCTAssertEqualWithAccuracy(obj.green, 100, 100); - XCTAssertEqualWithAccuracy(obj.blue, 100, 100); - XCTAssertEqualWithAccuracy(obj.clear, 100, 100); - count++; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [event stopNotificationsAsync]; - XCTAssertEqualWithAccuracy(count, 10, 2); - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testPhotometerRead -{ - CapabilityCheck(self.device.photometer); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLPhotometerTCS3472 *photometer = (MBLPhotometerTCS3472 *)self.device.photometer; - photometer.gain = MBLPhotometerTCS3472Gain1X; - photometer.integrationTime = 50.0; - photometer.ledFlash = NO; - - NSMutableArray *tasks = [NSMutableArray array]; - [tasks addObject:[photometer.color readAsync]]; - [tasks addObject:[photometer.redColor readAsync]]; - [tasks addObject:[photometer.greenColor readAsync]]; - [tasks addObject:[photometer.blueColor readAsync]]; - [tasks addObject:[photometer.clearColor readAsync]]; - - [[BFTask taskForCompletionOfAllTasksWithResults:tasks] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertNil(task.error); - NSLog(@"%@", task.result); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testBMA255 -{ - CapabilityCheck([self.device.accelerometer isKindOfClass:[MBLAccelerometerBMA255 class]]); - - MBLAccelerometerBMA255 *accelerometer = (MBLAccelerometerBMA255 *)self.device.accelerometer; - accelerometer.sampleFrequency = 15; - [self eventUpdateTest:accelerometer.dataReadyEvent time:5 frequency:15.62]; - accelerometer.sampleFrequency = 20; - [self eventUpdateTest:accelerometer.dataReadyEvent time:5 frequency:31.26]; - accelerometer.sampleFrequency = 60; - [self eventUpdateTest:accelerometer.dataReadyEvent time:5 frequency:62.5]; - accelerometer.sampleFrequency = 125; - [self eventUpdateTest:accelerometer.dataReadyEvent time:5 frequency:125]; - accelerometer.sampleFrequency = 125.1; - [self eventUpdateTest:accelerometer.dataReadyEvent time:5 frequency:250]; -} - -- (void)testMagnetometerBMM150 -{ - CapabilityCheck([self.device.magnetometer isKindOfClass:[MBLMagnetometerBMM150 class]]); - - MBLMagnetometerBMM150 *magnetometer = (MBLMagnetometerBMM150 *)self.device.magnetometer; - magnetometer.powerPreset = MBLMagnetometerBMM150PresetRegular; - [self eventUpdateTest:magnetometer.periodicMagneticField time:5 frequency:10.0]; - magnetometer.powerPreset = MBLMagnetometerBMM150PresetHighAccuracy; - [self eventUpdateTest:magnetometer.periodicMagneticField time:5 frequency:20.0]; -} - -- (void)testSPIRead -{ - CapabilityCheck(self.device.serial); - CapabilityCheck([self.device.accelerometer isKindOfClass:[MBLAccelerometerBMI160 class]]); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - // def spi_pack_cmdstring(self, ss, sck, mosi, miso, native, lsb_first, mode, freq): - // cmdstr = "0d-82-" + self.spi_pack_cmdstring(10, 0, 11, 7, 1, 0, 3, 6) + "04-da" - MBLSPIData *bmi160 = [self.device.serial dataWithSlaveSelectPin:10 clockPin:0 mosiPin:11 misoPin:7 lsbFirst:0 spiMode:3 spiFrequency:6 nativePinIndexing:1 length:5]; - - uint8_t byte = 0xDA; - [[[bmi160 readWithParamtersAsync:[NSData dataWithBytes:&byte length:1]] success:^(MBLDataSample *result) { - uint8_t data[] = { 0x07, 0x30, 0x81, 0x0b, 0xc0 }; - int dataSize = sizeof(data) / sizeof(data[0]); - NSData *expected = [NSData dataWithBytes:data length:dataSize]; - XCTAssertTrue([result.data isEqualToData:expected]); - [waitingExpectation fulfill]; - }] failure:^(NSError * error) { - XCTAssertNil(error); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; - -} - -- (void)testPackedAccelStream -{ - CapabilityCheck(self.device.accelerometer.dataReadyEvent); - - self.device.accelerometer.sampleFrequency = [self accelerometerFrequencyNear:400]; - [self eventUpdateTest:self.device.accelerometer.packedDataReadyEvent time:10 frequency:self.device.accelerometer.sampleFrequency]; -} - -- (void)testPackedGyroStream -{ - CapabilityCheck(self.device.gyro.dataReadyEvent); - - self.device.gyro.sampleFrequency = 400; - [self eventUpdateTest:self.device.gyro.packedDataReadyEvent time:10 frequency:self.device.gyro.sampleFrequency]; -} - -- (void)testPackedGyroMagnetometer -{ - CapabilityCheck([self.device.magnetometer isKindOfClass:[MBLMagnetometerBMM150 class]]); - MBLMagnetometerBMM150 *magnetometer = (MBLMagnetometerBMM150 *)self.device.magnetometer; - CapabilityCheck(magnetometer.packedPeriodicMagneticField); - - magnetometer.powerPreset = MBLMagnetometerBMM150PresetHighAccuracy; - [self eventUpdateTest:magnetometer.packedPeriodicMagneticField time:10 frequency:20.0]; -} - -- (void)testSensorFusion -{ - CapabilityCheck(self.device.sensorFusion); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testSensorFusion"]; - - self.device.sensorFusion.mode = MBLSensorFusionModeNDoF; - - int __block count = 0; - double sampleFrequency = 100.0; - [self.device.sensorFusion.gravity startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - XCTAssertEqualWithAccuracy(obj.RSS, 1.0, 0.1); - count++; - }]; - [self.device.sensorFusion.linearAcceleration startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - XCTAssertLessThan(obj.RSS, 0.1); - count++; - }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.sensorFusion.gravity stopNotificationsAsync]; - [self.device.sensorFusion.linearAcceleration stopLoggingAsync]; - // Check for 2 seconds worth of updates - XCTAssertEqualWithAccuracy(count, sampleFrequency * 2.0 * 2.0, sampleFrequency); - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testSensorFusionErrors -{ - CapabilityCheck(self.device.sensorFusion); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testSensorFusion"]; - - self.device.sensorFusion.mode = MBLSensorFusionModeM4G; - [[[[[[[self.device.sensorFusion.rotation startNotificationsWithHandlerAsync:^(MBLDataSample * _Nullable obj, NSError * _Nullable error) { - XCTFail("Shouldn't get any samples in invalid config"); - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return [self.device.sensorFusion.rotation stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - self.device.sensorFusion.mode = MBLSensorFusionModeCompass; - return [self.device.sensorFusion.rotation startNotificationsWithHandlerAsync:^(MBLDataSample * _Nullable obj, NSError * _Nullable error) { - XCTFail("Shouldn't get any samples in invalid config"); - }]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return [self.device.sensorFusion.rotation stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - self.device.sensorFusion.mode = MBLSensorFusionModeIMUPlus; - return [self.device.sensorFusion.magneticField startNotificationsWithHandlerAsync:^(MBLDataSample * _Nullable obj, NSError * _Nullable error) { - XCTFail("Shouldn't get any samples in invalid config"); - }]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return [self.device.sensorFusion.magneticField stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -@end diff --git a/MetaWear/Tests/Integration/BMA255Tests.m b/MetaWear/Tests/Integration/BMA255Tests.m deleted file mode 100644 index 3438ad9..0000000 --- a/MetaWear/Tests/Integration/BMA255Tests.m +++ /dev/null @@ -1,127 +0,0 @@ -/** - * BMA255Tests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 3/8/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" - -@interface BMA255Tests : MetaWearTest -@property (nonatomic, retain) MBLAccelerometerBMA255 *accelerometer; -@end - -@implementation BMA255Tests - -- (void)setUp -{ - [super setUp]; - - if (![self.device.accelerometer isKindOfClass:[MBLAccelerometerBMA255 class]]) { - self.continueAfterFailure = NO; - XCTFail("Trying to run BMA255 tests on a board without a BMA255 accelerometer"); - } - self.accelerometer = (MBLAccelerometerBMA255 *)self.device.accelerometer; -} - -- (void)testAccelStream -{ - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - [self eventUpdateTest:self.accelerometer.dataReadyEvent time:10]; -} - -- (void)testFreeFallUpdates -{ - self.accelerometer.lowOrHighGEvent.highGEnabledAxis = 0; - self.accelerometer.lowOrHighGEvent.lowGEnabled = YES; - [self eventUpdateTest:self.accelerometer.lowOrHighGEvent time:20]; -} - -- (void)testHighGUpdates -{ - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - - self.accelerometer.lowOrHighGEvent.lowGEnabled = NO; - self.accelerometer.lowOrHighGEvent.highGThreshold = 8.0; - self.accelerometer.lowOrHighGEvent.highGEnabledAxis = MBLAccelerometerAxisX; - [self eventUpdateTest:self.accelerometer.lowOrHighGEvent time:20]; -} - -- (void)testOrientationUpdates -{ - [self eventUpdateTest:self.accelerometer.orientationEvent time:20]; -} - -- (void)testSingleTapUpdates -{ - self.accelerometer.tapEvent.type = MBLAccelerometerTapTypeSingle; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.tapEvent time:20]; -} - -- (void)testDoubleTapUpdates -{ - self.accelerometer.tapEvent.type = MBLAccelerometerTapTypeDouble; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.tapEvent time:20]; -} - -- (void)testSingleAndDoubleTap -{ - self.accelerometer.tapEvent.type = MBLAccelerometerTapTypeBoth; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.tapEvent time:20]; -} - -- (void)testFlatUpdates -{ - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.flatEvent time:20]; -} - - -- (void)testMotionUpdates -{ - MBLAccelerometerBMA255MotionEvent *motionEvent = self.accelerometer.motionEvent; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - self.accelerometer.sampleFrequency = 100; - - motionEvent.anyMotionEnabled = YES; - - [self eventUpdateTest:motionEvent time:20]; -} - - -@end diff --git a/MetaWear/Tests/Integration/BMI160Tests.m b/MetaWear/Tests/Integration/BMI160Tests.m deleted file mode 100644 index a722efa..0000000 --- a/MetaWear/Tests/Integration/BMI160Tests.m +++ /dev/null @@ -1,300 +0,0 @@ -/** - * BMI160Tests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" -#import "MBLAccelerometerBMI160+Private.h" -#import "MBLGyroBMI160+Private.h" -#import "MBLAccelerometerBoschDataReadyEvent.h" - -@interface BMI160Tests : MetaWearTest -@property (nonatomic, retain) MBLAccelerometerBMI160 *accelerometer; -@property (nonatomic, retain) MBLGyroBMI160 *gyro; -@end - -@implementation BMI160Tests - -- (void)setUp -{ - [super setUp]; - - if (![self.device.accelerometer isKindOfClass:[MBLAccelerometerBMI160 class]]) { - self.continueAfterFailure = NO; - XCTFail("Trying to run BMI160 tests on a board without a BMI160 accelerometer"); - } - if (![self.device.gyro isKindOfClass:[MBLGyroBMI160 class]]) { - self.continueAfterFailure = NO; - XCTFail("Trying to run BMI160 tests on a board without a BMI160 gyro"); - } - self.accelerometer = (MBLAccelerometerBMI160 *)self.device.accelerometer; - self.gyro = (MBLGyroBMI160 *)self.device.gyro; -} - -- (void)testAccelStream -{ - self.device.accelerometer.sampleFrequency = 25; - [self.device.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerData * _Nullable obj, NSError * _Nullable error) { - NSLog(@"%@", obj); - }]; - - ((MBLBarometerBMP280 *)self.device.barometer).standbyTime = MBLBarometerBMP280Standby62_5; - [((MBLBarometerBMP280 *)self.device.barometer).periodicPressure startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - NSLog(@"%@", obj); - }]; - - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2000 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:5000 handler:nil]; - - //self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange2G; - //[self eventUpdateTest:self.accelerometer.dataReadyEvent time:10]; -} - -- (void)testGyroUpdates -{ - self.gyro.sampleFrequency = 100; - self.gyro.fullScaleRange = MBLGyroBMI160Range2000; - [self eventUpdateTest:self.gyro.dataReadyEvent time:20]; -} - -- (void)testFreeFallUpdates -{ - self.accelerometer.lowOrHighGEvent.highGEnabledAxis = 0; - self.accelerometer.lowOrHighGEvent.lowGEnabled = YES; - [self eventUpdateTest:self.accelerometer.lowOrHighGEvent time:20]; -} - -- (void)testHighGUpdates -{ - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - - self.accelerometer.lowOrHighGEvent.lowGEnabled = NO; - self.accelerometer.lowOrHighGEvent.highGThreshold = 8.0; - self.accelerometer.lowOrHighGEvent.highGEnabledAxis = MBLAccelerometerAxisX; - [self eventUpdateTest:self.accelerometer.lowOrHighGEvent time:20]; -} - -- (void)testOrientationUpdates -{ - [self eventUpdateTest:self.accelerometer.orientationEvent time:20]; -} - -- (void)testSingleTapUpdates -{ - self.accelerometer.tapEvent.type = MBLAccelerometerTapTypeSingle; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.tapEvent time:20]; -} - -- (void)testDoubleTapUpdates -{ - self.accelerometer.tapEvent.type = MBLAccelerometerTapTypeDouble; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange16G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.tapEvent time:20]; -} - -- (void)testSingleAndDoubleTap -{ - self.accelerometer.tapEvent.type = MBLAccelerometerTapTypeBoth; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange8G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.tapEvent time:20]; -} - -- (void)testFlatUpdates -{ - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange8G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.flatEvent time:20]; -} - -- (void)testStepDetectorUpdates -{ - [self.accelerometer resetStepCount]; - - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange8G; - self.accelerometer.sampleFrequency = 100; - [self eventUpdateTest:self.accelerometer.stepEvent time:20]; - - [[self.accelerometer.stepCounter readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"%@", result); - }]; -} - -- (void)testMotionUpdates -{ - MBLAccelerometerBMI160MotionEvent *motionEvent = self.accelerometer.motionEvent; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange8G; - self.accelerometer.sampleFrequency = 100; - - //motionEvent.significantAnyMotionEnabled = YES; - //motionEvent.useSignificantMotion = YES; - //motionEvent.slowNoMotionEnabled = YES; - //motionEvent.useSlowMotion = NO; - //motionEvent.slowNoMotionDuration = 5 * 1000; - //motionEvent.slowNoMotionThreshold = 0.2; - - motionEvent.significantAnyMotionEnabled = YES; - motionEvent.useSignificantMotion = NO; - motionEvent.anyMotionDuration = 0; // One sample above threshold - motionEvent.anyMotionThreshold = 0.10; - - [self eventUpdateTest:motionEvent time:20]; -} - -- (void)testButtonTurnOnLEDTapTurnOff -{ - [self.device.mechanicalSwitch.switchUpdateEvent programCommandsToRunOnEventAsync:^{ - [self.device.led flashLEDColorAsync:[MBLColor greenColor] withIntensity:0.5]; - }]; - [self.accelerometer.tapEvent programCommandsToRunOnEventAsync:^{ - [self.device.led setLEDOnAsync:NO withOptions:1]; - }]; - - [self.accelerometer.tapEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"You tapped me!"); - }]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.mechanicalSwitch.switchUpdateEvent eraseCommandsToRunOnEventAsync]; - [self.accelerometer.tapEvent eraseCommandsToRunOnEventAsync]; - [self.device.led setLEDOnAsync:NO withOptions:1]; - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:15 handler:nil]; -} - -- (void)testTapAndStream -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - - [self.accelerometer.tapEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"TAP: %@", obj); - }]; - [self.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"ACC: %@", obj); - }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.accelerometer.tapEvent stopNotificationsAsync]; - [self.accelerometer.dataReadyEvent stopNotificationsAsync]; - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:60 handler:nil]; - -} - -- (void)testMotionPowerSaveStateMachine -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLAccelerometerBMI160MotionEvent *motionEvent = self.accelerometer.motionEvent; - self.accelerometer.fullScaleRange = MBLAccelerometerBoschRange8G; - self.accelerometer.sampleFrequency = 100; - - //motionEvent.significantAnyMotionEnabled = YES; - //motionEvent.useSignificantMotion = YES; - //motionEvent.slowNoMotionEnabled = YES; - //motionEvent.useSlowMotion = NO; - //motionEvent.slowNoMotionDuration = 5 * 1000; - //motionEvent.slowNoMotionThreshold = 0.2; - - motionEvent.significantAnyMotionEnabled = YES; - motionEvent.useSignificantMotion = NO; - motionEvent.anyMotionDuration = 0; // One sample above threshold - motionEvent.anyMotionThreshold = 0.10; - - // On Any-Motion timeout - // - Disable Data Int - - // On Any-Motion - // - start Any-Motion timer - // - Enable Data Int - MBLTimerEvent *accelerometerTimeout = [self.device.timer eventWithPeriod:400 eventCount:1 autoStart:YES triggerOnStart:NO]; - - [[[self.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - NSLog(@"%@", obj); - }] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [accelerometerTimeout programCommandsToRunOnEventAsync:^{ - // Disable Data Int - uint8_t data[] = { 0x0, 0x1 }; - [((MBLAccelerometerBoschDataReadyEvent *)self.accelerometer.dataReadyEvent).accelDataInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:2]]; - }]; - }] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [motionEvent programCommandsToRunOnEventAsync:^{ - [accelerometerTimeout start]; - // Enable Data Int - uint8_t data[] = { 0x1, 0x0 }; - [((MBLAccelerometerBoschDataReadyEvent *)self.accelerometer.dataReadyEvent).accelDataInterruptEn writeDataAsync:[NSData dataWithBytes:&data length:2]]; - }]; - }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(20000 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:200000 handler:nil]; -} - -- (void)testFlatAndStream -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - self.accelerometer.sampleFrequency = 10.0; - [self.accelerometer.flatEvent startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - NSLog(@"%@", obj); - }]; - [BFTask taskFromMetaWearWithBlock:^id _Nonnull{ - [self.accelerometer.orientationEvent addNotificationWithExecutor:[BFExecutor dispatchExecutor] handler:^(id _Nullable obj, NSError * _Nullable error) { - NSLog(@"%@", obj); - }]; - [self.accelerometer.orientationEvent performAsyncStartNotifications]; - return nil; - }]; - - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(20000 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:200000 handler:nil]; -} - -@end diff --git a/MetaWear/Tests/Integration/ButtonConfig.h b/MetaWear/Tests/Integration/ButtonConfig.h deleted file mode 100644 index be9d215..0000000 --- a/MetaWear/Tests/Integration/ButtonConfig.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * ButtonConfig.h - * MetaWearTests - * - * Created by Stephen Schiffli on 4/15/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearSyntaxFriendly.h" - -/* - Config that changes based on the connection state - */ -@interface ButtonConfig : NSObject - -@property (nonatomic) MBLDataSwitch *disconnectedSwitchEvent; -@property (nonatomic) MBLDataSwitch *connectedSwitchEvent; - -- (void)didConnect; - -@end diff --git a/MetaWear/Tests/Integration/ButtonConfig.m b/MetaWear/Tests/Integration/ButtonConfig.m deleted file mode 100644 index b7b67f2..0000000 --- a/MetaWear/Tests/Integration/ButtonConfig.m +++ /dev/null @@ -1,75 +0,0 @@ -/** - * IncrementingEventConfig.m - * MetaWearTests - * - * Created by Stephen Schiffli on 10/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "ButtonConfig.h" - - -@implementation ButtonConfig - -- (void)runOnDeviceBoot:(MBLMetaWear *)device -{ - // Pass the switch event through a gate that only opens when we are disconnected - self.disconnectedSwitchEvent = [device.mechanicalSwitch.switchUpdateEvent conditionalDataSwitch:NO]; - // When we get a disconnected switch event then flash red - [[[[[self.disconnectedSwitchEvent programCommandsToRunOnEventAsync:^{ - [device.led flashLEDColorAsync:[MBLColor redColor] withIntensity:1.0 numberOfFlashes:2]; - }] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // Pass the switch event through a gate that only opens when we are connected - self.connectedSwitchEvent = [device.mechanicalSwitch.switchUpdateEvent conditionalDataSwitch:NO]; - // When we get a connected switch event then flash green - return [self.connectedSwitchEvent programCommandsToRunOnEventAsync:^{ - [device.led flashLEDColorAsync:[MBLColor greenColor] withIntensity:1.0 numberOfFlashes:2]; - }]; - }] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - // When a disconnect event occurs, we open program the gate change - return [device.settings.disconnectEvent programCommandsToRunOnEventAsync:^{ - [self.disconnectedSwitchEvent resetConditionalAsync:YES]; - [self.connectedSwitchEvent resetConditionalAsync:NO]; - }]; - }] success:^(id _Nonnull result) { - NSLog(@"Success"); - }] failure:^(NSError * _Nonnull error) { - NSLog(@"Fail: %@", error); - }]; -} - -// Manually reset the gates when we re-connect -- (void)didConnect -{ - [self.disconnectedSwitchEvent resetConditionalAsync:NO]; - [self.connectedSwitchEvent resetConditionalAsync:YES]; -} - -@end diff --git a/MetaWear/Tests/Integration/DFUTests.m b/MetaWear/Tests/Integration/DFUTests.m deleted file mode 100644 index 6d0fe01..0000000 --- a/MetaWear/Tests/Integration/DFUTests.m +++ /dev/null @@ -1,181 +0,0 @@ -/** - * DFUTests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 9/30/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" - -@interface DFUTests : MetaWearTest -@property (nonatomic) XCTestExpectation *waitingExpectation; - -@property (nonatomic) DFUServiceInitiator *initiator; -@property (nonatomic) DFUServiceController *dfuController; -@end - -@implementation DFUTests - -- (void)testPerformDFU -{ - [self doUpdateToVersion:@"1.3.3"]; -} - -- (void)testUpdateToRC -{ - [self doUpdateToVersion:@"rc"]; -} - -- (void)testUpdateFromFileMMR -{ - NSURL *fileUrl = [[NSBundle bundleForClass:[self class]] URLForResource:@"metawearmmr-r0.2-r1.3.4" - withExtension:@"zip"]; - MBLFirmwareBuild *firmware = [[MBLFirmwareBuild alloc] initWithHardwareRev:@"0.2" - modelNumber:@"5" - url:fileUrl]; - [self doUpdateToFirmware:firmware]; -} - -- (void)testUpdateFromFileMMC -{ - NSURL *fileUrl = [[NSBundle bundleForClass:[self class]] URLForResource:@"metawearmmc-r0.1-r1.3.5" - withExtension:@"zip"]; - MBLFirmwareBuild *firmware = [[MBLFirmwareBuild alloc] initWithHardwareRev:@"0.1" - modelNumber:@"6" - url:fileUrl]; - [self doUpdateToFirmware:firmware]; -} - -- (void)doUpdateToVersion:(NSString *)firmwareVersion -{ - BFTask *t = [MBLFirmwareBuild - fromReleaseServerWithHardwareRev:self.device.deviceInfo.hardwareRevision - modelNumber:self.device.deviceInfo.modelNumber - firmwareRev:firmwareVersion]; - [t waitUntilFinished]; - [self doUpdateToFirmware:t.result]; -} - -- (void)doUpdateToFirmware:(MBLFirmwareBuild *)firmware -{ - self.waitingExpectation = [self expectationWithDescription:@"wait for DFU"]; - // Do the update! - [[[self.device prepareForFirmwareUpdateToVersionAsync:firmware] success:^(MBLFirmwareUpdateInfo * _Nonnull result) { - NSLog(@"%@", result.firmwareUrl); - DFUFirmware *selectedFirmware; - if ([result.firmwareUrl.pathExtension caseInsensitiveCompare:@"zip"] == NSOrderedSame) { - selectedFirmware = [[DFUFirmware alloc] initWithUrlToZipFile:result.firmwareUrl]; - } else { - selectedFirmware = [[DFUFirmware alloc] initWithUrlToBinOrHexFile:result.firmwareUrl urlToDatFile:nil type:DFUFirmwareTypeApplication]; - } - - self.initiator = [[[DFUServiceInitiator alloc] initWithCentralManager:result.centralManager target:result.target] withFirmware:selectedFirmware]; - self.initiator.forceDfu = YES; - self.initiator.logger = self; - self.initiator.delegate = self; - self.initiator.progressDelegate = self; - self.initiator.peripheralSelector = self; - - self.dfuController = [self.initiator start]; - }] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - [self.waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:160 handler:nil]; -} - -#pragma mark - DFU Service delegate methods - -- (void)dfuStateDidChangeTo:(enum DFUState)state -{ - NSString *msg = @""; - switch (state) { - case DFUStateConnecting: - msg = @"Connecting..."; - break; - case DFUStateStarting: - msg = @"Starting DFU..."; - break; - case DFUStateEnablingDfuMode: - msg = @"Enabling DFU Bootloader..."; - break; - case DFUStateUploading: - msg = @"Uploading..."; - break; - case DFUStateValidating: - msg = @"Validating..."; - break; - case DFUStateDisconnecting: - msg = @"Disconnecting..."; - break; - case DFUStateCompleted: - msg = @"Upload complete"; - [self.waitingExpectation fulfill]; - break; - case DFUStateAborted: - msg = @"Upload aborted"; - break; - } - NSLog(@"%@", msg); -} - -- (void)dfuError:(enum DFUError)error didOccurWithMessage:(NSString * _Nonnull)message -{ - XCTFail(@"Error %ld: %@", (long) error, message); - [self.waitingExpectation fulfill]; -} - -- (void)dfuProgressDidChangeFor:(NSInteger)part outOf:(NSInteger)totalParts to:(NSInteger)progress currentSpeedBytesPerSecond:(double)currentSpeedBytesPerSecond avgSpeedBytesPerSecond:(double)avgSpeedBytesPerSecond -{ - NSLog(@"Progress: %ld%% (part %ld/%ld). Speed: %f bps, Avg speed: %f bps", (long)progress, (long)part, (long)totalParts, currentSpeedBytesPerSecond, avgSpeedBytesPerSecond); -} - -- (void)logWith:(enum LogLevel)level message:(NSString * _Nonnull)message -{ - if (level > LogLevelInfo) { - NSLog(@"%ld: %@", (long) level, message); - } -} - -- (NSArray * _Nullable)filterByHint:(CBUUID * _Nonnull)dfuServiceUUID -{ - return nil; -} - -- (BOOL)select:(CBPeripheral * _Nonnull)peripheral advertisementData:(NSDictionary * _Nonnull)advertisementData RSSI:(NSNumber * _Nonnull)RSSI hint:(NSString * _Nullable)name { - NSLog(@"Looking for: %@", self.device.identifier); - NSLog(@"%@", peripheral); - return [peripheral.identifier isEqual:self.device.identifier]; -} - - -@end diff --git a/MetaWear/Tests/Integration/EnablingTests.m b/MetaWear/Tests/Integration/EnablingTests.m deleted file mode 100644 index 99e3f30..0000000 --- a/MetaWear/Tests/Integration/EnablingTests.m +++ /dev/null @@ -1,53 +0,0 @@ -/** - * EnablingTests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 9/27/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" - -@interface EnablingTests : MetaWearTest -@end - -@implementation EnablingTests - -- (void)testCrazyNewFeature -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"testSwitchRead"]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(600 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:61000000 handler:nil]; -} - -@end diff --git a/MetaWear/Tests/Integration/IncrementingEventConfig.h b/MetaWear/Tests/Integration/IncrementingEventConfig.h deleted file mode 100644 index f2a400b..0000000 --- a/MetaWear/Tests/Integration/IncrementingEventConfig.h +++ /dev/null @@ -1,49 +0,0 @@ -/** - * IncrementingEventConfig.h - * MetaWearTests - * - * Created by Stephen Schiffli on 10/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearSyntaxFriendly.h" - -/* - Config that will produce an incrementing number in the log - */ -@interface IncrementingEventConfig : NSObject - -@property (nonatomic) uint32_t period; - -@property (nonatomic) MBLEvent *incrementingCounter; - -- (instancetype)initWithPeriod:(uint32_t)period; - -@end diff --git a/MetaWear/Tests/Integration/IncrementingEventConfig.m b/MetaWear/Tests/Integration/IncrementingEventConfig.m deleted file mode 100644 index 0349b41..0000000 --- a/MetaWear/Tests/Integration/IncrementingEventConfig.m +++ /dev/null @@ -1,55 +0,0 @@ -/** - * IncrementingEventConfig.m - * MetaWearTests - * - * Created by Stephen Schiffli on 10/23/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "IncrementingEventConfig.h" - -@implementation IncrementingEventConfig - -- (instancetype)initWithPeriod:(uint32_t)period -{ - self = [super init]; - if (self) { - self.period = period; - } - return self; -} - -- (void)runOnDeviceBoot:(MBLMetaWear *)device -{ - self.incrementingCounter = [[device.timer eventWithPeriod:self.period] counterOfEvent]; - [self.incrementingCounter startLoggingAsync]; -} - -@end \ No newline at end of file diff --git a/MetaWear/Tests/Integration/MMA8452QTests.m b/MetaWear/Tests/Integration/MMA8452QTests.m deleted file mode 100644 index 7def68a..0000000 --- a/MetaWear/Tests/Integration/MMA8452QTests.m +++ /dev/null @@ -1,257 +0,0 @@ -/** - * MMA8452QTests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 5/26/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" -#import "MBLAccelerometerMMA8452Q.h" - -@interface MMA8452QTests : MetaWearTest -@property (nonatomic, retain) MBLAccelerometerMMA8452Q *accelerometer; -@end - -@implementation MMA8452QTests - -- (void)setUp -{ - [super setUp]; - - if (![self.device.accelerometer isKindOfClass:[MBLAccelerometerMMA8452Q class]]) { - self.continueAfterFailure = NO; - XCTFail("Trying to run MMA8452Q tests on a board without an MMA8452Q accelerometer"); - } - self.accelerometer = (MBLAccelerometerMMA8452Q *)self.device.accelerometer; -} - - -- (void)testSingleTapUpdates -{ - self.accelerometer.tapDetectionAxis = MBLAccelerometerAxisX; - - [self eventUpdateTest:self.accelerometer.tapEvent time:10]; -} - -- (void)testSingleTapCommand -{ - [self eventCommandTest:self.accelerometer.tapEvent time:5]; -} - -- (void)testSingleTapLogging -{ - [self eventLoggingTest:self.accelerometer.tapEvent time:5]; -} - -- (void)testSingleTapConcurrency -{ - [self eventConcurrencyTest:self.accelerometer.tapEvent time:5]; -} - - -- (void)testDoubleTapUpdates -{ - self.accelerometer.tapType = MBLAccelerometerTapTypeDouble; - [self eventUpdateTest:self.accelerometer.tapEvent time:5]; -} - -- (void)testDoubleTapCommand -{ - self.accelerometer.tapType = MBLAccelerometerTapTypeDouble; - [self eventCommandTest:self.accelerometer.tapEvent time:5]; -} - -- (void)testDoubleTapLogging -{ - self.accelerometer.tapType = MBLAccelerometerTapTypeDouble; - [self eventLoggingTest:self.accelerometer.tapEvent time:5]; -} - -- (void)testDoubleTapConcurrency -{ - self.accelerometer.tapType = MBLAccelerometerTapTypeDouble; - [self eventConcurrencyTest:self.accelerometer.tapEvent time:5]; -} - - -- (void)testSingleAndDoubleTap -{ - self.accelerometer.tapType = MBLAccelerometerTapTypeBoth; - [self eventUpdateTest:self.accelerometer.tapEvent time:5]; -} - - -- (void)testOrientationUpdates -{ - [self eventUpdateTest:self.accelerometer.orientationEvent time:5]; -} - -- (void)testOrientationCommand -{ - [self eventCommandTest:self.accelerometer.orientationEvent time:5]; -} - -- (void)testOrientationLogging -{ - [self eventLoggingTest:self.accelerometer.orientationEvent time:5]; -} - -- (void)testOrientationEverything -{ - [self eventConcurrencyTest:self.accelerometer.orientationEvent time:5]; -} - - -- (void)testFreeFallUpdates -{ - //self.accelerometer.freeFallWidth = 20; - //self.accelerometer.freeFallThreshold = 0.2; - [self eventUpdateTest:self.accelerometer.freeFallEvent time:20]; -} - -- (void)testFreeFallCommand -{ - [self eventCommandTest:self.accelerometer.freeFallEvent time:5]; -} - -- (void)testFreeFallLogging -{ - [self eventLoggingTest:self.accelerometer.freeFallEvent time:5]; -} - -- (void)testFreeFallEverything -{ - [self eventConcurrencyTest:self.accelerometer.freeFallEvent time:5]; -} - - -- (void)testShakeUpdates -{ - self.accelerometer.sampleFrequency = 50; - self.accelerometer.shakeWidth = 400.0; - self.accelerometer.shakeThreshold = 1.0; - [self eventUpdateTest:self.accelerometer.shakeEvent time:5]; - self.accelerometer.shakeWidth = 200.0; - self.accelerometer.shakeThreshold = 0.5; -} - -- (void)testShakeCommand -{ - [self eventCommandTest:self.accelerometer.shakeEvent time:5]; -} - -- (void)testShakeLogging -{ - [self eventLoggingTest:self.accelerometer.shakeEvent time:5]; -} - -- (void)testShakeEverything -{ - [self eventConcurrencyTest:self.accelerometer.shakeEvent time:5]; -} - -- (void)testButtonTurnOnLEDTapTurnOff -{ - [self.device.mechanicalSwitch.switchUpdateEvent programCommandsToRunOnEventAsync:^{ - [self.device.led flashLEDColorAsync:[MBLColor greenColor] withIntensity:0.5]; - }]; - [self.accelerometer.tapEvent programCommandsToRunOnEventAsync:^{ - [self.device.led setLEDOnAsync:NO withOptions:1]; - }]; - - [self.accelerometer.tapEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"You tapped me!"); - }]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.mechanicalSwitch.switchUpdateEvent eraseCommandsToRunOnEventAsync]; - [self.accelerometer.tapEvent eraseCommandsToRunOnEventAsync]; - [self.device.led setLEDOnAsync:NO withOptions:1]; - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:15 handler:nil]; -} - -- (void)testAllProperties -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - - self.accelerometer.fullScaleRange = MBLAccelerometerRange8G; - self.accelerometer.highPassFilter = NO; - self.accelerometer.highPassCutoffFreq = MBLAccelerometerCutoffFreqHigheset; - self.accelerometer.sampleFrequency = 50; - self.accelerometer.lowNoise = NO; - self.accelerometer.fastReadMode = NO; - self.accelerometer.sleepSampleFrequency = MBLAccelerometerSleepSampleFrequency1_56Hz; - self.accelerometer.sleepPowerScheme = MBLAccelerometerPowerSchemeNormal; - self.accelerometer.autoSleep = NO; - self.accelerometer.tapDetectionAxis = MBLAccelerometerAxisX; - self.accelerometer.tapType = MBLAccelerometerTapTypeSingle; - - int __block count = 0; - [self.device.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(MBLAccelerometerData *obj, NSError *error) { - // The RMS when not moving should be gravity only, or sqrt(1000*1000/3) = 577 - XCTAssertEqualWithAccuracy(obj.RMS, 0.577, 0.040); - count++; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.device.accelerometer.dataReadyEvent stopNotificationsAsync]; - // 2 seconds @50Hz gives us 100 samples - XCTAssertEqualWithAccuracy(count, 100, 20); - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testTapAndStream -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - - [self.accelerometer.tapEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"TAP: %@", obj); - }]; - [self.accelerometer.dataReadyEvent startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"ACC: %@", obj); - }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.accelerometer.tapEvent stopNotificationsAsync]; - [self.accelerometer.dataReadyEvent stopNotificationsAsync]; - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:60 handler:nil]; - -} - -@end diff --git a/MetaWear/Tests/Integration/MagnetometerTests.m b/MetaWear/Tests/Integration/MagnetometerTests.m deleted file mode 100644 index 41d60f2..0000000 --- a/MetaWear/Tests/Integration/MagnetometerTests.m +++ /dev/null @@ -1,55 +0,0 @@ -/** - * MagnetometerTests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 9/28/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" - -@interface MagnetometerTests : MetaWearTest -@property (nonatomic, retain) MBLMagnetometerBMM150 *magnetometer; -@end - -@implementation MagnetometerTests - -- (void)setUp -{ - [super setUp]; - - if (![self.device.magnetometer isKindOfClass:[MBLMagnetometerBMM150 class]]) { - self.continueAfterFailure = NO; - XCTFail("Trying to run magnetometer tests on a board without a magnetometer"); - } - self.magnetometer = (MBLMagnetometerBMM150 *)self.device.magnetometer; -} - -@end diff --git a/MetaWear/Classes/Core/MBLAnonymousEvent.h b/MetaWear/Tests/Integration/ManualTests.swift similarity index 61% rename from MetaWear/Classes/Core/MBLAnonymousEvent.h rename to MetaWear/Tests/Integration/ManualTests.swift index 15df8a7..7689bf2 100644 --- a/MetaWear/Classes/Core/MBLAnonymousEvent.h +++ b/MetaWear/Tests/Integration/ManualTests.swift @@ -1,8 +1,8 @@ /** - * MBLAnonymousEvent.h - * MetaWear + * ManualTests.swift + * MetaWear-Tests * - * Created by Stephen Schiffli on 9/22/17. + * Created by Stephen Schiffli on 12/28/17. * Copyright 2017 MbientLab Inc. All rights reserved. * * IMPORTANT: Your use of this Software is limited to those specific rights @@ -33,18 +33,31 @@ * contact MbientLab via email: hello@mbientlab.com */ -#import -@class MBLDataSample; +import XCTest +import BoltsSwift +@testable import MetaWear +@testable import MetaWearCpp -/** - Pared down variant of the MBLEvent interface that can only be used to - retrieve logged data from a board that was programmed elsewhere. - */ -@interface MBLAnonymousEvent : MBLEvent - -/* - String identifying the data producer chain - */ -@property (nonatomic, readonly, nullable) NSString *identifier; - -@end +class ManualTests: XCTestCase { + func testCancelPendingConnection() { + let connectExpectation = XCTestExpectation(description: "connecting") + MetaWearScanner.shared.startScan(allowDuplicates: true) { (device) in + if device.rssi > -50 { + MetaWearScanner.shared.stopScan() + print("Remove battery from device...") + DispatchQueue.main.asyncAfter(deadline: .now() + 7) { + print("Connecting...") + device.connectAndSetup().continueWith { t in + XCTAssertTrue(t.cancelled) + connectExpectation.fulfill() + } + DispatchQueue.main.asyncAfter(deadline: .now() + 2) { + print("Cancel Connection...") + device.cancelConnection() + } + } + } + } + wait(for: [connectExpectation], timeout: 60) + } +} diff --git a/MetaWear/Tests/Integration/MetaWearSyntaxFriendly.h b/MetaWear/Tests/Integration/MetaWearSyntaxFriendly.h deleted file mode 100644 index 4b248e2..0000000 --- a/MetaWear/Tests/Integration/MetaWearSyntaxFriendly.h +++ /dev/null @@ -1,51 +0,0 @@ -/** - * MetaWearSyntaxFriendly.h - * MetaWearTests - * - * Created by Stephen Schiffli on 11/2/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -// The @import doesn't seem to play nice with syntax highlighting right now -// so we do this instead, aint pretty but it's certainly nicer than dozens of -// syntax highlighter errors -#if TARGET_OS_IOS - #import - #import - #import -#elif TARGET_OS_TV - #import -#else - #import - #import - #import -#endif diff --git a/MetaWear/Tests/Integration/MetaWearTest.h b/MetaWear/Tests/Integration/MetaWearTest.h deleted file mode 100644 index 77752c4..0000000 --- a/MetaWear/Tests/Integration/MetaWearTest.h +++ /dev/null @@ -1,60 +0,0 @@ -/** - * MetaWearTest.h - * MetaWearTests - * - * Created by Stephen Schiffli on 10/7/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import "MetaWearSyntaxFriendly.h" - -@interface MetaWearTest : XCTestCase -@property (nonatomic) MBLMetaWear *device; -@property (nonatomic) MBLModel model; -@property (nonatomic) BOOL disconnectAtEnd; - -@property (nonatomic) uint8_t i2cDevice; -@property (nonatomic) uint8_t i2cReadOnlyReg; -@property (nonatomic) uint8_t i2cReadOnlyRegValue; -@property (nonatomic) uint8_t i2cScratchReg; -@property (nonatomic) uint8_t i2cScratchRegValue; - -- (void)eventUpdateTest:(MBLEvent *)event time:(float)time; -- (void)eventUpdateTest:(MBLEvent *)event time:(float)time frequency:(float)frequency; -- (void)eventCommandTest:(MBLEvent *)event time:(float)time; -- (void)eventLoggingTest:(MBLEvent *)event time:(float)time; -- (void)eventConcurrencyTest:(MBLEvent *)event time:(float)time; - -- (double)accelerometerFrequencyNear:(double)frequency; -- (void)sendData:(NSArray *)data; - -@end diff --git a/MetaWear/Tests/Integration/MetaWearTest.m b/MetaWear/Tests/Integration/MetaWearTest.m deleted file mode 100644 index 86ecdba..0000000 --- a/MetaWear/Tests/Integration/MetaWearTest.m +++ /dev/null @@ -1,309 +0,0 @@ -/** - * MetaWearTests.m - * MetaWearTests - * - * Created by Stephen Schiffli on 10/1/14. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearTest.h" - -static const BOOL forceClearAtStart = NO; -static const int secondsToConnect = 20; - -@implementation MetaWearTest - -- (void)setUp -{ - [super setUp]; - - // Put setup code here. This method is called before the invocation of each test method in the class. - XCTestExpectation *connectDeviceExpectation = [self expectationWithDescription:@"connect to device"]; - [MBLMetaWearManager sharedManager].logLevel = MBLLogLevelInfo; - [[[[MBLDeviceLookup deviceForTestWithTimeout:10.0] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - self.device = t.result; - assert(self.device); - return [MBLDeviceLookup connectDevice:self.device timeout:secondsToConnect forceClear:forceClearAtStart]; - }] success:^(id result) { - if ([self.device.ambientLight isKindOfClass:[MBLAmbientLightLTR329 class]]) { - self.i2cDevice = 0x29; - self.i2cReadOnlyReg = 0x87; - self.i2cReadOnlyRegValue = 0x05; - self.i2cScratchReg = 0x85; - self.i2cScratchRegValue = 0x35; - } else if ([self.device.accelerometer isKindOfClass:[MBLAccelerometerMMA8452Q class]]) { - self.i2cDevice = 0x1C; - self.i2cReadOnlyReg = 0x0D; - self.i2cReadOnlyRegValue = 0x2A; - self.i2cScratchReg = 0x12; - self.i2cScratchRegValue = 0x54; - } else if ([self.device.photometer isKindOfClass:[MBLPhotometerTCS3472 class]]) { - self.i2cDevice = 0x29; - self.i2cReadOnlyReg = 0x80 | 0x12; - self.i2cReadOnlyRegValue = 0x44; - self.i2cScratchReg = 0x80 | 0x03; - self.i2cScratchRegValue = 0xAB; - } else { - self.i2cDevice = 0; - } - self.model = [MBLDeviceLookup metawearModel]; - self.disconnectAtEnd = YES; - [connectDeviceExpectation fulfill]; - }] failure:^(NSError * _Nonnull error) { - self.continueAfterFailure = NO; - XCTAssertNil(error); - }]; - // The test will pause here, running the run loop, until the timeout is hit - // or all expectations are fulfilled. - [self waitForExpectationsWithTimeout:(secondsToConnect * 2) + 10 handler:nil]; -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - if (self.device && self.disconnectAtEnd) { - XCTestExpectation *disconnectDeviceExpectation = [self expectationWithDescription:@"disconnect from device"]; - [[self.device disconnectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [disconnectDeviceExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - } - - [super tearDown]; -} - -- (void)eventUpdateTest:(MBLEvent *)event time:(float)time -{ - [[event startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - XCTAssertNil(error); - NSLog(@"%@", obj); - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return nil; - }]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for stopNotificationsAsync"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[event stopNotificationsAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - }); - [self waitForExpectationsWithTimeout:(time + 5) handler:nil]; -} - -- (void)eventUpdateTest:(MBLEvent *)event time:(float)time frequency:(float)frequency -{ - float __block count = 0; - [[event startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - XCTAssertNil(error); - NSLog(@"%@", obj); - count++; - }] failure:^(NSError * error) { - XCTAssertNil(error); - }]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for stopNotificationsAsync"]; - NSDate *methodStart = [NSDate date]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[event stopNotificationsAsync] success:^(id _Nonnull result) { - NSDate *methodFinish = [NSDate date]; - NSTimeInterval executionTime = [methodFinish timeIntervalSinceDate:methodStart]; - XCTAssertEqualWithAccuracy(count, frequency * executionTime, frequency / 2.0); - NSLog(@"actual:%f expected:%f", count, frequency * executionTime); - [waitingExpectation fulfill]; - }]; - }); - [self waitForExpectationsWithTimeout:(time + 5) handler:nil]; -} - -- (void)eventCommandTest:(MBLEvent *)event time:(float)time -{ - [[event programCommandsToRunOnEventAsync:^{ - [self.device.led flashLEDColorAsync:[MBLColor whiteColor] withIntensity:1.0 numberOfFlashes:1]; - [self.device.hapticBuzzer startHapticWithDutyCycleAsync:248 pulseWidth:500 completion:nil]; - }] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - }]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for eraseCommandsToRunOnEventAsync"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[[event eraseCommandsToRunOnEventAsync] success:^(id _Nonnull result) { - [waitingExpectation fulfill]; - }] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - }]; - }); - [self waitForExpectationsWithTimeout:time + 5 handler:nil]; -} - -- (void)eventLoggingTest:(MBLEvent *)event time:(float)time; -{ - [[event startLoggingAsync] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - }]; - - float __block progress = 0; - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for log download"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[[event downloadLogAndStopLoggingAsync:YES progressHandler:^(float number) { - XCTAssertLessThanOrEqual(number, 1.0); - XCTAssertGreaterThanOrEqual(number, 0.0); - XCTAssertGreaterThanOrEqual(number, progress); - progress = number; - }] success:^(NSArray * _Nonnull result) { - XCTAssertEqual(progress, 1.0); - for (id obj in result) { - NSLog(@"%@", obj); - } - [waitingExpectation fulfill]; - }] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - }]; - }); - [self waitForExpectationsWithTimeout:time + 60 handler:nil]; -} - -- (void)eventConcurrencyTest:(MBLEvent *)event time:(float)time -{ - int __block notificationCount = 0; - float __block progress = 0; - - [event startLoggingAsync]; - [[event startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - XCTAssertNil(error); - NSLog(@"%@", obj); - notificationCount++; - }] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - }]; - [event programCommandsToRunOnEventAsync:^{ - [self.device.led flashLEDColorAsync:[MBLColor whiteColor] withIntensity:1.0 numberOfFlashes:1]; - [self.device.hapticBuzzer startHapticWithDutyCycleAsync:248 pulseWidth:200 completion:nil]; - }]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for log download"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(time * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [event eraseCommandsToRunOnEventAsync]; - [event stopNotificationsAsync]; - [[[event downloadLogAndStopLoggingAsync:YES progressHandler:^(float number) { - XCTAssertLessThanOrEqual(number, 1.0); - XCTAssertGreaterThanOrEqual(number, 0.0); - XCTAssertGreaterThanOrEqual(number, progress); - progress = number; - }] success:^(NSArray * _Nonnull result) { - XCTAssertEqual(progress, 1.0); - XCTAssertGreaterThanOrEqual(notificationCount, result.count); - for (id obj in result) { - NSLog(@"%@", obj); - } - [waitingExpectation fulfill]; - }] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - [waitingExpectation fulfill]; - }]; - }); - [self waitForExpectationsWithTimeout:time + 10 handler:nil]; -} - -- (double)accelerometerFrequencyNear:(double)frequency -{ - MBLAccelerometer *accelerometer = self.device.accelerometer; - if ([accelerometer isKindOfClass:[MBLAccelerometerBMA255 class]]) { - if (frequency > 1000.0) { - return 2000.0; - } else if (frequency > 500.0) { - return 1000.0; - } else if (frequency > 250.0) { - return 500.0; - } else if (frequency > 125.0) { - return 125.0; - } else if (frequency > 62.5) { - return 62.5; - } else if (frequency > 31.26) { - return 31.26; - } else if (frequency > 15.62) { - return 15.62; - } else { - return 7.81; - } - } else if ([accelerometer isKindOfClass:[MBLAccelerometerBMI160 class]]) { - if (frequency > 800.0) { - return 1600.0; - } else if (frequency > 400.0) { - return 800.0; - } else if (frequency > 200.0) { - return 400.0; - } else if (frequency > 100.0) { - return 200.0; - } else if (frequency > 50.0) { - return 100.0; - } else if (frequency > 25.0) { - return 50.0; - } else if (frequency > 12.5) { - return 25.0; - } else { - return 12.5; - } - } else if ([accelerometer isKindOfClass:[MBLAccelerometerMMA8452Q class]]) { - if (frequency > 400.0) { - return 800.0; - } else if (frequency > 200.0) { - return 400.0; - } else if (frequency > 100.0) { - return 200.0; - } else if (frequency > 50.0) { - return 100.0; - } else if (frequency > 12.5) { - return 50.0; - } else if (frequency > 6.25) { - return 12.5; - } else if (frequency > 1.56) { - return 6.25; - } else { - return 1.56; - } - } - assert(NO && "new accelerometer?"); - return 0; -} - -- (void)sendData:(NSArray *)data -{ - for (NSString *byteArray in data) { - NSData *toSend = [MBLMockUtils dataFromString:byteArray]; - [self.device writeCommandRegister:toSend withResponse:NO]; - } -} - -@end diff --git a/MetaWear/Tests/Integration/SendBytesTest.m b/MetaWear/Tests/Integration/SendBytesTest.m deleted file mode 100644 index 70eb5d3..0000000 --- a/MetaWear/Tests/Integration/SendBytesTest.m +++ /dev/null @@ -1,160 +0,0 @@ -/** - * SendBytesTest.m - * MetaWearTests - * - * Created by Stephen Schiffli on 12/16/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import "MetaWearSyntaxFriendly.h" - -static const int secondsToConnect = 20; - -/* - This test setup bypasses all the setup code normally run when connecting to a device. - Useful for doing advanced debugging. - */ -@interface SendBytesTest : XCTestCase -@property (nonatomic, retain) MBLMetaWear *device; -@end - -@implementation SendBytesTest - -- (void)setUp -{ - [super setUp]; - - // Put setup code here. This method is called before the invocation of each test method in the class. - XCTestExpectation *connectDeviceExpectation = [self expectationWithDescription:@"connect to device"]; - [MBLMetaWearManager sharedManager].logLevel = MBLLogLevelInfo; - [[[[MBLDeviceLookup deviceForTestWithTimeout:10.0] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask * _Nonnull t) { - MBLMetaWear *device = t.result; - assert(device); - device.bypassSetup = YES; - return [device connectWithTimeoutAsync:secondsToConnect]; - }] success:^(MBLMetaWear * _Nonnull result) { - self.device = result; - [connectDeviceExpectation fulfill]; - }] failure:^(NSError * _Nonnull error) { - self.continueAfterFailure = NO; - XCTAssertNil(error); - }]; - // The test will pause here, running the run loop, until the timeout is hit - // or all expectations are fulfilled. - [self waitForExpectationsWithTimeout:(secondsToConnect * 2) + 10 handler:nil]; -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - if (self.device) { - XCTestExpectation *disconnectDeviceExpectation = [self expectationWithDescription:@"disconnect from device"]; - [[self.device disconnectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [disconnectDeviceExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - } - [super tearDown]; -} - -- (void)sendData:(NSArray *)data -{ - for (NSString *byteArray in data) { - NSData *toSend = [MBLMockUtils dataFromString:byteArray]; - [self.device writeCommandRegister:toSend withResponse:NO]; - } -} - -- (void)testFreq -{ -// [self.device.accelerometer.dataReadyEvent addNotificationWithExecutor:[BFExecutor dispatchExecutor] handler:^(id _Nullable obj, NSError * _Nullable error) { -// NSLog(@"%@", obj); -// }]; -// [((MBLBarometerBMP280 *)self.device.barometer).periodicPressure addNotificationWithExecutor:[BFExecutor dispatchExecutor] handler:^(id _Nullable obj, NSError * _Nullable error) { -// NSLog(@"%@", obj); -// }]; - [self sendData:@[@"12-83", - @"12-84", - @"03-83", - @"03-81", - @"03-82", - @"03-85", - @"03-89", - @"03-8A", - @"03-04-01", - @"12-01-01"]]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2000 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:5000 handler:nil]; -} - -- (void)testNukeIt -{ - [self sendData:@[@"0F-08", - @"FE-05", - @"FE-06"]]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testMetaBoot -{ - [self sendData:@[@"FE-02"]]; - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testSomeReads -{ - [self sendData:@[@"FE-89"]]; - [self sendData:@[@"FE-8A-00"]]; - [self sendData:@[@"FE-8A-01"]]; - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(20 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:30 handler:nil]; -} - -@end diff --git a/MetaWear/Tests/Integration/TempLoggerConfiguration.h b/MetaWear/Tests/Integration/TempLoggerConfiguration.h deleted file mode 100644 index 8dc0eab..0000000 --- a/MetaWear/Tests/Integration/TempLoggerConfiguration.h +++ /dev/null @@ -1,49 +0,0 @@ -/** - * TempLoggerConfiguration.h - * MetaWearTests - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MetaWearSyntaxFriendly.h" - -/* - Simple config that logs the temperature with X period - */ -@interface TempLoggerConfiguration : NSObject - -@property (nonatomic) uint32_t period; - -@property (nonatomic) MBLEvent *periodicTemperature; - -- (instancetype)initWithPeriod:(uint32_t)period; - -@end diff --git a/MetaWear/Tests/Integration/TempLoggerConfiguration.m b/MetaWear/Tests/Integration/TempLoggerConfiguration.m deleted file mode 100644 index bd7bb20..0000000 --- a/MetaWear/Tests/Integration/TempLoggerConfiguration.m +++ /dev/null @@ -1,55 +0,0 @@ -/** - * TempLoggerConfiguration.m - * MetaWearTests - * - * Created by Stephen Schiffli on 5/28/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "TempLoggerConfiguration.h" - -@implementation TempLoggerConfiguration - -- (instancetype)initWithPeriod:(uint32_t)period -{ - self = [super init]; - if (self) { - self.period = period; - } - return self; -} - -- (void)runOnDeviceBoot:(MBLMetaWear *)device -{ - self.periodicTemperature = [device.temperature.onDieThermistor periodicReadWithPeriod:self.period]; - [self.periodicTemperature startLoggingAsync]; -} - -@end diff --git a/MetaWear/Tests/Integration/Tests.swift b/MetaWear/Tests/Integration/Tests.swift new file mode 100644 index 0000000..6ddda7c --- /dev/null +++ b/MetaWear/Tests/Integration/Tests.swift @@ -0,0 +1,121 @@ +/** + * Tests.swift + * MetaWear-Tests + * + * Created by Stephen Schiffli on 12/14/17. + * Copyright 2017 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import XCTest +import BoltsSwift +@testable import MetaWear +@testable import MetaWearCpp + +class Tests: XCTestCase { + var device: MetaWear! + var data: [MetaWearData] = [] + var waitForDisconnection: Task? + + override func setUp() { + super.setUp() + // Put setup code here. This method is called before the invocation of each test method in the class. + let connectExpectation = XCTestExpectation(description: "connecting") + MetaWearScanner.shared.startScan(allowDuplicates: true) { (device) in + if device.rssi > -50 { + MetaWearScanner.shared.stopScan() + self.device = device + device.connectAndSetup().continueWith { t -> () in + if let error = t.error { + self.continueAfterFailure = false + XCTFail(error.localizedDescription) + } + self.waitForDisconnection = t.result + connectExpectation.fulfill() + } + } + } + wait(for: [connectExpectation], timeout: 60) + } + + override func tearDown() { + // Put teardown code here. This method is called after the invocation of each test method in the class. + super.tearDown() + guard let task = self.waitForDisconnection else { + return + } + + let disconnectExpectation = XCTestExpectation(description: "disconnecting") + task.continueWith { _ -> () in + disconnectExpectation.fulfill() + return () + } + mbl_mw_debug_disconnect(device.board) + wait(for: [disconnectExpectation], timeout: 60) + } + + func testConnection() { + print(device.mac!) + print(device.info!.firmwareRevision) + print(device.info!.hardwareRevision) + print(device.info!.manufacturer) + print(device.info!.modelNumber) + print(device.info!.serialNumber) + } + + func testAccelData() { + let expectation = XCTestExpectation(description: "get accel data") + // Set the max range of the accelerometer + mbl_mw_acc_set_range(device.board, 8.0) + mbl_mw_acc_write_acceleration_config(device.board) + let accSignal = mbl_mw_acc_get_acceleration_data_signal(device.board) + mbl_mw_datasignal_subscribe(accSignal, bridge(obj: self)) { (context, dataPtr) in + let this: Tests = bridge(ptr: context!) + print(dataPtr!.pointee.valueAs() as MblMwCartesianFloat) + this.data.append(dataPtr!.pointee.copy()) + } + mbl_mw_acc_enable_acceleration_sampling(device.board) + mbl_mw_acc_start(device.board) + + // Stop after 5 seconds + DispatchQueue.main.asyncAfter(deadline: .now() + 5) { + // Stop the stream + mbl_mw_acc_stop(self.device.board) + mbl_mw_acc_disable_acceleration_sampling(self.device.board) + mbl_mw_datasignal_unsubscribe(accSignal) + for entry in self.data { + let pt: MblMwCartesianFloat = entry.valueAs() + print("\(pt.x) \(pt.y) \(pt.z)") + } + + expectation.fulfill() + } + wait(for: [expectation], timeout: 30) + } +} diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/AppDelegate.m b/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/AppDelegate.m index 80c0c6f..87c5d19 100644 --- a/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/AppDelegate.m +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/AppDelegate.m @@ -17,13 +17,6 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. - if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) { - UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; - UIUserNotificationSettings *mySettings = [UIUserNotificationSettings settingsForTypes:types categories:nil]; - [[UIApplication sharedApplication] registerUserNotificationSettings:mySettings]; - } else { - // Method is not available. - } return YES; } diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/Base.lproj/Main.storyboard b/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/Base.lproj/Main.storyboard index 662633d..f93cc1e 100644 --- a/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/Base.lproj/Main.storyboard +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/Base.lproj/Main.storyboard @@ -1,15 +1,18 @@ - + + + + - + - + @@ -17,20 +20,7 @@ - - - - - - - @@ -44,7 +34,7 @@ - + diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/ViewController.h b/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/ViewController.h deleted file mode 100644 index 1e31c09..0000000 --- a/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/ViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ViewController.h -// MetaWear -// -// Created by Stephen Schiffli on 9/27/16. -// Copyright © 2016 Stephen Schiffli. All rights reserved. -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/ViewController.m b/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/ViewController.m deleted file mode 100644 index 5867c46..0000000 --- a/MetaWear/Tests/MetaWearIntegrationTestHost-iOS/ViewController.m +++ /dev/null @@ -1,24 +0,0 @@ -// -// ViewController.m -// MetaWear -// -// Created by Stephen Schiffli on 9/27/16. -// Copyright © 2016 Stephen Schiffli. All rights reserved. -// - -#import "ViewController.h" - -@interface ViewController () - -@end - -@implementation ViewController - -- (IBAction)sendPushNotification:(id)sender -{ - UILocalNotification *notification = [[UILocalNotification alloc] init]; - notification.alertBody = @"Test Notification"; - [[UIApplication sharedApplication] presentLocalNotificationNow:notification]; -} - -@end diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json new file mode 100644 index 0000000..f84499b --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Circular.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Contents.json b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Contents.json new file mode 100644 index 0000000..c8ebf06 --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Contents.json @@ -0,0 +1,28 @@ +{ + "assets" : [ + { + "idiom" : "watch", + "filename" : "Circular.imageset", + "role" : "circular" + }, + { + "idiom" : "watch", + "filename" : "Extra Large.imageset", + "role" : "extra-large" + }, + { + "idiom" : "watch", + "filename" : "Modular.imageset", + "role" : "modular" + }, + { + "idiom" : "watch", + "filename" : "Utilitarian.imageset", + "role" : "utilitarian" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json new file mode 100644 index 0000000..f84499b --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Extra Large.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json new file mode 100644 index 0000000..f84499b --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Modular.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json new file mode 100644 index 0000000..f84499b --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Complication.complicationset/Utilitarian.imageset/Contents.json @@ -0,0 +1,18 @@ +{ + "images" : [ + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : "<=145" + }, + { + "idiom" : "watch", + "scale" : "2x", + "screen-width" : ">145" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Contents.json b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/ExtensionDelegate.swift b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/ExtensionDelegate.swift new file mode 100644 index 0000000..712bdad --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/ExtensionDelegate.swift @@ -0,0 +1,50 @@ +// +// ExtensionDelegate.swift +// MetaWearIntegrationTestHost-watchOS Extension +// +// Created by Stephen Schiffli on 5/2/18. +// Copyright © 2018 Stephen Schiffli. All rights reserved. +// + +import WatchKit + +class ExtensionDelegate: NSObject, WKExtensionDelegate { + + func applicationDidFinishLaunching() { + // Perform any final initialization of your application. + } + + func applicationDidBecomeActive() { + // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. + } + + func applicationWillResignActive() { + // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. + // Use this method to pause ongoing tasks, disable timers, etc. + } + + func handle(_ backgroundTasks: Set) { + // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one. + for task in backgroundTasks { + // Use a switch statement to check the task type + switch task { + case let backgroundTask as WKApplicationRefreshBackgroundTask: + // Be sure to complete the background task once you’re done. + backgroundTask.setTaskCompletedWithSnapshot(false) + case let snapshotTask as WKSnapshotRefreshBackgroundTask: + // Snapshot tasks have a unique completion call, make sure to set your expiration date + snapshotTask.setTaskCompleted(restoredDefaultState: true, estimatedSnapshotExpiration: Date.distantFuture, userInfo: nil) + case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask: + // Be sure to complete the connectivity task once you’re done. + connectivityTask.setTaskCompletedWithSnapshot(false) + case let urlSessionTask as WKURLSessionRefreshBackgroundTask: + // Be sure to complete the URL session task once you’re done. + urlSessionTask.setTaskCompletedWithSnapshot(false) + default: + // make sure to complete unhandled task types + task.setTaskCompletedWithSnapshot(false) + } + } + } + +} diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Info.plist b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Info.plist new file mode 100644 index 0000000..9b7de48 --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/Info.plist @@ -0,0 +1,36 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + MetaWearIntegrationTestHost-watchOS Extension + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionAttributes + + WKAppBundleIdentifier + com.mbientlab.MetaWearIntegrationTestHost-iOS.watchkitapp + + NSExtensionPointIdentifier + com.apple.watchkit + + WKExtensionDelegateClassName + $(PRODUCT_MODULE_NAME).ExtensionDelegate + + diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/InterfaceController.swift b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/InterfaceController.swift new file mode 100644 index 0000000..e8c23c0 --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS Extension/InterfaceController.swift @@ -0,0 +1,31 @@ +// +// InterfaceController.swift +// MetaWearIntegrationTestHost-watchOS Extension +// +// Created by Stephen Schiffli on 5/2/18. +// Copyright © 2018 Stephen Schiffli. All rights reserved. +// + +import WatchKit +import Foundation + + +class InterfaceController: WKInterfaceController { + + override func awake(withContext context: Any?) { + super.awake(withContext: context) + + // Configure interface objects here. + } + + override func willActivate() { + // This method is called when watch view controller is about to be visible to user + super.willActivate() + } + + override func didDeactivate() { + // This method is called when watch view controller is no longer visible + super.didDeactivate() + } + +} diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..448cf66 --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,62 @@ +{ + "images" : [ + { + "size" : "24x24", + "idiom" : "watch", + "scale" : "2x", + "role" : "notificationCenter", + "subtype" : "38mm" + }, + { + "size" : "27.5x27.5", + "idiom" : "watch", + "scale" : "2x", + "role" : "notificationCenter", + "subtype" : "42mm" + }, + { + "size" : "29x29", + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "watch", + "role" : "companionSettings", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "watch", + "scale" : "2x", + "role" : "appLauncher", + "subtype" : "38mm" + }, + { + "size" : "44x44", + "idiom" : "watch", + "scale" : "2x", + "role" : "longLook", + "subtype" : "42mm" + }, + { + "size" : "86x86", + "idiom" : "watch", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "38mm" + }, + { + "size" : "98x98", + "idiom" : "watch", + "scale" : "2x", + "role" : "quickLook", + "subtype" : "42mm" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Assets.xcassets/Contents.json b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Assets.xcassets/Contents.json new file mode 100644 index 0000000..da4a164 --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Base.lproj/Interface.storyboard b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Base.lproj/Interface.storyboard new file mode 100644 index 0000000..bf1e56f --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Base.lproj/Interface.storyboard @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Info.plist b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Info.plist new file mode 100644 index 0000000..6ca380e --- /dev/null +++ b/MetaWear/Tests/MetaWearIntegrationTestHost-watchOS/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + TestHost + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + + WKCompanionAppBundleIdentifier + com.mbientlab.MetaWearIntegrationTestHost-iOS + WKWatchKitApp + + + diff --git a/MetaWear/Tests/Unit/FirmwareTests.swift b/MetaWear/Tests/Unit/FirmwareTests.swift new file mode 100644 index 0000000..a8ddd18 --- /dev/null +++ b/MetaWear/Tests/Unit/FirmwareTests.swift @@ -0,0 +1,78 @@ +/** + * FirmwareTests.swift + * MetaWear-Tests + * + * Created by Stephen Schiffli on 1/9/18. + * Copyright 2018 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import XCTest +import BoltsSwift +@testable import MetaWear +@testable import MetaWearCpp + +class FirmwareTests: XCTestCase { + func testFirmwareUpdateManager() { + let myExpectation = XCTestExpectation(description: "getting info1") + + FirmwareServer.getAllFirmwareAsync(hardwareRev: "0.1", modelNumber: "0").continueOnSuccessWithTask { result -> Task in + XCTAssertEqual(result[0].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.0.4/firmware.bin") + XCTAssertEqual(result[1].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.1.0/firmware.bin") + XCTAssertEqual(result[2].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.1.1/firmware.bin") + XCTAssertEqual(result[3].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.1.2/firmware.bin") + XCTAssertEqual(result[4].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.1.3/firmware.bin") + XCTAssertEqual(result[5].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.2.3/firmware.bin") + XCTAssertEqual(result[6].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.2.4/firmware.bin") + XCTAssertEqual(result[7].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.2.5/firmware.bin") + XCTAssertEqual(result[8].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.3.4/firmware.bin") + XCTAssertEqual(result[9].firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.3.6/firmware.bin") + return FirmwareServer.getLatestFirmwareAsync(hardwareRev: "0.1", modelNumber: "0") + }.continueOnSuccessWithTask { result -> Task in + XCTAssertEqual(result.firmwareURL.absoluteString, + "https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.3.6/firmware.bin") + return result.firmwareURL.downloadAsync() + }.continueWith { t in + XCTAssertFalse(t.faulted) + XCTAssertNil(t.error) + myExpectation.fulfill() + } + wait(for: [myExpectation], timeout: 60) + } +} diff --git a/MetaWear/Tests/Unit/MBLAutomaticTests.m b/MetaWear/Tests/Unit/MBLAutomaticTests.m deleted file mode 100644 index 4667fc3..0000000 --- a/MetaWear/Tests/Unit/MBLAutomaticTests.m +++ /dev/null @@ -1,362 +0,0 @@ -/** - * MBLAutomaticTests.m - * MetaWearUnitTests - * - * Created by Stephen Schiffli on 5/5/15. - * Copyright 2014-2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMockMetaWearUnitTest.h" - -@interface MBLAutomaticTests : MBLMockMetaWearUnitTest - -@end - -@implementation MBLAutomaticTests - -- (void)testSwitchRead -{ - XCTestExpectation *read1 = [self expectationWithDescription:@"wait for switch read1"]; - XCTestExpectation *read2 = [self expectationWithDescription:@"wait for switch read2"]; - - [[self.device.mechanicalSwitch.switchValue readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqual(result.value.boolValue, NO); - [read1 fulfill]; - }]; - - [[self.device.mechanicalSwitch.switchValue readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqual(result.value.boolValue, YES); - [read2 fulfill]; - }]; - - [self waitForExpectationsWithTimeout:10 handler:nil]; -} - -- (void)testSerialI2C -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for serial reads"]; - - MBLI2CData *reg = [self.device.serial dataAtDeviceAddress:0x1C registerAddress:0x12 length:1]; - [[[[reg writeByteAsync:0x54] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [reg readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLDataSample *result = task.result; - uint8_t val = 0x54; - XCTAssertTrue([result.data isEqualToData:[NSData dataWithBytes:&val length:1]]); - return nil; - }] continueOnDispatchWithBlock:^id (BFTask *task) { - XCTAssertNil(task.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - - -- (void)testBarometerAltitude -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for barometer reads"]; - - [[[[self.device.barometer.altitude readAsync] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqualWithAccuracy(result.value.floatValue, 1000.0, 0.1); - return [self.device.barometer.altitude readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqualWithAccuracy(result.value.floatValue, -1000.0, 0.1); - return nil; - }] continueOnDispatchWithBlock:^id (BFTask *task) { - XCTAssertNil(task.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testBarometerPressure -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for barometer reads"]; - - [[[[self.device.barometer.pressure readAsync] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqualWithAccuracy(result.value.floatValue, 1000.0, 0.1); - return [self.device.barometer.pressure readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqualWithAccuracy(result.value.floatValue, 16776216.0, 0.1); - return nil; - }] continueOnDispatchWithBlock:^id (BFTask *task) { - XCTAssertNil(task.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testNotifications -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for notifications"]; - - int __block count = 0; - MBLEvent *event = self.device.mechanicalSwitch.switchUpdateEvent; - [[event startNotificationsWithHandlerAsync:^(MBLNumericData *obj, NSError *error) { - XCTAssertEqual(obj.value.boolValue, count % 2); - XCTAssertLessThan(count, 4); - if (++count == 4) { - [[event stopNotificationsAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask *task) { - XCTAssertNil(task.error); - // Wait a sec to make sure notifications stop - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - return nil; - }]; - } - }] continueOnDispatchWithBlock:^id _Nullable(BFTask *task) { - XCTAssertNil(task.error); - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testNotificationsExecutor -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for notifications"]; - - int __block count = 0; - BFExecutor *executor = [BFExecutor executorWithDispatchQueue:[MBLMockMetaWearUnitTest randomQueue1]]; - MBLEvent *event = self.device.mechanicalSwitch.switchUpdateEvent; - [[event startNotificationsWithExecutorAsync:executor withHandler:^(MBLNumericData *obj, NSError *error) { - XCTAssertTrue([MBLMockMetaWearUnitTest isRandomQueue1]); - XCTAssertEqual(obj.value.boolValue, count % 2); - XCTAssertLessThan(count, 4); - if (++count == 4) { - [[event stopNotificationsAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask *task) { - XCTAssertNil(task.error); - // Wait a sec to make sure notifications stop - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - return nil; - }]; - } - }] continueOnDispatchWithBlock:^id _Nullable(BFTask *task) { - XCTAssertNil(task.error); - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testChangeDispatchQueueNotifications -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for notifications"]; - - NSOperationQueue *queue1 = [[NSOperationQueue alloc] init]; - queue1.underlyingQueue = [MBLMockMetaWearUnitTest randomQueue1]; - - NSOperationQueue *queue2 = [[NSOperationQueue alloc] init]; - queue2.underlyingQueue = [MBLMockMetaWearUnitTest randomQueue2]; - - // Start in queue 1 - [MBLMetaWearManager sharedManager].dispatchQueue = queue1; - int __block count = 0; - MBLEvent *event = self.device.mechanicalSwitch.switchUpdateEvent; - [event startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - XCTAssertEqual(obj.value.boolValue, count % 2); - count++; - if (count <= 4) { - XCTAssertTrue([MBLMockMetaWearUnitTest isRandomQueue1]); - } else { - XCTAssertTrue([MBLMockMetaWearUnitTest isRandomQueue2]); - } - if (count == 4) { - [MBLMetaWearManager sharedManager].dispatchQueue = queue2; - } - if (count == 8) { - [[event stopNotificationsAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask *task) { - XCTAssertNil(task.error); - // Wait a sec to make sure notifications stop - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - return nil; - }]; - } - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testHaptic -{ - XCTestExpectation *hapticCompletion = [self expectationWithDescription:@"hapticCompletion"]; - XCTestExpectation *hapticFired = [self expectationWithDescription:@"hapticFired"]; - XCTestExpectation *buzzerCompletion = [self expectationWithDescription:@"buzzerCompletion"]; - XCTestExpectation *buzzerFired = [self expectationWithDescription:@"buzzerFired"]; - - const uint16_t pwidth = 230; - const uint16_t dcycle = 54; - - MBLHapticHandler x = ^(uint8_t dutyCycle, uint16_t pulseWidth) { - XCTAssertEqual(pulseWidth, pwidth); - XCTAssertEqual(dutyCycle, dcycle); - [hapticFired fulfill]; - }; - MBLBuzzerHandler y = ^(uint8_t dutyCycle, uint16_t pulseWidth) { - XCTAssertEqual(pulseWidth, pwidth); - [buzzerFired fulfill]; - }; - - self.peripheral.hapticHandler = x; - self.peripheral.buzzerHandler = y; - - [[self.device.hapticBuzzer startBuzzerWithPulseWidthAsync:pwidth completion:^{ - NSLog(@"Complete"); - [buzzerCompletion fulfill]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [self.device.hapticBuzzer startHapticWithDutyCycleAsync:dcycle pulseWidth:pwidth completion:^{ - NSLog(@"Complete"); - [hapticCompletion fulfill]; - }]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testGPIO -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - MBLGPIOPin *pin = self.device.gpio.pins[0]; - [[[[[[[[[[[[[[[[[[pin setToDigitalValueAsync:NO] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [pin setToDigitalValueAsync:YES]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [pin.digitalValue readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqual(result.value.boolValue, YES); - return [pin setToDigitalValueAsync:YES]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [pin setToDigitalValueAsync:NO]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [pin.digitalValue readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqual(result.value.boolValue, NO); - return [pin setConfiguration:MBLPinConfigurationPulldown]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [pin setConfiguration:MBLPinConfigurationPullup]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [pin.digitalValue readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqual(result.value.boolValue, YES); - return [pin.analogRatio readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqualWithAccuracy(result.value.floatValue, 0.976540, 0.25); - return [pin.analogAbsolute readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqualWithAccuracy(result.value.floatValue, 2.956000, 0.25); - return [pin setConfiguration:MBLPinConfigurationPullup]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [pin setConfiguration:MBLPinConfigurationPulldown]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - return [pin.digitalValue readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqual(result.value.boolValue, NO); - return [pin.analogRatio readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqualWithAccuracy(result.value.floatValue, 0.006843, 0.25); - return [pin.analogAbsolute readAsync]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *task) { - MBLNumericData *result = task.result; - XCTAssertEqualWithAccuracy(result.value.floatValue, 0.024000, 0.25); - return nil; - }] continueOnDispatchWithBlock:^id (BFTask *task) { - XCTAssertNil(task.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testLED -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - [[self.device.led flashLEDColorAsync:[MBLColor whiteColor] withIntensity:1.0 numberOfFlashes:1] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return nil; - }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testTemp -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for readings"]; - - [[[[BFTask taskFromMetaWearWithBlock:^id{ - return [[self.device.temperature.onDieThermistor readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.value.floatValue, 35.0, 20.0); - }]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - self.device.temperature.externalThermistor.readPin = 0; - self.device.temperature.externalThermistor.enablePin = 1; - return [[self.device.temperature.externalThermistor readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.value.floatValue, 23.8889, 8.3333); - }]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [[self.device.temperature.onboardThermistor readAsync] success:^(MBLNumericData * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.value.floatValue, 35.0, 20.0); - }]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertFalse(task.faulted); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -@end diff --git a/MetaWear/Tests/Unit/MBLConnectionTests.m b/MetaWear/Tests/Unit/MBLConnectionTests.m deleted file mode 100644 index a446732..0000000 --- a/MetaWear/Tests/Unit/MBLConnectionTests.m +++ /dev/null @@ -1,247 +0,0 @@ -/** - * MBLConnectionTests.m - * MetaWear - * - * Created by Stephen Schiffli on 9/27/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import "MetaWearSyntaxFriendly.h" - -@interface MBLConnectionTests : XCTestCase -@property (nonatomic) MBLMetaWear *device; -@property (nonatomic) MBLBluetoothPeripheralMock *peripheral; -@property (nonatomic) MBLBluetoothCentralMock *central; - -@end - -@implementation MBLConnectionTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - MBLSetUseMockManager(YES); - [MBLMetaWearManager sharedManager].logLevel = MBLLogLevelInfo; - - - [[MBLMetaWearManager sharedManager] startScanForMetaWearsAllowDuplicates:NO handler:^(NSArray *array) { - [[MBLMetaWearManager sharedManager] stopScan]; - self.device = [array firstObject]; - assert(self.device); - self.central = (MBLBluetoothCentralMock *)[MBLMetaWearManager sharedManager].centralManager; - [self.central resetKnobs]; - self.peripheral = [[self.central retrievePeripheralsWithIdentifiers:@[self.device.identifier]] firstObject]; - [self.peripheral resetKnobs]; - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for disconnect"]; - [[self.device disconnectAsync] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull t) { - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - - [super tearDown]; -} - -- (void)testConnectionTimeout -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - double tmp = self.central.connectWaitTime; - self.central.connectWaitTime = 99; - [[self.device connectWithTimeoutAsync:2] failure:^(NSError * _Nonnull error) { - XCTAssertEqual(error.code, kMBLErrorConnectionTimeout); - [waitingExpectation fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - - self.central.connectWaitTime = tmp; -} - -- (void)testMultiConnectionTimeout -{ - double tmp = self.central.connectWaitTime; - self.central.connectWaitTime = 1.0; - - XCTestExpectation *connect1 = [self expectationWithDescription:@"wait for device1"]; - XCTestExpectation *connect2 = [self expectationWithDescription:@"wait for device2"]; - [[self.device connectWithTimeoutAsync:0.5] failure:^(NSError *error) { - XCTAssertEqual(error.code, kMBLErrorConnectionTimeout); - [connect1 fulfill]; - }]; - [[self.device connectWithTimeoutAsync:2.0] success:^(id result) { - [connect2 fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - - self.central.connectWaitTime = tmp; -} - -- (void)testMultiConnection -{ - double tmp = self.central.connectWaitTime; - self.central.connectWaitTime = 0.5; - - XCTestExpectation *connect1 = [self expectationWithDescription:@"wait for device1"]; - XCTestExpectation *connect2 = [self expectationWithDescription:@"wait for device2"]; - XCTestExpectation *connect3 = [self expectationWithDescription:@"wait for device3"]; - [[self.device connectAsync] success:^(id result) { - [connect1 fulfill]; - }]; - [[self.device connectAsync] success:^(id result) { - [connect2 fulfill]; - }]; - [[self.device connectAsync] success:^(id result) { - [connect3 fulfill]; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; - - self.central.connectWaitTime = tmp; -} - -- (void)testConnectDiscovering -{ - double tmp = self.peripheral.discoverServicesWaitTime; - self.peripheral.discoverServicesWaitTime = 0.5; - - XCTestExpectation *connect1 = [self expectationWithDescription:@"wait for device1"]; - XCTestExpectation *connect2 = [self expectationWithDescription:@"wait for device2"]; - XCTestExpectation *connect3 = [self expectationWithDescription:@"wait for device3"]; - [[self.device connectAsync] success:^(id result) { - [connect1 fulfill]; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] success:^(id result) { - [connect2 fulfill]; - }]; - }); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device connectAsync] success:^(id result) { - [connect3 fulfill]; - }]; - }); - - [self waitForExpectationsWithTimeout:5 handler:nil]; - - self.peripheral.discoverServicesWaitTime = tmp; -} - -- (void)testDisconnectConnecting -{ - double tmp = self.central.connectWaitTime; - self.central.connectWaitTime = 5.0; - - XCTestExpectation *connect1 = [self expectationWithDescription:@"wait for device1"]; - XCTestExpectation *connect2 = [self expectationWithDescription:@"wait for device2"]; - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertTrue(t.cancelled); - [connect1 fulfill]; - return t; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device disconnectAsync] success:^(id result) { - [connect2 fulfill]; - }]; - }); - - [self waitForExpectationsWithTimeout:5 handler:nil]; - - self.central.connectWaitTime = tmp; -} - -- (void)testDisconnectDiscovering -{ - double tmp = self.peripheral.discoverServicesWaitTime; - self.peripheral.discoverServicesWaitTime = 5.0; - - XCTestExpectation *connect1 = [self expectationWithDescription:@"wait for device1"]; - XCTestExpectation *connect2 = [self expectationWithDescription:@"wait for device2"]; - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertTrue(t.cancelled); - [connect1 fulfill]; - return t; - }]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [[self.device disconnectAsync] success:^(id result) { - [connect2 fulfill]; - }]; - }); - - [self waitForExpectationsWithTimeout:5 handler:nil]; - - self.peripheral.discoverServicesWaitTime = tmp; -} - -- (void)testProgrammedByOtherAppConnection -{ - uint32_t tmp = self.peripheral.keyRegister; - self.peripheral.keyRegister = 0xDEADBEEF; - - XCTestExpectation *connect1 = [self expectationWithDescription:@"wait for device"]; - [[self.device connectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.device.programedByOtherApp); - [connect1 fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; - - self.peripheral.keyRegister = tmp; -} - -- (void)testConnectionWithRetry -{ - self.peripheral.failServiceDiscoveryOnce = YES; - - XCTestExpectation *connect1 = [self expectationWithDescription:@"wait for device1"]; - [[[self.device connectAsync] success:^(MBLMetaWear * _Nonnull result) { - [connect1 fulfill]; - }] failure:^(NSError * _Nonnull error) { - XCTAssertNil(error); - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -@end diff --git a/MetaWear/Tests/Unit/MBLConverstionTests.m b/MetaWear/Tests/Unit/MBLConverstionTests.m deleted file mode 100644 index c9f97a8..0000000 --- a/MetaWear/Tests/Unit/MBLConverstionTests.m +++ /dev/null @@ -1,124 +0,0 @@ -/** - * MBLConverstionTests.m - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import "MetaWearSyntaxFriendly.h" - -@interface MBLConverstionTests : XCTestCase - -@end - -@implementation MBLConverstionTests - -typedef struct __attribute__((packed)) { - uint8_t random; - uint8_t int32[4]; - uint8_t int16[2]; - uint8_t uint32[4]; - uint8_t uint16[2]; -} conversion_test_struct; - -- (void)testInt32Conversion -{ - conversion_test_struct params = {0}; - // Test a successful positive - XCTAssertTrue([MBLConversion number:@10 toInt32:(int32_t *)params.int32]); - XCTAssertEqual(*(int32_t *)params.int32, 10); - - // Test a successful negative - XCTAssertTrue([MBLConversion number:@(-10) toInt32:(int32_t *)params.int32]); - XCTAssertEqual(*(int32_t *)params.int32, -10); - - // Test failure - XCTAssertFalse([MBLConversion number:@(INT64_MAX) toInt32:(int32_t *)params.int32]); -} - -- (void)testUint16Conversion -{ - conversion_test_struct params = {0}; - // Test a successful - XCTAssertTrue([MBLConversion number:@10 toUint16:(uint16_t *)params.uint16]); - XCTAssertEqual(*(uint16_t *)params.uint16, 10); - - // Test failure - XCTAssertFalse([MBLConversion number:@(-10) toUint16:(uint16_t *)params.uint16]); -} - -- (void)testNumericFormaterError -{ - XCTAssertThrows([[MBLNumericFormatter alloc] initDoubleWithLength:9 isSigned:NO scale:2.0 offset:1]); - XCTAssertThrows([[MBLNumericFormatter alloc] initIntWithLength:9 isSigned:NO offset:0]); -} - -- (void)testNumericFormaterSigned -{ - MBLNumericFormatter *format = [[MBLNumericFormatter alloc] initIntWithLength:3 isSigned:YES]; - MBLNumericData *data = [format entryFromData:[MBLMockUtils dataFromString:@"FF-FF-FF"] date:[NSDate date]]; - XCTAssertEqual(-1, data.value.intValue); -} - -- (void)testBoschOrientationFormat -{ - MBLAccelerometerBoschOrientationFormat *format = [[MBLAccelerometerBoschOrientationFormat alloc] init]; - XCTAssertEqual([format numberFromDouble:MBLAccelerometerOrientationPortraitUpsideDown].intValue, 0x7); - XCTAssertEqual([format numberFromDouble:MBLAccelerometerOrientationPortrait].intValue, 0x5); - XCTAssertEqual([format numberFromDouble:MBLAccelerometerOrientationLandscapeLeft].intValue, 0x3); - XCTAssertEqual([format numberFromDouble:MBLAccelerometerOrientationLandscapeRight].intValue, 0x1); -} - -- (void)testCSVRepresentation -{ - uint8_t a = 0x5A; - NSData *b = [NSData dataWithBytes:&a length:1]; - NSString *c = [[[MBLDataSample alloc] initWithTimestamp:[NSDate dateWithTimeIntervalSince1970:1234.5678] data:b] csvRepresentation]; - NSLog(@"%@", c); - XCTAssertTrue([c isEqualToString:@"1234.567800,5A\n"]); - - - uint32_t e = 0x12345678; - NSData *f = [NSData dataWithBytes:&e length:3]; - NSString *g = [[[MBLDataSample alloc] initWithTimestamp:[NSDate dateWithTimeIntervalSince1970:1234.5678] data:f] csvRepresentation]; - NSLog(@"%@", g); - XCTAssertTrue([g isEqualToString:@"1234.567800,78-56-34\n"]); -} - -- (void)testCSVNumericRepresentation -{ - NSString *a = [[[MBLNumericData alloc] initWithNumber:@123.4 timestamp:[NSDate dateWithTimeIntervalSince1970:1234.5678] data:[NSData data]] csvRepresentation]; - NSLog(@"%@", a); - XCTAssertTrue([a isEqualToString:@"1234.567800,123.4\n"]); -} - -@end diff --git a/MetaWear/Tests/Unit/MBLEnabling.m b/MetaWear/Tests/Unit/MBLEnabling.m deleted file mode 100644 index 61fc6b2..0000000 --- a/MetaWear/Tests/Unit/MBLEnabling.m +++ /dev/null @@ -1,400 +0,0 @@ -/** - * MBLEnabling.m - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMockMetaWearUnitTest.h" - - -@interface MBLEnabling : MBLMockMetaWearUnitTest - -@end - -@implementation MBLEnabling - -/// -/// TODO: These all need to be enabled and automated -/// -- (void)testProximity -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - [[self.device.proximity.proximity readAsync] success:^(MBLNumericData * _Nonnull result) { - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:2000000000 handler:nil]; -} - - -- (void)testHumidity -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - //[[self.device.hygrometer.humidity readAsync] success:^(MBLNumericData * _Nonnull result) { - // [waitingExpectation fulfill]; - //}]; - - MBLHygrometerBME280 *hygrometer = (MBLHygrometerBME280 *)self.device.hygrometer; - [hygrometer.periodicHumidity startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:2000000000 handler:nil]; -} - - -- (void)testColor -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - //[[self.device.hygrometer.humidity readAsync] success:^(MBLNumericData * _Nonnull result) { - // [waitingExpectation fulfill]; - //}]; - - MBLPhotometerTCS3472 *photometer = (MBLPhotometerTCS3472 *)self.device.photometer; - photometer.integrationTime = 1.0; - photometer.integrationTime = 10000.0; - [[photometer.color readAsync] success:^(MBLRGBData * _Nonnull result) { - [waitingExpectation fulfill]; - }]; - [[photometer.redColor readAsync] success:^(MBLNumericData * _Nonnull result) { - - }]; - - [self waitForExpectationsWithTimeout:2000000000 handler:nil]; -} - - -- (void)testProgramCommands -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - - // Event causes read to be logged - //[aReg logReads]; - - MBLI2CData *whoami = [self.device.serial dataAtDeviceAddress:0x1C registerAddress:0x0D length:1]; - MBLEvent *event = [self.device.mechanicalSwitch.switchUpdateEvent readDataOnEvent:whoami]; - [event startNotificationsWithHandlerAsync:^(id obj, NSError *error) { - NSLog(@"%@", obj); - }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(4.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [event stopNotificationsAsync]; - }); - //[self.device.mechanicalSwitch.switchUpdateEvent programCommandsToRunOnEventAsync:^{ - //[self.device.hapticBuzzer startHapticWithDutyCycle:248 pulseWidth:500 completion:nil]; // Write - //[aReg readAsync]; // Read - //[self.device.accelerometer.dataReadyEvent startLoggingAsync]; // Start log - //}]; - //int __block count = 0; - //MBLEvent *event = [self.device.timer eventWithPeriod:1000]; - // [event startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - // NSLog(@"%@", obj); - // if (++count == 4) { - // [[event stopNotificationsAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - // [waitingExpectation fulfill]; - // return nil; - // }]; - // } - // }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.mock spoofData:@[@"0C-06-00"]]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.mock spoofData:@[@"0C-06-00"]]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.mock spoofData:@[@"0C-06-00"]]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self.mock spoofData:@[@"0C-06-00"]]; - }); - }); - }); - }); - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2000000000 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [waitingExpectation fulfill]; - }); - - [self waitForExpectationsWithTimeout:2000000000 handler:nil]; -} - - - - -- (void)testTimer -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - int __block count = 0; - MBLEvent *event = [self.device.timer eventWithPeriod:1000]; - BFTask *task = [event startNotificationsWithHandlerAsync:^(MBLDataSample * _Nullable obj, NSError * _Nullable error) { - NSLog(@"%@", obj); - if (++count == 4) { - [[event stopNotificationsAsync] success:^(id _Nonnull result) { - [waitingExpectation fulfill]; - }]; - } - }]; - - [task continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertFalse(task.faulted); - [self.mock spoofData:@[@"0C-06-00", - @"0C-06-00", - @"0C-06-00", - @"0C-06-00"]]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testANCS -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - int __block count = 0; - MBLEvent *event = [self.device.ancs eventWithCategoryIds:MBLANCSCategoryIDAny]; - BFTask *task = [event startNotificationsWithHandlerAsync:^(MBLANCSEventData * _Nullable obj, NSError * _Nullable error) { - NSLog(@"%@", obj); - if (++count == 4) { - [[event stopNotificationsAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull task) { - [waitingExpectation fulfill]; - return nil; - }]; - } - }]; - - [task continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertFalse(task.faulted); - [self.mock spoofData:@[@"0E-05-00-00-00-00-00", - @"0E-05-00-01-00-00-00", - @"0E-05-00-02-00-00-00", - @"0E-05-00-04-00-00-00"]]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testFilters -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - int __block count = 0; - MBLEvent *event = [self.device.mechanicalSwitch.switchUpdateEvent compareEventUsingOperation:MBLComparisonOperationEqual data:@[@0] output:MBLComparisonOutputValue]; - BFTask *task = [event startNotificationsWithHandlerAsync:^(MBLNumericData * _Nullable obj, NSError * _Nullable error) { - NSLog(@"%@", obj); - if (++count == 4) { - [[event stopNotificationsAsync] success:^(id _Nonnull result) { - [waitingExpectation fulfill]; - }]; - } - }]; - - [task continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertFalse(task.faulted); - [self.mock spoofData:@[@"09-03-00-00", - @"09-03-00-00", - @"09-03-00-00", - @"09-03-00-00"]]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testNeoPixelException -{ - const int length = 30; - const MBLColorOrdering color = MBLColorOrderingRGB; - const MBLStrandSpeed speed = MBLStrandSpeedSlow; - MBLNeopixelStrand *strand = [self.device.neopixel strandWithColor:color speed:speed pin:0 length:length]; - - XCTAssertNoThrow([strand deinitializeAsync]); - XCTAssertThrows([strand setPixelAsync:0 color:[MBLColor whiteColor]]); - XCTAssertThrows([strand setRainbowWithHoldAsync:YES]); - XCTAssertThrows([strand clearFromStartPixelAsync:0 endPixel:1]); - XCTAssertThrows([strand clearAllPixelsAsync]); - XCTAssertThrows([strand holdStrandWithEnableAsync:YES]); - XCTAssertThrows([strand rotateStrandWithDirectionAsync:MBLRotationDirectionAwayFromBoard repetitions:1 period:100]); - - [strand initializeAsync]; - - XCTAssertThrows([strand setPixelAsync:100 color:[MBLColor whiteColor]]); - XCTAssertThrows([strand clearFromStartPixelAsync:100 endPixel:0]); - XCTAssertThrows([strand clearFromStartPixelAsync:20 endPixel:50]); - - [strand deinitializeAsync]; -} - -- (void)testNeoPixel -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - const int length = 30; - const MBLColorOrdering color = MBLColorOrderingRGB; - const MBLStrandSpeed speed = MBLStrandSpeedSlow; - - MBLNeopixelStrand *strand = [self.device.neopixel strandWithColor:color speed:speed pin:0 length:length]; - [[[[strand initializeAsync] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [strand setPixelAsync:0 color:[MBLColor whiteColor]]; - }] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [strand deinitializeAsync]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertFalse(task.faulted); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; - - /* - [strand holdStrandWithEnable:YES]; - - for (int i = 0; i < 3; i++) { - [strand setPixel:0 + (i * 10) color:[MBLColor redColor]]; - [strand setPixel:1 + (i * 10) color:[MBLColor greenColor]]; - [strand setPixel:2 + (i * 10) color:[MBLColor blueColor]]; - [strand setPixel:3 + (i * 10) color:[MBLColor cyanColor]]; - [strand setPixel:4 + (i * 10) color:[MBLColor yellowColor]]; - [strand setPixel:5 + (i * 10) color:[MBLColor magentaColor]]; - [strand setPixel:6 + (i * 10) color:[MBLColor orangeColor]]; - [strand setPixel:7 + (i * 10) color:[MBLColor purpleColor]]; - [strand setPixel:8 + (i * 10) color:[MBLColor brownColor]]; - [strand setPixel:9 + (i * 10) color:[MBLColor whiteColor]]; - } - [strand holdStrandWithEnable:NO]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(7.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [strand rotateStrandWithDirection:MBLRotationDirectionTowardsBoard repetitions:0xFF period:250]; - }); - - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"pause for manual verification"]; - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(30.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [strand clearAllPixels]; - [strand deinitialize]; - [waitingExpectation fulfill]; - }); - [self waitForExpectationsWithTimeout:35 handler:nil]; - */ - [strand deinitializeAsync]; -} - - -- (void)testGpioReadEnable -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for readings"]; - - // TODO: Can we check this works better - MBLGPIOPin *pin = self.device.gpio.pins[0]; - - MBLData *x = [pin analogRatioWithPullUp:@1 pullDown:nil readDelay:200]; - [[x readAsync] success:^(MBLNumericData * _Nonnull result) { - NSLog(@"%@", result); - XCTAssertEqualWithAccuracy(result.value.floatValue, 0.006843, 0.25); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testiBeaconException -{ - MBLiBeacon *iBeacon = self.device.iBeacon; - XCTAssertThrows(iBeacon.calibratedReceiverPower = -129); - XCTAssertThrows(iBeacon.calibratedReceiverPower = -9); - XCTAssertThrows(iBeacon.calibratedReceiverPower = 0); - XCTAssertThrows(iBeacon.calibratedReceiverPower = 100); - XCTAssertThrows(iBeacon.frequency = 19); - XCTAssertThrows(iBeacon.frequency = 10241); -} - -- (void)testiBeacon -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for readings"]; - - MBLiBeacon *iBeacon = self.device.iBeacon; - iBeacon.uuid = [CBUUID UUIDWithString:@"326A9001-85CB-9195-D9DD-464CFBBAE75A"]; - iBeacon.major = 0x100; - iBeacon.minor = 0x200; - iBeacon.calibratedReceiverPower = -128; - iBeacon.calibratedReceiverPower = -10; - iBeacon.transmitPower = MBLiBeaconTransmitPowerMinus12dBm; - iBeacon.frequency = 20; - iBeacon.frequency = 10240; - [[[iBeacon setBeaconOnAsync:YES] continueOnMetaWearWithSuccessBlock:^id _Nullable(BFTask * _Nonnull task) { - return [iBeacon setBeaconOnAsync:NO]; - }] continueOnMetaWearWithBlock:^id _Nullable(BFTask * _Nonnull task) { - XCTAssertFalse(task.faulted); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -/* - - (void)testFullLogDownload - { - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for reads"]; - - [self.device.mechanicalSwitch.switchUpdateEvent startLoggingAsync]; - [self spoofData:@[@"0B-02-00"]]; - - const int size = 5;//524288; - [self.device.mechanicalSwitch.switchUpdateEvent downloadLogAndStopLogging:YES handler:^(NSArray *array, NSError *error) { - XCTAssertEqual(array.count, size * 2); - [waitingExpectation fulfill]; - } progressHandler:^(float number, NSError *error) { - }]; - - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self spoofData:@[@"0B-84-CA-0A-00-00-00"]]; - }); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.02 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self spoofData:@[@"0B-85-28-04-00-00"]]; - }); - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.03 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - self.spoof.value = [self dataFromString:@"0B-07-00-AC-07-00-00-00-01-00-00-00-BA-07-00-00-00-01-00-00"]; - for (int i = 0; i < size; i++) { - [self.device peripheral:nil didUpdateValueForCharacteristic:self.spoof error:nil]; - } - dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ - [self spoofData:@[@"0B-08-00-00-00-00"]]; - }); - }); - - [self waitForExpectationsWithTimeout:5000 handler:nil]; - } - */ - -@end diff --git a/MetaWear/Tests/Unit/MBLLogDatabase.m b/MetaWear/Tests/Unit/MBLLogDatabase.m deleted file mode 100644 index fea09d5..0000000 --- a/MetaWear/Tests/Unit/MBLLogDatabase.m +++ /dev/null @@ -1,175 +0,0 @@ -/** - * MBLLogDatabase.m - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMockMetaWearUnitTest.h" - -@interface MBLLogDatabase : MBLMockMetaWearUnitTest - -@end - -@implementation MBLLogDatabase - -/// -/// TODO: These all need to be enabled and automated -/// -- (void)testCreateDB -{ - NSString *filename = [[MBLMetaWearManager sharedManager] logFilename:[self.device.identifier.UUIDString stringByAppendingString:@"RawEntries.sqlite3"]]; - NSURL *storeURL = [NSURL fileURLWithPath:filename isDirectory:NO]; - [[NSFileManager defaultManager] removeItemAtURL:storeURL error:nil]; - - NSManagedObjectContext *managedObjectContext = nil;//TODO[self.device.logging managedObjectContext]; - for (uint64_t i = 0; i < 1000000; i++) { - @autoreleasepool { - MBLRawLogEntry *entry = (MBLRawLogEntry *)[NSEntityDescription insertNewObjectForEntityForName:@"MBLRawLogEntry" inManagedObjectContext:managedObjectContext]; - entry.timestamp = [NSDate dateWithTimeIntervalSince1970:i]; - entry.resetId = 0; - entry.triggerId = 0; - uint32_t x = arc4random(); - entry.data = [NSData dataWithBytes:&x length:4]; - } - } - - NSError *error; - [managedObjectContext save:&error]; - if (error) { - NSLog(@"Unable to execute save."); - NSLog(@"%@, %@", error, error.localizedDescription); - - } else { - NSLog(@"Save good"); - } -} -/* -- (void)testFindNumToDrop -{ - NSManagedObjectContext *managedObjectContext = [self.device.logging managedObjectContext]; - - [self measureBlock:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRawLogEntry"]; - fetchRequest.predicate = [NSPredicate predicateWithFormat:@"timestamp == %@", [NSDate dateWithTimeIntervalSince1970:999900]]; - fetchRequest.includesPropertyValues = NO; - - NSError *error; - NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; - if (error) { - NSLog(@"Unable to execute fetch request."); - NSLog(@"%@, %@", error, error.localizedDescription); - } else { - NSManagedObject *obj = [results firstObject]; - NSDate *x = [obj valueForKey:@"timestamp"]; - - NSFetchRequest *fetch2 = [NSFetchRequest fetchRequestWithEntityName:@"MBLRawLogEntry"]; - fetch2.predicate = [NSPredicate predicateWithFormat:@"timestamp >= %@", x]; - NSUInteger count = [managedObjectContext countForFetchRequest:fetch2 error:&error]; - NSLog(@"%ld", count); - } - }]; -} - -- (void)testFindNewestUidDate -{ - [self measureBlock:^{ - [self.device.logging guessUidStartingDate:1]; - }]; -} - -- (void)testQueryForTriggerId -{ - NSManagedObjectContext *managedObjectContext = [self.device.logging managedObjectContext]; - - [self measureBlock:^{ - [managedObjectContext performBlockAndWait:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRawLogEntry"]; - fetchRequest.predicate = [NSPredicate predicateWithFormat:@"triggerId == %d", 0]; - - NSError *error; - NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; - if (error) { - NSLog(@"Unable to execute fetch request."); - NSLog(@"%@, %@", error, error.localizedDescription); - } else { - NSLog(@"%ld", results.count); - } - }]; - }]; -} - -- (void)testQueryForEntry -{ - NSManagedObjectContext *managedObjectContext = [self.device.logging managedObjectContext]; - - [self measureBlock:^{ - [managedObjectContext performBlockAndWait:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRawLogEntry"]; - fetchRequest.predicate = [NSPredicate predicateWithFormat:@"timestamp == %@", [NSDate dateWithTimeIntervalSince1970:456]]; - fetchRequest.includesPropertyValues = NO; - - NSError *error; - NSUInteger count = [managedObjectContext countForFetchRequest:fetchRequest error:&error]; - if (error) { - NSLog(@"Unable to execute fetch request."); - NSLog(@"%@, %@", error, error.localizedDescription); - } else { - NSLog(@"%ld", count); - } - }]; - }]; -} - -- (void)testDeleteFetch -{ - NSManagedObjectContext *managedObjectContext = [self.device.logging managedObjectContext]; - - [self measureBlock:^{ - NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MBLRawLogEntry"]; - fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES]]; - fetchRequest.fetchLimit = 1; - fetchRequest.includesPropertyValues = NO; - - NSError *error; - NSArray *results = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; - if (error) { - NSLog(@"Unable to execute fetch request."); - NSLog(@"%@, %@", error, error.localizedDescription); - } else { - MBLRawLogEntry *obj = [results firstObject]; - NSLog(@"%@, %@", obj.timestamp, obj.data); - } - }]; -} - -*/ -@end diff --git a/MetaWear/Tests/Unit/MBLMetaBootTests.m b/MetaWear/Tests/Unit/MBLMetaBootTests.m deleted file mode 100644 index f0c3666..0000000 --- a/MetaWear/Tests/Unit/MBLMetaBootTests.m +++ /dev/null @@ -1,105 +0,0 @@ -/** - * MBLMetaBootTests.m - * MetaWearUnitTests - * - * Created by Stephen Schiffli on 9/28/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMockMetaWearUnitTest.h" - -@interface MBLMetaBootTests : MBLMockMetaWearUnitTest -@end - -@implementation MBLMetaBootTests - -- (void)testFirmwareUpdateManager -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for completion"]; - MBLDeviceInfo *info = [[MBLDeviceInfo alloc] init]; - info.modelNumber = @"0"; - info.hardwareRevision = @"0.1"; - [[[[MBLFirmwareUpdateManager getAllFirmwareForDeviceAsync:info] continueOnDispatchWithSuccessBlock:^id _Nullable(BFTask *> *t) { - XCTAssertTrue([t.result[0].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.0.4/firmware.bin"]); - XCTAssertTrue([t.result[1].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.1.0/firmware.bin"]); - XCTAssertTrue([t.result[2].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.1.1/firmware.bin"]); - XCTAssertTrue([t.result[3].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.1.2/firmware.bin"]); - XCTAssertTrue([t.result[4].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.1.3/firmware.bin"]); - XCTAssertTrue([t.result[5].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.2.3/firmware.bin"]); - XCTAssertTrue([t.result[6].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.2.4/firmware.bin"]); - XCTAssertTrue([t.result[7].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.2.5/firmware.bin"]); - XCTAssertTrue([t.result[8].firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.3.4/firmware.bin"]); - return [MBLFirmwareUpdateManager getLatestFirmwareForDeviceAsync:info]; - }] continueOnDispatchWithSuccessBlock:^id (BFTask *t) { - XCTAssertTrue([t.result.firmwareURL.absoluteString isEqualToString:@"https://mbientlab.com/releases/metawear/0.1/0/vanilla/1.3.6/firmware.bin"]); - return [t.result downloadFirmwareAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:20 handler:nil]; -} - -- (void)testFun -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for completion"]; - NSURL *url = [[NSBundle bundleForClass:[self class]] URLForResource:@"metawearmmc-r0.1-r1.3.5" - withExtension:@"zip"]; - MBLFirmwareBuild *frimware = [[MBLFirmwareBuild alloc] initWithHardwareRev:@"0.1" modelNumber:@"5" url:url]; - [[frimware downloadFirmwareAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask *t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:20 handler:nil]; -} - -#if TARGET_OS_SIMULATOR -- (void)testUpdateManager -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for completion"]; - - [[[self.device checkForFirmwareUpdateAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertEqualObjects(t.result, @"1.3.6"); - return [self.device prepareForFirmwareUpdateAsync]; - }] failure:^(NSError * _Nonnull error) { - // TODO: Maybe mock out the firmware update manager, for now we expect it to fail at that point - XCTAssertEqual(error.code, kMBLErrorBluetoothUnsupported); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:20 handler:nil]; -} -#endif - -@end diff --git a/MetaWear/Tests/Unit/MBLMetaWearTests.m b/MetaWear/Tests/Unit/MBLMetaWearTests.m deleted file mode 100644 index dcc1ce1..0000000 --- a/MetaWear/Tests/Unit/MBLMetaWearTests.m +++ /dev/null @@ -1,66 +0,0 @@ -/** - * MBLMetaWearTests.m - * MetaWearUnitTests - * - * Created by Stephen Schiffli on 9/27/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMockMetaWearUnitTest.h" - -@interface MBLMetaWearTests : MBLMockMetaWearUnitTest -@end - -@implementation MBLMetaWearTests - -- (void)testRSSI -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for read"]; - - [[self.device readRSSIAsync] success:^(NSNumber * _Nonnull result) { - XCTAssertEqualWithAccuracy(result.doubleValue, -45.0, 0.1); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testBattery -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for read"]; - - [[self.device readBatteryLifeAsync] success:^(NSNumber * _Nonnull result) { - XCTAssertEqual(result.intValue, 99); - [waitingExpectation fulfill]; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} -@end diff --git a/MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.h b/MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.h deleted file mode 100644 index ff00f11..0000000 --- a/MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.h +++ /dev/null @@ -1,51 +0,0 @@ -/** - * MBLMockMetaWearUnitTest.h - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import "MetaWearSyntaxFriendly.h" - -@interface MBLMockMetaWearUnitTest : XCTestCase - -@property (nonatomic) MBLMetaWear *device; -@property (nonatomic) MBLBluetoothPeripheralMock *peripheral; -@property (nonatomic) MBLBluetoothCentralMock *central; - -+ (dispatch_queue_t)randomQueue1; -+ (BOOL)isRandomQueue1; -+ (dispatch_queue_t)randomQueue2; -+ (BOOL)isRandomQueue2; - -@end diff --git a/MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.m b/MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.m deleted file mode 100644 index 124b674..0000000 --- a/MetaWear/Tests/Unit/MBLMockMetaWearUnitTest.m +++ /dev/null @@ -1,122 +0,0 @@ -/** - * MBLMockMetaWearUnitTest.m - * MetaWear - * - * Created by Stephen Schiffli on 12/3/15. - * Copyright 2015 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import "MBLMockMetaWearUnitTest.h" -#import - -@implementation MBLMockMetaWearUnitTest - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device to connect"]; - - MBLSetUseMockManager(YES); - [MBLMetaWearManager sharedManager].logLevel = MBLLogLevelInfo; - // Nuke the devices - [[MBLMetaWearManager sharedManager] startScanForMetaWearsAllowDuplicates:NO handler:^(NSArray *array) { - MBLMetaWear *device = [array firstObject]; - assert(device); - [[MBLMetaWearManager sharedManager] stopScan]; - self.central = (MBLBluetoothCentralMock *)[MBLMetaWearManager sharedManager].centralManager; - [self.central resetKnobs]; - self.peripheral = [[self.central retrievePeripheralsWithIdentifiers:@[device.identifier]] firstObject]; - [self.peripheral resetKnobs]; - [[[device connectAsync] success:^(MBLMetaWear * _Nonnull result) { - self.device = result; - [waitingExpectation fulfill]; - }] failure:^(NSError * _Nonnull error) { - self.continueAfterFailure = NO; - XCTAssertNil(error); - }]; - }]; - - [self waitForExpectationsWithTimeout:15 handler:nil]; -} - -- (void)tearDown -{ - if (self.device) { - // Put teardown code here. This method is called after the invocation of each test method in the class. - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for disconnect"]; - [[self.device disconnectAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:15 handler:nil]; - } - [super tearDown]; -} - -static const uint8_t randomKey1; -static uint8_t randomContext1; -static const uint8_t randomKey2; -static uint8_t randomContext2; - -+ (dispatch_queue_t)randomQueue1 -{ - static dispatch_queue_t singleton; - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - singleton = dispatch_queue_create("com.mbientlab.metawear.randomQueue1", DISPATCH_QUEUE_SERIAL); - dispatch_queue_set_specific(singleton, &randomKey1, &randomContext1, nil); - }); - return singleton; -} - -+ (BOOL)isRandomQueue1 -{ - return (&randomContext1 == dispatch_get_specific(&randomKey1)); -} - -+ (dispatch_queue_t)randomQueue2 -{ - static dispatch_queue_t singleton; - static dispatch_once_t onceToken = 0; - dispatch_once(&onceToken, ^{ - singleton = dispatch_queue_create("com.mbientlab.metawear.randomQueue2", DISPATCH_QUEUE_SERIAL); - dispatch_queue_set_specific(singleton, &randomKey2, &randomContext2, nil); - }); - return singleton; -} - -+ (BOOL)isRandomQueue2 -{ - return (&randomContext2 == dispatch_get_specific(&randomKey2)); -} - -@end diff --git a/MetaWear/Tests/Unit/MBLRegisterTests.m b/MetaWear/Tests/Unit/MBLRegisterTests.m deleted file mode 100644 index 8a854c3..0000000 --- a/MetaWear/Tests/Unit/MBLRegisterTests.m +++ /dev/null @@ -1,461 +0,0 @@ -/** - * MBLRegisterTests.m - * MetaWear - * - * Created by Stephen Schiffli on 12/13/17. - * Copyright 2017 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import -#import -#import "MetaWearSyntaxFriendly.h" - -/// -/// Helpful utils - DRY -/// -@interface GlobalStuff : NSObject -+ (BFTask *)disconnectError; -@end -@implementation GlobalStuff -+ (BFTask *)disconnectError -{ - return [BFTask taskWithError: - [NSError errorWithDomain:kMBLErrorDomain - code:kMBLErrorUnexpectedDisconnect - userInfo:@{NSLocalizedDescriptionKey : @"Unexpected disconnect. Please connect again to perform operation."}]]; -} -@end - -/// -/// Create a module that can produce errors on demand -/// -@interface MBLErrorModule : MBLModule -@property (nonatomic) BOOL initError; -@property (nonatomic) BOOL deinitError; -@property (nonatomic) BOOL activateError; -@property (nonatomic) BOOL deactivateError; -@end -@implementation MBLErrorModule -- (instancetype)initWithDevice:(MBLMetaWear *)device -{ - self = [super initWithDevice:device moduleInfo:[[MBLModuleInfo alloc] init]]; - if (self) { - self.initError = NO; - self.deinitError = NO; - self.activateError = NO; - self.deactivateError = NO; - } - return self; -} -- (BFTask *)performAsyncInitialization -{ - return self.initError ? [GlobalStuff disconnectError] : [BFTask taskWithResult:nil]; -} -- (BFTask *)performAsyncDeinitialization -{ - return self.deinitError ? [GlobalStuff disconnectError] : [BFTask taskWithResult:nil]; -} -- (BFTask *)performAsyncActivation -{ - return self.activateError ? [GlobalStuff disconnectError] : [BFTask taskWithResult:nil]; -} -- (BFTask *)performAsyncDeactivation -{ - return self.deactivateError ? [GlobalStuff disconnectError] : [BFTask taskWithResult:nil]; -} -@end - -/// -/// Create a register that can produce errors on demand -/// -@interface MBLErrorEvent : MBLEvent -@property (nonatomic) BOOL initError; -@property (nonatomic) BOOL deinitError; -@property (nonatomic) BOOL activateError; -@property (nonatomic) BOOL deactivateError; -@end -@implementation MBLErrorEvent -- (instancetype)initWithModule:(MBLModule *)module -{ - self = [super initWithModule:module registerId:0x1 index:0x1 format:[[MBLFormat alloc] initEncodedDataWithLength:1]]; - return self; -} -- (BFTask *)performAsyncInitialization -{ - return self.initError ? [GlobalStuff disconnectError] : [BFTask taskWithResult:nil]; -} -- (BFTask *)performAsyncDeinitialization -{ - return self.deinitError ? [GlobalStuff disconnectError] : [BFTask taskWithResult:nil]; -} -- (BFTask *)performAsyncActivation -{ - return self.activateError ? [GlobalStuff disconnectError] : [BFTask taskWithResult:nil]; -} -- (BFTask *)performAsyncDeactivation -{ - return self.deactivateError ? [GlobalStuff disconnectError] : [BFTask taskWithResult:nil]; -} -@end - - - -@interface MBLRegisterTests : XCTestCase -@property (nonatomic) MBLMetaWear *device; -@property (nonatomic) MBLErrorModule *module; -@property (nonatomic) MBLErrorEvent *event; -@end - -@implementation MBLRegisterTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. - self.device = [[MBLMetaWear alloc] init]; - self.device.state = MBLConnectionStateConnected; - self.module = [[MBLErrorModule alloc] initWithDevice:self.device]; - self.event = [[MBLErrorEvent alloc] initWithModule:self.module]; -} - -- (void)testRegisterActivateErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.activateError = YES; - [[[[[self.event startNotificationsWithHandlerAsync:^(id _Nullable obj, NSError * _Nullable error) { - XCTFail(@"Should never call due to init error"); - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertFalse(self.event.isNotifying); - return [self.event stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - self.event.activateError = NO; - return [self.event startNotificationsWithHandlerAsync:^(id _Nullable obj, NSError * _Nullable error) { - XCTFail(@"Should never call"); - }]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return [self.event stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testRegisterInitializeErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.initError = YES; - [[[[[self.event startNotificationsWithHandlerAsync:^(id _Nullable obj, NSError * _Nullable error) { - XCTFail(@"Should never call due to init error"); - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertFalse(self.event.isNotifying); - return [self.event stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - self.event.initError = NO; - return [self.event startNotificationsWithHandlerAsync:^(id _Nullable obj, NSError * _Nullable error) { - XCTFail(@"Should never call"); - }]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return [self.event stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testRegisterDeactivateErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.deactivateError = YES; - [[[[self.event startNotificationsWithHandlerAsync:^(id _Nullable obj, NSError * _Nullable error) { - XCTFail(@"Should never call due to init error"); - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.event.isNotifying); - return [self.event stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - self.event.deactivateError = NO; - return [self.event stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testRegisterDeinitErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.deinitError = YES; - [[[[self.event startNotificationsWithHandlerAsync:^(id _Nullable obj, NSError * _Nullable error) { - XCTFail(@"Should never call due to init error"); - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.event.isNotifying); - return [self.event stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - self.event.deinitError = NO; - return [self.event stopNotificationsAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - - - -- (void)testCommandActivateErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.activateError = YES; - [[[[[self.event programCommandsToRunOnEventAsync:^{ - // Do nothing - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertFalse(self.event.hasCommands); - return [self.event eraseCommandsToRunOnEventAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - self.event.activateError = NO; - return [self.event programCommandsToRunOnEventAsync:^{ - // Do nothing - }]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return [self.event eraseCommandsToRunOnEventAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testCommandInitializeErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.initError = YES; - [[[[[self.event programCommandsToRunOnEventAsync:^{ - // Do nothing - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertFalse(self.event.hasCommands); - return [self.event eraseCommandsToRunOnEventAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - self.event.initError = NO; - return [self.event programCommandsToRunOnEventAsync:^{ - // Do nothing - }]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - return [self.event eraseCommandsToRunOnEventAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testCommandDeactivateErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.deactivateError = YES; - [[[[self.event programCommandsToRunOnEventAsync:^{ - // Do nothing - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.event.hasCommands); - return [self.event eraseCommandsToRunOnEventAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - self.event.deactivateError = NO; - return [self.event eraseCommandsToRunOnEventAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testCommandDeinitErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.deinitError = YES; - [[[[self.event programCommandsToRunOnEventAsync:^{ - // Do nothing - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.event.hasCommands); - return [self.event eraseCommandsToRunOnEventAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - self.event.deinitError = NO; - return [self.event eraseCommandsToRunOnEventAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - - - -- (void)testLoggingActivateErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.activateError = YES; - [[[[[self.event startLoggingAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertFalse(self.event.isLogging); - return [self.event downloadLogAndStopLoggingAsync:YES]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - self.event.activateError = NO; - return [self.event startLoggingAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.event.isLogging); - return [self.event downloadLogAndStopLoggingAsync:YES]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertFalse(self.event.isLogging); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testLoggingInitializeErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.initError = YES; - [[[[[self.event startLoggingAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertFalse(self.event.isLogging); - return [self.event downloadLogAndStopLoggingAsync:YES]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertFalse(self.event.isLogging); - self.event.initError = NO; - return [self.event startLoggingAsync]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.event.isLogging); - return [self.event downloadLogAndStopLoggingAsync:YES]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertFalse(self.event.isLogging); - [waitingExpectation fulfill]; - return nil; - }]; - - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testLoggingDeactivateErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.deactivateError = YES; - [[[[self.event startLoggingAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.event.isLogging); - return [self.event downloadLogAndStopLoggingAsync:YES]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertTrue(self.event.isLogging); - self.event.deactivateError = NO; - return [self.event downloadLogAndStopLoggingAsync:YES]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertFalse(self.event.isLogging); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -- (void)testLoggingDeinitErrors -{ - XCTestExpectation *waitingExpectation = [self expectationWithDescription:@"wait for device"]; - - self.event.deinitError = YES; - [[[[self.event startLoggingAsync] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNil(t.error); - XCTAssertTrue(self.event.isLogging); - return [self.event downloadLogAndStopLoggingAsync:YES]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertNotNil(t.error); - XCTAssertTrue(self.event.isLogging); - self.event.deinitError = NO; - return [self.event downloadLogAndStopLoggingAsync:YES]; - }] continueOnDispatchWithBlock:^id _Nullable(BFTask * _Nonnull t) { - XCTAssertFalse(self.event.isLogging); - XCTAssertNil(t.error); - [waitingExpectation fulfill]; - return nil; - }]; - [self waitForExpectationsWithTimeout:5 handler:nil]; -} - -@end diff --git a/MetaWear/Tests/Unit/MetaWearSyntaxFriendly.h b/MetaWear/Tests/Unit/MetaWearSyntaxFriendly.h deleted file mode 100644 index f13cf25..0000000 --- a/MetaWear/Tests/Unit/MetaWearSyntaxFriendly.h +++ /dev/null @@ -1,48 +0,0 @@ -/** - * MetaWearSyntaxFriendly.h - * MetaWearTests - * - * Created by Stephen Schiffli on 11/2/16. - * Copyright 2016 MbientLab Inc. All rights reserved. - * - * IMPORTANT: Your use of this Software is limited to those specific rights - * granted under the terms of a software license agreement between the user who - * downloaded the software, his/her employer (which must be your employer) and - * MbientLab Inc, (the "License"). You may not use this Software unless you - * agree to abide by the terms of the License which can be found at - * www.mbientlab.com/terms. The License limits your use, and you acknowledge, - * that the Software may be modified, copied, and distributed when used in - * conjunction with an MbientLab Inc, product. Other than for the foregoing - * purpose, you may not use, reproduce, copy, prepare derivative works of, - * modify, distribute, perform, display or sell this Software and/or its - * documentation for any purpose. - * - * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE - * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, - * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, - * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL - * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, - * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE - * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED - * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST - * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, - * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY - * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. - * - * Should you have any questions regarding your right to use this Software, - * contact MbientLab via email: hello@mbientlab.com - */ - -#import - -// The @import doesn't seem to play nice with syntax highlighting right now -// so we do this instead, aint pretty but it's certainly nicer than dozens of -// syntax highlighter errors -#if TARGET_OS_IOS - #import -#elif TARGET_OS_TV - #import -#else - #import -#endif - diff --git a/MetaWear/UI/ScannerModel.swift b/MetaWear/UI/ScannerModel.swift new file mode 100644 index 0000000..5bac16c --- /dev/null +++ b/MetaWear/UI/ScannerModel.swift @@ -0,0 +1,171 @@ +/** + * ScannerModel.swift + * MetaWear-Swift + * + * Created by Stephen Schiffli on 1/22/18. + * Copyright 2018 MbientLab Inc. All rights reserved. + * + * IMPORTANT: Your use of this Software is limited to those specific rights + * granted under the terms of a software license agreement between the user who + * downloaded the software, his/her employer (which must be your employer) and + * MbientLab Inc, (the "License"). You may not use this Software unless you + * agree to abide by the terms of the License which can be found at + * www.mbientlab.com/terms. The License limits your use, and you acknowledge, + * that the Software may be modified, copied, and distributed when used in + * conjunction with an MbientLab Inc, product. Other than for the foregoing + * purpose, you may not use, reproduce, copy, prepare derivative works of, + * modify, distribute, perform, display or sell this Software and/or its + * documentation for any purpose. + * + * YOU FURTHER ACKNOWLEDGE AND AGREE THAT THE SOFTWARE AND DOCUMENTATION ARE + * PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY, TITLE, + * NON-INFRINGEMENT AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL + * MBIENTLAB OR ITS LICENSORS BE LIABLE OR OBLIGATED UNDER CONTRACT, NEGLIGENCE, + * STRICT LIABILITY, CONTRIBUTION, BREACH OF WARRANTY, OR OTHER LEGAL EQUITABLE + * THEORY ANY DIRECT OR INDIRECT DAMAGES OR EXPENSES INCLUDING BUT NOT LIMITED + * TO ANY INCIDENTAL, SPECIAL, INDIRECT, PUNITIVE OR CONSEQUENTIAL DAMAGES, LOST + * PROFITS OR LOST DATA, COST OF PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY, + * SERVICES, OR ANY CLAIMS BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY + * DEFENSE THEREOF), OR OTHER SIMILAR COSTS. + * + * Should you have any questions regarding your right to use this Software, + * contact MbientLab via email: hello@mbientlab.com + */ + +import CoreBluetooth +import MetaWearCpp + +public protocol ScannerModelDelegate: class { + func scannerModel(_ scannerModel: ScannerModel, didAddItemAt idx: Int) + func scannerModel(_ scannerModel: ScannerModel, confirmBlinkingItem item: ScannerModelItem, callback: @escaping (Bool) -> Void) + func scannerModel(_ scannerModel: ScannerModel, errorDidOccur error: Error) +} + +public class ScannerModel { + public weak var delegate: ScannerModelDelegate? + public var items: [ScannerModelItem] = [] + + let scanner: MetaWearScanner + let adTimeout: Double + let isIncluded: (MetaWear) -> Bool + var connectingItem: ScannerModelItem? + + public init(delegate: ScannerModelDelegate, + scanner: MetaWearScanner = MetaWearScanner.shared, + adTimeout: Double = 5.0, + isIncluded: @escaping (MetaWear) -> Bool = { _ in return true }) { + self.delegate = delegate + self.scanner = scanner + self.adTimeout = adTimeout + self.isIncluded = isIncluded + } + + public var isScanning = false { + didSet { + guard oldValue != isScanning else { + return + } + guard isScanning else { + scanner.stopScan() + items.forEach { $0.watchdogStop() } + return + } + scanner.startScan(allowDuplicates: true) { [weak self] device in + guard let _self = self else { + return + } + guard _self.isIncluded(device) else { + return + } + DispatchQueue.main.async { + if let item = _self.items.first(where: { $0.device == device }) { + item.watchdogReset() + item.stateDidChange?() + } else { + _self.items.append(ScannerModelItem(device, _self)) + _self.delegate?.scannerModel(_self, didAddItemAt: _self.items.count - 1) + } + } + } + } + } + + func didToggle(_ item: ScannerModelItem) { + guard item.isConnecting else { + item.device.cancelConnection() + return + } + connectingItem = item + items.forEach { $0.stateDidChange?() } + + item.device.connectAndSetup().continueWith { t in + let resetState = { + self.connectingItem = nil + item.isConnecting = false + self.items.forEach { $0.stateDidChange?() } + } + guard !t.cancelled && !t.faulted else { + resetState() + if let error = t.error { + self.delegate?.scannerModel(self, errorDidOccur: error) + } + return + } + // The connection could have synd an unknown MAC address + item.stateDidChange?() + item.device.flashLED(color: .green, intensity: 1.0, _repeat: 60) + self.delegate?.scannerModel(self, confirmBlinkingItem: item) { (confirmed) in + resetState() + item.device.turnOffLed() + if !confirmed { + mbl_mw_debug_disconnect(item.device.board) + } + } + } + } +} + + +public class ScannerModelItem { + public let device: MetaWear + public internal(set) var isConnecting = false + weak var parent: ScannerModel? + var adWatchdog: Timer? + + public var connectButtonEnabled: Bool { + let someoneConnecting = parent?.connectingItem != nil + return !someoneConnecting || isConnecting + } + public var stateDidChange: (() -> Void)? { + didSet { + stateDidChange?() + } + } + + init(_ device: MetaWear, _ parent: ScannerModel?) { + self.device = device + self.parent = parent + watchdogReset() + } + + public func toggleConnect() { + isConnecting = !isConnecting + parent?.didToggle(self) + } + + func watchdogReset() { + DispatchQueue.main.async { + self.adWatchdog?.invalidate() + self.adWatchdog = Timer.scheduledTimer(withTimeInterval: (self.parent?.adTimeout ?? 5.0) + 0.1, repeats: false) { [weak self] t in + self?.stateDidChange?() + } + } + } + func watchdogStop() { + DispatchQueue.main.async { + self.adWatchdog?.invalidate() + self.adWatchdog = nil + } + } +} diff --git a/MetaWearPrivate.podspec b/MetaWearPrivate.podspec deleted file mode 100644 index 57b59e8..0000000 --- a/MetaWearPrivate.podspec +++ /dev/null @@ -1,33 +0,0 @@ -Pod::Spec.new do |s| - # Same as MetaWear.podspec, but with access to private header files for our testing and development pleasure - s.name = 'MetaWearPrivate' - s.module_name = 'MetaWear' - s.header_dir = 'MetaWear' - s.version = '2.10.0' - s.license = { :type => 'Commercial', :text => 'See https://www.mbientlab.com/terms/', :file => 'LICENSE' } - s.homepage = 'https://mbientlab.com' - s.summary = 'iOS/macOS/tvOS API and documentation for the MetaWear platform' - s.description = <<-DESC - This library allows for simple interfacing with the MetaWear Bluetooth (BLE) - sensor platform. Stream or log a variety of sensor data via simple API calls. - Contact us at hello@mbientlab.com if you need custom hardware or help with App development. - See www.mbientlab.com for details. - DESC - s.author = { 'Stephen Schiffli' => 'stephen@mbientlab.com' } - - s.source = { :git => 'https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS.git', :tag => s.version.to_s } - - s.platform = :ios, :osx, :tvos - s.ios.deployment_target = '8.0' - s.osx.deployment_target = '10.11' - s.tvos.deployment_target = '10.0' - - s.social_media_url = "https://twitter.com/mbientLab" - s.documentation_url = "https://www.mbientlab.com/docs/metawear/ios/#{s.version}/index.html" - - s.source_files = 'MetaWear/{Assets,Classes,Internal}/**/*.{h,m}' - - s.frameworks = 'CoreData', 'CoreBluetooth' - s.dependency 'Bolts/Tasks', '~> 1.8.4' - s.dependency 'FastCoding', '~> 3.2.2' -end diff --git a/README.md b/README.md index 2bbf472..4f7cffd 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,13 @@ -# MetaWear SDK for iOS/OS X/tvOS by MBIENTLAB +# MetaWear SDK for iOS/macOS/tvOS/watchOS by MBIENTLAB [![Platforms](https://img.shields.io/cocoapods/p/MetaWear.svg?style=flat)](http://cocoapods.org/pods/MetaWear) [![License](https://img.shields.io/cocoapods/l/MetaWear.svg?style=flat)](https://mbientlab.com/license) [![Version](https://img.shields.io/cocoapods/v/MetaWear.svg?style=flat)](http://cocoapods.org/pods/MetaWear) -[![Build Status](https://jenkins.schiffli.us/buildStatus/icon?job=MetaWear-SDK-iOS-macOS-tvOS)](https://jenkins.schiffli.us/job/MetaWear-SDK-iOS-macOS-tvOS) -[![Codecov](https://img.shields.io/codecov/c/github/mbientlab/MetaWear-SDK-iOS-macOS-tvOS.svg?maxAge=2592000)](https://codecov.io/github/mbientlab/MetaWear-SDK-iOS-macOS-tvOS?branch=master) - ![alt tag](https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS/blob/master/Images/Metawear.png) +SDK for creating MetaWear apps that run in the Apple ecosystem. This is a thin wrapper around the [MetaWear C++ API](https://github.com/mbientlab/MetaWear-SDK-Cpp) so you will find the C++ [documentation](https://mbientlab.com/cppdocs/latest/) and [API reference](https://mbientlab.com/docs/metawear/cpp/latest/globals.html) useful. + ### Overview [MetaWear](https://mbientlab.com) is a complete development and production platform for wearable and connected device applications. @@ -29,18 +28,27 @@ The iOS simulator doesn’t support Bluetooth 4.0, so test apps must be run on a See the [License](https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS/blob/master/LICENSE) ### Support -Reach out to the [community](http://community.mbientlab.com) if you encounter any problems, or just want to chat :) +Reach out to the [community](https://mbientlab.com/community/) if you encounter any problems, or just want to chat :) ## Getting Started ### Installation -MetaWear is available through [CocoaPods](http://cocoapods.org). To install +MetaWear is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile: ```ruby pod "MetaWear" ``` + +*NOTE* +Also if you are using Xcode 9 and Swift 4.x you will proablly want to manually include the latest Bolts-Swift. The current +1.3.0 release is only for Swfit 3.x, so you would have to manually change the Swift version. + +```ruby +pod 'Bolts-Swift', :git => 'https://github.com/BoltsFramework/Bolts-Swift.git', :commit => 'e9baa72' +``` + For first time CocoaPods users we have a detailed [video guide](https://youtu.be/VTb_EDv5j7A). ### Simple API Test @@ -50,35 +58,35 @@ Here is a walkthrough to showcase a very basic connect and toggle LED operation. First, import the framework header files like this: ```swift import MetaWear +import MetaWearCpp ``` Then add the following code wherever appropriate to make the LED flash green: ```swift -MBLMetaWearManager.shared().startScanForMetaWears() { array in - // Hooray! We found a MetaWear board, so stop scanning for more - MBLMetaWearManager.shared().stopScan() - // Connect to the board we found - if let device = array.first { - device.connectAsync().success() { _ in - // Hooray! We connected to a MetaWear board, so flash its LED! - device.led?.flashColorAsync(UIColor.green, withIntensity: 0.5) - }.failure() { error in - // Sorry we couldn't connect - print(error) +MetaWearScanner.shared.startScan(allowDuplicates: true) { (device) in + // We found a MetaWear board, see if it is close + if device.rssi.intValue > -50 { + // Hooray! We found a MetaWear board, so stop scanning for more + MetaWearScanner.shared.stopScan() + // Connect to the board we found + device.connectAndSetup().continueWith { t in + if let error = t.error { + // Sorry we couldn't connect + print(error) + } else { + // Hooray! We connected to a MetaWear board, so flash its LED! + var pattern = MblMwLedPattern() + mbl_mw_led_load_preset_pattern(&pattern, MBL_MW_LED_PRESET_PULSE) + mbl_mw_led_stop_and_clear(device.board) + mbl_mw_led_write_pattern(device.board, &pattern, MBL_MW_LED_COLOR_GREEN) + mbl_mw_led_play(device.board) + } } } } ``` Now run the app! -*BLUETOOTH IS NOT SUPPORTED IN THE SIMULATOR* but we do include a simulated MetaWear for use with basic testing, however, it does not have all the features of a real MetaWear. - -### Sample iOS App - -We have a sample iOS App on the [App Store](https://itunes.apple.com/us/app/metawear/id920878581) and the source can be found on our [GitHub Page](https://github.com/mbientlab/Metawear-SampleiOSApp). - -The sample iOS App demonstrates the base functionality of the various MetaWear modules and serves as a good starting point for developers. +*BLUETOOTH IS NOT SUPPORTED IN THE SIMULATOR* -### API Documentation -See the [iOS Guide](https://mbientlab.com/iosdocs/latest/) diff --git a/StarterProject/Podfile b/StarterProject/Podfile index cc31e54..97f2603 100644 --- a/StarterProject/Podfile +++ b/StarterProject/Podfile @@ -1,17 +1,17 @@ abstract_target 'Starter' do use_frameworks! # Pods for all targets - pod 'MetaWear', :path => '../' + pod 'MetaWear', :subspecs => ['AsyncUtils', 'UI'], :path => '../' target 'iOS' do - platform :ios, '9.0' + platform :ios, '10.0' # Pods for iOS pod 'MBProgressHUD' end target 'macOS' do - platform :osx, '10.12' + platform :osx, '10.13' # Pods for macOS end diff --git a/StarterProject/Podfile.lock b/StarterProject/Podfile.lock index 2725c7b..01b4d36 100644 --- a/StarterProject/Podfile.lock +++ b/StarterProject/Podfile.lock @@ -1,25 +1,33 @@ PODS: - - Bolts/Tasks (1.8.4) - - FastCoding (3.2.2) + - Bolts-Swift (1.3.0) - MBProgressHUD (1.1.0) - - MetaWear (2.10.0): - - Bolts/Tasks (~> 1.8.4) - - FastCoding (~> 3.2.2) + - MetaWear/AsyncUtils (3.0.0): + - MetaWear/Core + - MetaWear/Core (3.0.0): + - Bolts-Swift (~> 1.3.0) + - MetaWear/UI (3.0.0): + - MetaWear/AsyncUtils + - MetaWear/Core DEPENDENCIES: - MBProgressHUD - - MetaWear (from `../`) + - MetaWear/AsyncUtils (from `../`) + - MetaWear/UI (from `../`) + +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - Bolts-Swift + - MBProgressHUD EXTERNAL SOURCES: MetaWear: - :path: ../ + :path: "../" SPEC CHECKSUMS: - Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322 - FastCoding: f7b1b75a2ccb0dd6ef9c928e46339e20252d98d3 + Bolts-Swift: fa98d1b59fc1acea9b21a21306dcdca1c85e3737 MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9 - MetaWear: a30bf8ff348feca9095f8952d927987aca1daf52 + MetaWear: db411d9e682ce4845a3e187a6de0b8cca16b726d -PODFILE CHECKSUM: 097e07f8cd09329bd0f334824e32a3f7be4e05a0 +PODFILE CHECKSUM: 981b4467a7e96b3f253edb1f00bd9efa48322787 -COCOAPODS: 1.3.1 +COCOAPODS: 1.5.0 diff --git a/StarterProject/Pods/Bolts/LICENSE b/StarterProject/Pods/Bolts-Swift/LICENSE similarity index 94% rename from StarterProject/Pods/Bolts/LICENSE rename to StarterProject/Pods/Bolts-Swift/LICENSE index e1a5831..4cdb491 100644 --- a/StarterProject/Pods/Bolts/LICENSE +++ b/StarterProject/Pods/Bolts-Swift/LICENSE @@ -1,8 +1,8 @@ BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: diff --git a/StarterProject/Pods/Bolts-Swift/README.md b/StarterProject/Pods/Bolts-Swift/README.md new file mode 100644 index 0000000..d1c1c12 --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/README.md @@ -0,0 +1,164 @@ +# Bolts in Swift + +![Platforms][platforms-svg] +![Swift Version][swift-version-svg] + +[![Podspec][podspec-svg]][podspec-link] +[![Carthage compatible][carthage-svg]](carthage-link) +[![License][license-svg]][license-link] + +[![Build Status][build-status-svg]][build-status-link] +[![Coverage Status][coverage-status-svg]][coverage-status-link] + + +Bolts is a collection of low-level libraries designed to make developing mobile apps easier. Bolts was designed by Parse and Facebook for our own internal use, and we have decided to open source these libraries to make them available to others. + +## Tasks + +Bolts Tasks is a complete implementation of futures/promises for iOS/OS X/watchOS/tvOS and any platform that supports Swift. +A task represents the result of an asynchronous operation, which typically would be returned from a function. +In addition to being able to have different states `completed`/`faulted`/`cancelled` they provide these benefits: +- `Tasks` consume fewer system resources, since they don't occupy a thread while waiting on other `Tasks`. +- `Tasks` could be performed/chained in a row which will not create nested "pyramid" code as you would get when using only callbacks. +- `Tasks` are fully composable, allowing you to perform branching, parallelism, and complex error handling, without the spaghetti code of having many named callbacks. +- `Tasks` allow you to arrange code in the order that it executes, rather than having to split your logic across scattered callback functions. +- `Tasks` don't depend on any particular threading model. So you can use concepts like operation queues/dispatch queues or even thread executors. +- `Tasks` could be used synchronously or asynchronously, providing the same benefit of different results of any function/operation. + +## Getting Started + +- **[CocoaPods](https://cocoapods.org)** + + Add the following line to your Podfile: + ```ruby + pod 'Bolts-Swift' + ``` + Run `pod install`, and you should now have the latest parse release. + +- **[Carthage](https://github.com/carthage/carthage)** + + Add the following line to your Cartfile: + ``` + github "BoltsFramework/Bolts-Swift" + ``` + Run `carthage update`, and you should now have the latest version of Bolts in your Carthage folder. + +- **Using Bolts as a sub-project** + + You can also include parse as a subproject inside of your application if you'd prefer, although we do not recommend this, as it will increase your indexing time significantly. To do so, just drag and drop the `BoltsSwift.xcodeproj` file into your workspace. + +- **Import Bolts** + + Now that you have the framework linked to your application - add the folowing line in every `.swift` that you want to use Bolts from: + ``` + import BoltsSwift + ``` + +## Chaining Tasks + +Every `Task` has a function named `continueWith()`, which takes a continuation closure. A continuation will be executed when the task is complete. You can the inspect the task to check if it was successful and to get its result. +```swift +save(object).continueWith { task in + if task.cancelled { + // Save was cancelled + } else if task.faulted { + // Save failed + } else { + // Object was successfully saved + let result = task.result + } +} +``` + +In many cases, you only want to do more work if the previous task was successful, and propagate any error or cancellation to be dealt with later. To do this, use `continueOnSuccessWith` function: +```swift +save(object).continueOnSuccessWith { task in + // The object was saved succesfully + let result = task.result +} +``` + +If you return any object from `continueWith` function - this will become a result of the new function. And if you want to call into more tasks and return those results - you can use `continueWithTask`. This gives you an ability to chain more asynchronous work together. +In the following example we want to fetch a user profile, then fetch a profile image, and if any of these operations failed - we still want to display an placeholder image: +```swift +fetchProfile(user).continueOnSuccessWithTask { task in + return fetchProfileImage(task.result); +}.continueWith { task in + if let image = task.result { + return image + } + return ProfileImagePlaceholder() +} +``` + +## Creating Tasks + +To create a task - you would need a `TaskCompletionSource`, which is a consumer end of any `Task`, which gives you an ability to control whether the task is completed/faulted or cancelled. +After you create a `TaskCompletionSource`, you need to call `setResult()`/`setError()`/`cancel()` to trigger its continuations and change its state. +```swift +func fetch(object: PFObject) -> Task { + let taskCompletionSource = TaskCompletionSource() + object.fetchInBackgroundWithBlock() { (object: PFObject?, error: NSError?) in + if let error = error { + taskCompletionSource.setError(error) + } else if let object = object { + taskCompletionSource.setResult(object) + } else { + taskCompletionSource.cancel() + } + } + return taskCompletionSource.task +} +``` + +## Tasks in Parallel + +You can also perform several tasks in parallel and chain the result of all of them using `whenAll()` function. +```swift +let query = PFQuery(className: "Comments") +find(query).continueWithTask { task in + var tasks: [Task] = [] + task.result?.forEach { comment in + tasks.append(self.deleteComment(comment)) + } + return Task.whenAll(tasks) +}.continueOnSuccessWith { task in + // All comments were deleted +} +``` + +## Task Executors + +Both `continueWith()` and `continueWithTask()` functions accept an optional executor parameter. These allow you to control how the continuation is executed. +The default executor will dispatch to global dispatch queue, but you can provide your own executor to schedule work in a specific way. +For example, if you want to continue with work on the main thread: +```swift +fetch(object).continueWith(Executor.MainThread) { task in + // This closure will be executor on the main application's thread +} +``` + +## How Do I Contribute? + +We want to make contributing to this project as easy and transparent as possible. Please refer to the [Contribution Guidelines][contributing]. + + [releases]: https://github.com/BoltsFramework/Bolts-Swift/releases + [contributing]: https://github.com/BoltsFramework/Bolts-Swift/blob/master/CONTRIBUTING.md + + [build-status-svg]: https://img.shields.io/travis/BoltsFramework/Bolts-Swift/master.svg + [build-status-link]: https://travis-ci.org/BoltsFramework/Bolts-Swift/branches + + [coverage-status-svg]: https://img.shields.io/codecov/c/github/BoltsFramework/Bolts-Swift/master.svg + [coverage-status-link]: https://codecov.io/github/BoltsFramework/Bolts-Swift?branch=master + + [license-svg]: https://img.shields.io/badge/license-BSD-lightgrey.svg + [license-link]: https://github.com/BoltsFramework/Bolts-Swift/blob/master/LICENSE + + [podspec-svg]: https://img.shields.io/cocoapods/v/Bolts-Swift.svg + [podspec-link]: https://cocoapods.org/pods/Bolts-Swift + + [carthage-svg]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat + [carthage-link]: https://github.com/carthage/carthage + + [platforms-svg]: http://img.shields.io/cocoapods/p/Bolts-Swift.svg?style=flat + [swift-version-svg]: https://img.shields.io/badge/Swift-3.0.x-orange.svg diff --git a/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Errors.swift b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Errors.swift new file mode 100644 index 0000000..ec3db5b --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Errors.swift @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +/** + An error type that contains one or more underlying errors. + */ +public struct AggregateError: Error { + /// An array of errors that are aggregated into this one. + public let errors: [Error] + + init(errors: [Error]) { + self.errors = errors + } +} + +/** + An error type that indicates that the task was cancelled. + + Return or throw this from a continuation closure to propagate to the `task.cancelled` property. + */ +public struct CancelledError: Error { + /** + Initializes a Cancelled Error. + */ + public init() { } +} diff --git a/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Executor.swift b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Executor.swift new file mode 100644 index 0000000..fb18ed6 --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Executor.swift @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +/// `Executor` is an `enum`, that defines different strategies for calling closures. +public enum Executor { + + /** + Calls closures immediately unless the call stack gets too deep, + in which case it dispatches the closure in the default priority queue. + */ + case `default` + + /** + Calls closures immediately. + Tasks continuations will be run in the thread of the previous task. + */ + case immediate + + /** + Calls closures on the main thread. + Will execute synchronously if already on the main thread, otherwise - will execute asynchronously. + */ + case mainThread + + /** + Dispatches closures on a GCD queue. + */ + case queue(DispatchQueue) + + /** + Adds closures to an operation queue. + */ + case operationQueue(Foundation.OperationQueue) + + /** + Passes closures to an executing closure. + */ + case closure((() -> Void) -> Void) + + /** + Executes the given closure using the corresponding strategy. + + - parameter closure: The closure to execute. + */ + public func execute(_ closure: @escaping () -> Void) { + switch self { + case .default: + struct Static { + static let taskDepthKey = "com.bolts.TaskDepthKey" + static let maxTaskDepth = 20 + } + + let localThreadDictionary = Thread.current.threadDictionary + + var previousDepth: Int + if let depth = localThreadDictionary[Static.taskDepthKey] as? Int { + previousDepth = depth + } else { + previousDepth = 0 + } + + if previousDepth > Static.maxTaskDepth { + DispatchQueue.global(qos: .default).async(execute: closure) + } else { + localThreadDictionary[Static.taskDepthKey] = previousDepth + 1 + closure() + localThreadDictionary[Static.taskDepthKey] = previousDepth + } + case .immediate: + closure() + case .mainThread: + if Thread.isMainThread { + closure() + } else { + DispatchQueue.main.async(execute: closure) + } + case .queue(let queue): + queue.async(execute: closure) + case .operationQueue(let operationQueue): + operationQueue.addOperation(closure) + case .closure(let executingClosure): + executingClosure(closure) + } + } +} + +extension Executor : CustomStringConvertible, CustomDebugStringConvertible { + /// A textual representation of `self`. + public var description: String { + switch self { + case .default: + return "Default Executor" + case .immediate: + return "Immediate Executor" + case .mainThread: + return "MainThread Executor" + case .queue: + return "Executor with dispatch_queue" + case .operationQueue: + return "Executor with NSOperationQueue" + case .closure: + return "Executor with custom closure" + } + } + + /// A textual representation of `self`, suitable for debugging. + public var debugDescription: String { + switch self { + case .queue(let object): + return "\(description): \(object)" + case .operationQueue(let queue): + return "\(description): \(queue)" + case .closure(let closure): + return "\(description): \(closure)" + default: + return description + } + } +} diff --git a/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+ContinueWith.swift b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+ContinueWith.swift new file mode 100644 index 0000000..8fbc2b7 --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+ContinueWith.swift @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +//-------------------------------------- +// MARK: - ContinueWith +//-------------------------------------- + +extension Task { + /** + Internal continueWithTask. This is the method that all other continuations must go through. + + - parameter executor: The executor to invoke the closure on. + - parameter options: The options to run the closure with + - parameter continuation: The closure to execute. + + - returns: The task resulting from the continuation + */ + fileprivate func continueWithTask(_ executor: Executor, + options: TaskContinuationOptions, + continuation: @escaping ((Task) throws -> Task) + ) -> Task { + let taskCompletionSource = TaskCompletionSource() + let wrapperContinuation = { + switch self.state { + case .success where options.contains(.RunOnSuccess): fallthrough + case .error where options.contains(.RunOnError): fallthrough + case .cancelled where options.contains(.RunOnCancelled): + executor.execute { + let wrappedState = TaskState>.fromClosure { + try continuation(self) + } + switch wrappedState { + case .success(let nextTask): + switch nextTask.state { + case .pending: + nextTask.continueWith { nextTask in + taskCompletionSource.setState(nextTask.state) + } + default: + taskCompletionSource.setState(nextTask.state) + } + case .error(let error): + taskCompletionSource.set(error: error) + case .cancelled: + taskCompletionSource.cancel() + default: abort() // This should never happen. + } + } + + case .success(let result as S): + // This is for continueOnErrorWith - the type of the result doesn't change, so we can pass it through + taskCompletionSource.set(result: result) + + case .error(let error): + taskCompletionSource.set(error: error) + + case .cancelled: + taskCompletionSource.cancel() + + default: + fatalError("Task was in an invalid state \(self.state)") + } + } + appendOrRunContinuation(wrapperContinuation) + return taskCompletionSource.task + } + + /** + Enqueues a given closure to be run once this task is complete. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns the result of the task. + + - returns: A task that will be completed with a result from a given closure. + */ + @discardableResult + public func continueWith(_ executor: Executor = .default, continuation: @escaping ((Task) throws -> S)) -> Task { + return continueWithTask(executor) { task in + let state = TaskState.fromClosure({ + try continuation(task) + }) + return Task(state: state) + } + } + + /** + Enqueues a given closure to be run once this task is complete. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueWithTask(_ executor: Executor = .default, continuation: @escaping ((Task) throws -> Task)) -> Task { + return continueWithTask(executor, options: .RunAlways, continuation: continuation) + } +} + +//-------------------------------------- +// MARK: - ContinueOnSuccessWith +//-------------------------------------- + +extension Task { + /** + Enqueues a given closure to be run once this task completes with success (has intended result). + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnSuccessWith(_ executor: Executor = .default, + continuation: @escaping ((TResult) throws -> S)) -> Task { + return continueOnSuccessWithTask(executor) { taskResult in + let state = TaskState.fromClosure({ + try continuation(taskResult) + }) + return Task(state: state) + } + } + + /** + Enqueues a given closure to be run once this task completes with success (has intended result). + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnSuccessWithTask(_ executor: Executor = .default, + continuation: @escaping ((TResult) throws -> Task)) -> Task { + return continueWithTask(executor, options: .RunOnSuccess) { task in + return try continuation(task.result!) + } + } +} + +//-------------------------------------- +// MARK: - ContinueOnErrorWith +//-------------------------------------- + +extension Task { + /** + Enqueues a given closure to be run once this task completes with error. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnErrorWith(_ executor: Executor = .default, continuation: @escaping ((E) throws -> TResult)) -> Task { + return continueOnErrorWithTask(executor) { (error: E) in + let state = TaskState.fromClosure({ + try continuation(error) + }) + return Task(state: state) + } + } + + /** + Enqueues a given closure to be run once this task completes with error. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnErrorWith(_ executor: Executor = .default, continuation: @escaping ((Error) throws -> TResult)) -> Task { + return continueOnErrorWithTask(executor) { (error: Error) in + let state = TaskState.fromClosure({ + try continuation(error) + }) + return Task(state: state) + } + } + + /** + Enqueues a given closure to be run once this task completes with error. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnErrorWithTask(_ executor: Executor = .default, continuation: @escaping ((E) throws -> Task)) -> Task { + return continueOnErrorWithTask(executor) { (error: Error) in + if let error = error as? E { + return try continuation(error) + } + return Task(state: .error(error)) + } + } + + /** + Enqueues a given closure to be run once this task completes with error. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter continuation: The closure that returns a task to chain on. + + - returns: A task that will be completed when a task returned from a closure is completed. + */ + @discardableResult + public func continueOnErrorWithTask(_ executor: Executor = .default, continuation: @escaping ((Error) throws -> Task)) -> Task { + return continueWithTask(executor, options: .RunOnError) { task in + return try continuation(task.error!) + } + } +} diff --git a/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+Delay.swift b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+Delay.swift new file mode 100644 index 0000000..1c8feb6 --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+Delay.swift @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +//-------------------------------------- +// MARK: - Task with Delay +//-------------------------------------- + +extension Task { + /** + Creates a task that will complete after the given delay. + + - parameter delay: The delay for the task to completes. + + - returns: A task that will complete after the given delay. + */ + public class func withDelay(_ delay: TimeInterval) -> Task { + let taskCompletionSource = TaskCompletionSource() + let time = DispatchTime.now() + delay + DispatchQueue.global(qos: .default).asyncAfter(deadline: time) { + taskCompletionSource.trySet(result: ()) + } + return taskCompletionSource.task + } +} diff --git a/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAll.swift b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAll.swift new file mode 100644 index 0000000..fb78753 --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAll.swift @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +//-------------------------------------- +// MARK: - WhenAll +//-------------------------------------- + +extension Task { + + /** + Creates a task that will be completed after all of the input tasks have completed. + + - parameter tasks: Array tasks to wait on for completion. + + - returns: A new task that will complete after all `tasks` are completed. + */ + public class func whenAll(_ tasks: [Task]) -> Task { + if tasks.isEmpty { + return Task.emptyTask() + } + + var tasksCount: Int32 = Int32(tasks.count) + var cancelledCount: Int32 = 0 + var errorCount: Int32 = 0 + + let tcs = TaskCompletionSource() + tasks.forEach { + $0.continueWith { task -> Void in + if task.cancelled { + OSAtomicIncrement32(&cancelledCount) + } else if task.faulted { + OSAtomicIncrement32(&errorCount) + } + + if OSAtomicDecrement32(&tasksCount) == 0 { + if cancelledCount > 0 { + tcs.cancel() + } else if errorCount > 0 { + tcs.set(error: AggregateError(errors: tasks.flatMap({ $0.error }))) + } else { + tcs.set(result: ()) + } + } + } + } + return tcs.task + } + + /** + Creates a task that will be completed after all of the input tasks have completed. + + - parameter tasks: Zero or more tasks to wait on for completion. + + - returns: A new task that will complete after all `tasks` are completed. + */ + public class func whenAll(_ tasks: Task...) -> Task { + return whenAll(tasks) + } + + /** + Creates a task that will be completed after all of the input tasks have completed. + + - parameter tasks: Array of tasks to wait on for completion. + + - returns: A new task that will complete after all `tasks` are completed. + The result of the task is going an array of results of all tasks in the same order as they were provided. + */ + public class func whenAllResult(_ tasks: [Task]) -> Task<[TResult]> { + return whenAll(tasks).continueOnSuccessWithTask { task -> Task<[TResult]> in + let results: [TResult] = tasks.map { task in + guard let result = task.result else { + // This should never happen. + // If the task succeeded - there is no way result is `nil`, even in case TResult is optional, + // because `task.result` would have a type of `Result??`, and we unwrap only one optional here. + // If a task was cancelled, we should have never have gotten past 'continueOnSuccess'. + // If a task errored, we should have returned a 'AggregateError' and never gotten past 'continueOnSuccess'. + // If a task was pending, then something went horribly wrong. + fatalError("Task is in unknown state \(task.state).") + } + return result + } + return Task<[TResult]>(results) + } + } + + /** + Creates a task that will be completed after all of the input tasks have completed. + + - parameter tasks: Zero or more tasks to wait on for completion. + + - returns: A new task that will complete after all `tasks` are completed. + The result of the task is going an array of results of all tasks in the same order as they were provided. + */ + public class func whenAllResult(_ tasks: Task...) -> Task<[TResult]> { + return whenAllResult(tasks) + } +} diff --git a/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAny.swift b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAny.swift new file mode 100644 index 0000000..90abced --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task+WhenAny.swift @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +//-------------------------------------- +// MARK: - WhenAny +//-------------------------------------- + +extension Task { + + /** + Creates a task that will complete when any of the input tasks have completed. + + The returned task will complete when any of the supplied tasks have completed. + This is true even if the first task to complete ended in the canceled or faulted state. + + - parameter tasks: Array of tasks to wait on for completion. + + - returns: A new task that will complete when any of the `tasks` are completed. + */ + public class func whenAny(_ tasks: [Task]) -> Task { + if tasks.isEmpty { + return Task.emptyTask() + } + let taskCompletionSource = TaskCompletionSource() + for task in tasks { + // Do not continue anything if we completed the task, because we fulfilled our job here. + if taskCompletionSource.task.completed { + break + } + task.continueWith { task in + taskCompletionSource.trySet(result: ()) + } + } + return taskCompletionSource.task + } + + /** + Creates a task that will complete when any of the input tasks have completed. + + The returned task will complete when any of the supplied tasks have completed. + This is true even if the first task to complete ended in the canceled or faulted state. + + - parameter tasks: Zeror or more tasks to wait on for completion. + + - returns: A new task that will complete when any of the `tasks` are completed. + */ + public class func whenAny(_ tasks: Task...) -> Task { + return whenAny(tasks) + } +} diff --git a/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task.swift b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task.swift new file mode 100644 index 0000000..f2852dc --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/Task.swift @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +enum TaskState { + case pending() + case success(TResult) + case error(Error) + case cancelled + + static func fromClosure(_ closure: () throws -> TResult) -> TaskState { + do { + return .success(try closure()) + } catch is CancelledError { + return .cancelled + } catch { + return .error(error) + } + } +} + +struct TaskContinuationOptions: OptionSet { + let rawValue: Int + init(rawValue: Int) { + self.rawValue = rawValue + } + + static let RunOnSuccess = TaskContinuationOptions(rawValue: 1 << 0) + static let RunOnError = TaskContinuationOptions(rawValue: 1 << 1) + static let RunOnCancelled = TaskContinuationOptions(rawValue: 1 << 2) + + static let RunAlways: TaskContinuationOptions = [ .RunOnSuccess, .RunOnError, .RunOnCancelled ] +} + +//-------------------------------------- +// MARK: - Task +//-------------------------------------- + +/// +/// The consumer view of a Task. +/// Task has methods to inspect the state of the task, and to add continuations to be run once the task is complete. +/// +public final class Task { + public typealias Continuation = () -> Void + + fileprivate let synchronizationQueue = DispatchQueue(label: "com.bolts.task", attributes: DispatchQueue.Attributes.concurrent) + fileprivate var _completedCondition: NSCondition? + + fileprivate var _state: TaskState = .pending() + fileprivate var _continuations: [Continuation] = Array() + + // MARK: Initializers + + init() {} + + init(state: TaskState) { + _state = state + } + + /** + Creates a task that is already completed with the given result. + + - parameter result: The task result. + */ + public init(_ result: TResult) { + _state = .success(result) + } + + /** + Initializes a task that is already completed with the given error. + + - parameter error: The task error. + */ + public init(error: Error) { + _state = .error(error) + } + + /** + Creates a cancelled task. + + - returns: A cancelled task. + */ + public class func cancelledTask() -> Self { + // Swift prevents this method from being called `cancelled` due to the `cancelled` instance var. This is most likely a bug. + return self.init(state: .cancelled) + } + + class func emptyTask() -> Task { + return Task(state: .success()) + } + + // MARK: Execute + + /** + Creates a task that will complete with the result of the given closure. + + - note: The closure cannot make the returned task to fail. Use the other `execute` overload for this. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter closure: The closure that returns the result of the task. + The returned task will complete when the closure completes. + */ + public convenience init(_ executor: Executor = .default, closure: @escaping ((Void) throws -> TResult)) { + self.init(state: .pending()) + executor.execute { + self.trySet(state: TaskState.fromClosure(closure)) + } + } + + /** + Creates a task that will continue with the task returned by the given closure. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter closure: The closure that returns the continuation task. + The returned task will complete when the continuation task completes. + + - returns: A task that will continue with the task returned by the given closure. + */ + public class func execute(_ executor: Executor = .default, closure: @escaping ((Void) throws -> TResult)) -> Task { + return Task(executor, closure: closure) + } + + /** + Creates a task that will continue with the task returned by the given closure. + + - parameter executor: Determines how the the closure is called. The default is to call the closure immediately. + - parameter closure: The closure that returns the continuation task. + The returned task will complete when the continuation task completes. + + - returns: A task that will continue with the task returned by the given closure. + */ + public class func executeWithTask(_ executor: Executor = .default, closure: @escaping (() throws -> Task)) -> Task { + return emptyTask().continueWithTask(executor) { _ in + return try closure() + } + } + + // MARK: State Accessors + + /// Whether this task is completed. A completed task can also be faulted or cancelled. + public var completed: Bool { + switch state { + case .pending: + return false + default: + return true + } + } + + /// Whether this task has completed due to an error or exception. A `faulted` task is also completed. + public var faulted: Bool { + switch state { + case .error: + return true + default: + return false + } + } + + /// Whether this task has been cancelled. A `cancelled` task is also completed. + public var cancelled: Bool { + switch state { + case .cancelled: + return true + default: + return false + } + } + + /// The result of a successful task. Won't be set until the task completes with a `result`. + public var result: TResult? { + switch state { + case .success(let result): + return result + default: + break + } + return nil + } + + /// The error of a errored task. Won't be set until the task completes with `error`. + public var error: Error? { + switch state { + case .error(let error): + return error + default: + break + } + return nil + } + + /** + Waits until this operation is completed. + + This method is inefficient and consumes a thread resource while it's running. + It should be avoided. This method logs a warning message if it is used on the main thread. + */ + public func waitUntilCompleted() { + if Thread.isMainThread { + debugPrint("Warning: A long-running operation is being executed on the main thread waiting on \(self).") + } + + var conditon: NSCondition? + synchronizationQueue.sync(flags: .barrier, execute: { + if case .pending = self._state { + conditon = self._completedCondition ?? NSCondition() + self._completedCondition = conditon + } + }) + + guard let condition = conditon else { + // Task should have been completed + precondition(completed) + return + } + + condition.lock() + while !completed { + condition.wait() + } + condition.unlock() + + synchronizationQueue.sync(flags: .barrier, execute: { + self._completedCondition = nil + }) + } + + // MARK: State Change + + @discardableResult + func trySet(state: TaskState) -> Bool { + var stateChanged = false + + var continuations: [Continuation]? + var completedCondition: NSCondition? + synchronizationQueue.sync(flags: .barrier, execute: { + switch self._state { + case .pending(): + stateChanged = true + self._state = state + continuations = self._continuations + completedCondition = self._completedCondition + self._continuations.removeAll() + default: + break + } + }) + if stateChanged { + completedCondition?.lock() + completedCondition?.broadcast() + completedCondition?.unlock() + + for continuation in continuations! { + continuation() + } + } + + return stateChanged + } + + // MARK: Internal + + func appendOrRunContinuation(_ continuation: @escaping Continuation) { + var runContinuation = false + synchronizationQueue.sync(flags: .barrier, execute: { + switch self._state { + case .pending: + self._continuations.append(continuation) + default: + runContinuation = true + } + }) + if runContinuation { + continuation() + } + } + + var state: TaskState { + var value: TaskState? + synchronizationQueue.sync { + value = self._state + } + return value! + } +} + +//-------------------------------------- +// MARK: - Description +//-------------------------------------- + +extension Task: CustomStringConvertible, CustomDebugStringConvertible { + /// A textual representation of `self`. + public var description: String { + return "Task: \(self.state)" + } + + /// A textual representation of `self`, suitable for debugging. + public var debugDescription: String { + return "Task: \(self.state)" + } +} diff --git a/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/TaskCompletionSource.swift b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/TaskCompletionSource.swift new file mode 100644 index 0000000..00a8c55 --- /dev/null +++ b/StarterProject/Pods/Bolts-Swift/Sources/BoltsSwift/TaskCompletionSource.swift @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2016, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +import Foundation + +/// A `TaskCompletionSource` represents the producer side of a `Task`, +/// providing access to the consumer side through the `task` property. +/// As a producer, it can complete the underlying task by either by setting its result, error or cancelling it. +/// +/// For example, this is how you could use a task completion source +/// to provide a task that asynchronously reads data from disk: +/// +/// func dataFromPath(path: String) -> Task { +/// let tcs = TaskCompletionSource() +/// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { +/// if let data = NSData(contentsOfFile: path) { +/// tcs.setResult(data) +/// } else { +/// tcs.setError(NSError(domain: "com.example", code: 0, userInfo: nil)) +/// } +/// } +/// return tcs.task +/// } +public class TaskCompletionSource { + + /// The underlying task. + public let task = Task() + + /// Creates a task completion source with a pending task. + public init() {} + + //-------------------------------------- + // MARK: - Change Task State + //-------------------------------------- + + /** + Completes the task with the given result. + + Throws an exception if the task is already completed. + + - parameter result: The task result. + */ + public func set(result: TResult) { + guard task.trySet(state: .success(result)) else { + preconditionFailure("Can not set the result on a completed task.") + } + } + + /** + Completes the task with the given error. + + Throws an exception if the task is already completed. + + - parameter error: The task error. + */ + public func set(error: Error) { + guard task.trySet(state: .error(error)) else { + preconditionFailure("Can not set error on a completed task.") + } + } + + /** + Cancels the task. + + Throws an exception if the task is already completed. + */ + public func cancel() { + guard task.trySet(state: .cancelled) else { + preconditionFailure("Can not cancel a completed task.") + } + } + + /** + Tries to complete the task with the given result. + + - parameter result: The task result. + - returns: `true` if the result was set, `false` otherwise. + */ + @discardableResult + public func trySet(result: TResult) -> Bool { + return task.trySet(state: .success(result)) + } + + /** + Tries to completes the task with the given error. + + - parameter error: The task error. + - returns: `true` if the error was set, `false` otherwise. + */ + @discardableResult + public func trySet(error: Error) -> Bool { + return task.trySet(state: .error(error)) + } + + /** + Cancels the task. + + - returns: `true` if the task was completed, `false` otherwise. + */ + @discardableResult + public func tryCancel() -> Bool { + return task.trySet(state: .cancelled) + } + + //-------------------------------------- + // MARK: - Change Task State (internal) + //-------------------------------------- + + func setState(_ state: TaskState) { + guard task.trySet(state: state) else { + preconditionFailure("Can not complete a completed task.") + } + } +} diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationToken.h b/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationToken.h deleted file mode 100644 index 4d7dec0..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationToken.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - A block that will be called when a token is cancelled. - */ -typedef void(^BFCancellationBlock)(); - -/*! - The consumer view of a CancellationToken. - Propagates notification that operations should be canceled. - A BFCancellationToken has methods to inspect whether the token has been cancelled. - */ -@interface BFCancellationToken : NSObject - -/*! - Whether cancellation has been requested for this token source. - */ -@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; - -/*! - Register a block to be notified when the token is cancelled. - If the token is already cancelled the delegate will be notified immediately. - */ -- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationToken.m b/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationToken.m deleted file mode 100644 index 4acd589..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationToken.m +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationToken () - -@property (nullable, nonatomic, strong) NSMutableArray *registrations; -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic) BOOL disposed; - -@end - -@interface BFCancellationTokenRegistration (BFCancellationToken) - -+ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate; - -- (void)notifyDelegate; - -@end - -@implementation BFCancellationToken - -@synthesize cancellationRequested = _cancellationRequested; - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _registrations = [NSMutableArray array]; - _lock = [NSObject new]; - - return self; -} - -#pragma mark - Custom Setters/Getters - -- (BOOL)isCancellationRequested { - @synchronized(self.lock) { - [self throwIfDisposed]; - return _cancellationRequested; - } -} - -- (void)cancel { - NSArray *registrations; - @synchronized(self.lock) { - [self throwIfDisposed]; - if (_cancellationRequested) { - return; - } - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; - _cancellationRequested = YES; - registrations = [self.registrations copy]; - } - - [self notifyCancellation:registrations]; -} - -- (void)notifyCancellation:(NSArray *)registrations { - for (BFCancellationTokenRegistration *registration in registrations) { - [registration notifyDelegate]; - } -} - -- (BFCancellationTokenRegistration *)registerCancellationObserverWithBlock:(BFCancellationBlock)block { - @synchronized(self.lock) { - BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration registrationWithToken:self delegate:[block copy]]; - [self.registrations addObject:registration]; - - return registration; - } -} - -- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration { - @synchronized(self.lock) { - [self throwIfDisposed]; - [self.registrations removeObject:registration]; - } -} - -// Delay on a non-public method to prevent interference with a user calling performSelector or -// cancelPreviousPerformRequestsWithTarget on the public method -- (void)cancelPrivate { - [self cancel]; -} - -- (void)cancelAfterDelay:(int)millis { - [self throwIfDisposed]; - if (millis < -1) { - [NSException raise:NSInvalidArgumentException format:@"Delay must be >= -1"]; - } - - if (millis == 0) { - [self cancel]; - return; - } - - @synchronized(self.lock) { - [self throwIfDisposed]; - [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(cancelPrivate) object:nil]; - if (self.cancellationRequested) { - return; - } - - if (millis != -1) { - double delay = (double)millis / 1000; - [self performSelector:@selector(cancelPrivate) withObject:nil afterDelay:delay]; - } - } -} - -- (void)dispose { - @synchronized(self.lock) { - if (self.disposed) { - return; - } - [self.registrations makeObjectsPerformSelector:@selector(dispose)]; - self.registrations = nil; - self.disposed = YES; - } -} - -- (void)throwIfDisposed { - if (self.disposed) { - [NSException raise:NSInternalInconsistencyException format:@"Object already disposed"]; - } -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h b/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h deleted file mode 100644 index fa6090f..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Represents the registration of a cancellation observer with a cancellation token. - Can be used to unregister the observer at a later time. - */ -@interface BFCancellationTokenRegistration : NSObject - -/*! - Removes the cancellation observer registered with the token - and releases all resources associated with this registration. - */ -- (void)dispose; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m b/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m deleted file mode 100644 index f396c1c..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenRegistration.m +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationTokenRegistration.h" - -#import "BFCancellationToken.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationTokenRegistration () - -@property (nonatomic, weak) BFCancellationToken *token; -@property (nullable, nonatomic, strong) BFCancellationBlock cancellationObserverBlock; -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic) BOOL disposed; - -@end - -@interface BFCancellationToken (BFCancellationTokenRegistration) - -- (void)unregisterRegistration:(BFCancellationTokenRegistration *)registration; - -@end - -@implementation BFCancellationTokenRegistration - -+ (instancetype)registrationWithToken:(BFCancellationToken *)token delegate:(BFCancellationBlock)delegate { - BFCancellationTokenRegistration *registration = [BFCancellationTokenRegistration new]; - registration.token = token; - registration.cancellationObserverBlock = delegate; - return registration; -} - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _lock = [NSObject new]; - - return self; -} - -- (void)dispose { - @synchronized(self.lock) { - if (self.disposed) { - return; - } - self.disposed = YES; - } - - BFCancellationToken *token = self.token; - if (token != nil) { - [token unregisterRegistration:self]; - self.token = nil; - } - self.cancellationObserverBlock = nil; -} - -- (void)notifyDelegate { - @synchronized(self.lock) { - [self throwIfDisposed]; - self.cancellationObserverBlock(); - } -} - -- (void)throwIfDisposed { - NSAssert(!self.disposed, @"Object already disposed"); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h b/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h deleted file mode 100644 index 4627e99..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class BFCancellationToken; - -/*! - BFCancellationTokenSource represents the producer side of a CancellationToken. - Signals to a CancellationToken that it should be canceled. - It is a cancellation token that also has methods - for changing the state of a token by cancelling it. - */ -@interface BFCancellationTokenSource : NSObject - -/*! - Creates a new cancellation token source. - */ -+ (instancetype)cancellationTokenSource; - -/*! - The cancellation token associated with this CancellationTokenSource. - */ -@property (nonatomic, strong, readonly) BFCancellationToken *token; - -/*! - Whether cancellation has been requested for this token source. - */ -@property (nonatomic, assign, readonly, getter=isCancellationRequested) BOOL cancellationRequested; - -/*! - Cancels the token if it has not already been cancelled. - */ -- (void)cancel; - -/*! - Schedules a cancel operation on this CancellationTokenSource after the specified number of milliseconds. - @param millis The number of milliseconds to wait before completing the returned task. - If delay is `0` the cancel is executed immediately. If delay is `-1` any scheduled cancellation is stopped. - */ -- (void)cancelAfterDelay:(int)millis; - -/*! - Releases all resources associated with this token source, - including disposing of all registrations. - */ -- (void)dispose; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m b/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m deleted file mode 100644 index ee05cf0..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFCancellationTokenSource.m +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFCancellationTokenSource.h" - -#import "BFCancellationToken.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFCancellationToken (BFCancellationTokenSource) - -- (void)cancel; -- (void)cancelAfterDelay:(int)millis; - -- (void)dispose; -- (void)throwIfDisposed; - -@end - -@implementation BFCancellationTokenSource - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _token = [BFCancellationToken new]; - - return self; -} - -+ (instancetype)cancellationTokenSource { - return [BFCancellationTokenSource new]; -} - -#pragma mark - Custom Setters/Getters - -- (BOOL)isCancellationRequested { - return _token.isCancellationRequested; -} - -- (void)cancel { - [_token cancel]; -} - -- (void)cancelAfterDelay:(int)millis { - [_token cancelAfterDelay:millis]; -} - -- (void)dispose { - [_token dispose]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFExecutor.h b/StarterProject/Pods/Bolts/Bolts/Common/BFExecutor.h deleted file mode 100644 index afa4f3d..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFExecutor.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - An object that can run a given block. - */ -@interface BFExecutor : NSObject - -/*! - Returns a default executor, which runs continuations immediately until the call stack gets too - deep, then dispatches to a new GCD queue. - */ -+ (instancetype)defaultExecutor; - -/*! - Returns an executor that runs continuations on the thread where the previous task was completed. - */ -+ (instancetype)immediateExecutor; - -/*! - Returns an executor that runs continuations on the main thread. - */ -+ (instancetype)mainThreadExecutor; - -/*! - Returns a new executor that uses the given block to execute continuations. - @param block The block to use. - */ -+ (instancetype)executorWithBlock:(void(^)(void(^block)()))block; - -/*! - Returns a new executor that runs continuations on the given queue. - @param queue The instance of `dispatch_queue_t` to dispatch all continuations onto. - */ -+ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue; - -/*! - Returns a new executor that runs continuations on the given queue. - @param queue The instance of `NSOperationQueue` to run all continuations on. - */ -+ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue; - -/*! - Runs the given block using this executor's particular strategy. - @param block The block to execute. - */ -- (void)execute:(void(^)())block; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFExecutor.m b/StarterProject/Pods/Bolts/Bolts/Common/BFExecutor.m deleted file mode 100644 index b5d1f6b..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFExecutor.m +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFExecutor.h" - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Get the remaining stack-size of the current thread. - - @param totalSize The total stack size of the current thread. - - @return The remaining size, in bytes, available to the current thread. - - @note This function cannot be inlined, as otherwise the internal implementation could fail to report the proper - remaining stack space. - */ -__attribute__((noinline)) static size_t remaining_stack_size(size_t *restrict totalSize) { - pthread_t currentThread = pthread_self(); - - // NOTE: We must store stack pointers as uint8_t so that the pointer math is well-defined - uint8_t *endStack = pthread_get_stackaddr_np(currentThread); - *totalSize = pthread_get_stacksize_np(currentThread); - - // NOTE: If the function is inlined, this value could be incorrect - uint8_t *frameAddr = __builtin_frame_address(0); - - return (*totalSize) - (endStack - frameAddr); -} - -@interface BFExecutor () - -@property (nonatomic, copy) void(^block)(void(^block)()); - -@end - -@implementation BFExecutor - -#pragma mark - Executor methods - -+ (instancetype)defaultExecutor { - static BFExecutor *defaultExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - defaultExecutor = [self executorWithBlock:^void(void(^block)()) { - // We prefer to run everything possible immediately, so that there is callstack information - // when debugging. However, we don't want the stack to get too deep, so if the remaining stack space - // is less than 10% of the total space, we dispatch to another GCD queue. - size_t totalStackSize = 0; - size_t remainingStackSize = remaining_stack_size(&totalStackSize); - - if (remainingStackSize < (totalStackSize / 10)) { - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), block); - } else { - @autoreleasepool { - block(); - } - } - }]; - }); - return defaultExecutor; -} - -+ (instancetype)immediateExecutor { - static BFExecutor *immediateExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - immediateExecutor = [self executorWithBlock:^void(void(^block)()) { - block(); - }]; - }); - return immediateExecutor; -} - -+ (instancetype)mainThreadExecutor { - static BFExecutor *mainThreadExecutor = NULL; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - mainThreadExecutor = [self executorWithBlock:^void(void(^block)()) { - if (![NSThread isMainThread]) { - dispatch_async(dispatch_get_main_queue(), block); - } else { - @autoreleasepool { - block(); - } - } - }]; - }); - return mainThreadExecutor; -} - -+ (instancetype)executorWithBlock:(void(^)(void(^block)()))block { - return [[self alloc] initWithBlock:block]; -} - -+ (instancetype)executorWithDispatchQueue:(dispatch_queue_t)queue { - return [self executorWithBlock:^void(void(^block)()) { - dispatch_async(queue, block); - }]; -} - -+ (instancetype)executorWithOperationQueue:(NSOperationQueue *)queue { - return [self executorWithBlock:^void(void(^block)()) { - [queue addOperation:[NSBlockOperation blockOperationWithBlock:block]]; - }]; -} - -#pragma mark - Initializer - -- (instancetype)initWithBlock:(void(^)(void(^block)()))block { - self = [super init]; - if (!self) return self; - - _block = block; - - return self; -} - -#pragma mark - Execution - -- (void)execute:(void(^)())block { - self.block(block); -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFTask+Exceptions.h b/StarterProject/Pods/Bolts/Bolts/Common/BFTask+Exceptions.h deleted file mode 100644 index 41b633c..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFTask+Exceptions.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#pragma once - -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - Returns whether all instances of `BFTask` should automatically @try/@catch exceptions in continuation blocks. Default: `YES`. - - @return Boolean value indicating whether exceptions are being caught. - */ -extern BOOL BFTaskCatchesExceptions(void) -__attribute__((deprecated("This is temporary API and will be removed in a future release."))); - -/** - Set whether all instances of `BFTask` should automatically @try/@catch exceptions in continuation blocks. Default: `YES`. - - @param catchExceptions Boolean value indicating whether exceptions shoudl be caught. - */ -extern void BFTaskSetCatchesExceptions(BOOL catchExceptions) -__attribute__((deprecated("This is a temporary API and will be removed in a future release."))); - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFTask+Exceptions.m b/StarterProject/Pods/Bolts/Bolts/Common/BFTask+Exceptions.m deleted file mode 100644 index 928197e..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFTask+Exceptions.m +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2016, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ - -#import "BFTask+Exceptions.h" - -NS_ASSUME_NONNULL_BEGIN - -static BOOL taskCatchExceptions = YES; - -BOOL BFTaskCatchesExceptions(void) { - return taskCatchExceptions; -} - -void BFTaskSetCatchesExceptions(BOOL catchExceptions) { - taskCatchExceptions = catchExceptions; -} - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFTask.h b/StarterProject/Pods/Bolts/Bolts/Common/BFTask.h deleted file mode 100644 index 071f994..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFTask.h +++ /dev/null @@ -1,293 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -#import - -NS_ASSUME_NONNULL_BEGIN - -/*! - Error domain used if there was multiple errors on . - */ -extern NSString *const BFTaskErrorDomain; - -/*! - An error code used for , if there were multiple errors. - */ -extern NSInteger const kBFMultipleErrorsError; - -/*! - An exception that is thrown if there was multiple exceptions on . - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -extern NSString *const BFTaskMultipleExceptionsException -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - An error userInfo key used if there were multiple errors on . - Value type is `NSArray *`. - */ -extern NSString *const BFTaskMultipleErrorsUserInfoKey; - -/*! - An error userInfo key used if there were multiple exceptions on . - Value type is `NSArray *`. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -extern NSString *const BFTaskMultipleExceptionsUserInfoKey -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -@class BFExecutor; -@class BFTask; - -/*! - The consumer view of a Task. A BFTask has methods to - inspect the state of the task, and to add continuations to - be run once the task is complete. - */ -@interface BFTask<__covariant ResultType> : NSObject - -/*! - A block that can act as a continuation for a task. - */ -typedef __nullable id(^BFContinuationBlock)(BFTask *t); - -/*! - Creates a task that is already completed with the given result. - @param result The result for the task. - */ -+ (instancetype)taskWithResult:(nullable ResultType)result; - -/*! - Creates a task that is already completed with the given error. - @param error The error for the task. - */ -+ (instancetype)taskWithError:(NSError *)error; - -/*! - Creates a task that is already completed with the given exception. - @param exception The exception for the task. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -+ (instancetype)taskWithException:(NSException *)exception -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - Creates a task that is already cancelled. - */ -+ (instancetype)cancelledTask; - -/*! - Returns a task that will be completed (with result == nil) once - all of the input tasks have completed. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAllTasks:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once all of the input tasks have completed. - If all tasks complete successfully without being faulted or cancelled the result will be - an `NSArray` of all task results in the order they were provided. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAllTasksWithResults:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed once there is at least one successful task. - The first task to successuly complete will set the result, all other tasks results are - ignored. - @param tasks An `NSArray` of the tasks to use as an input. - */ -+ (instancetype)taskForCompletionOfAnyTask:(nullable NSArray *)tasks; - -/*! - Returns a task that will be completed a certain amount of time in the future. - @param millis The approximate number of milliseconds to wait before the - task will be finished (with result == nil). - */ -+ (instancetype)taskWithDelay:(int)millis; - -/*! - Returns a task that will be completed a certain amount of time in the future. - @param millis The approximate number of milliseconds to wait before the - task will be finished (with result == nil). - @param token The cancellation token (optional). - */ -+ (instancetype)taskWithDelay:(int)millis cancellationToken:(nullable BFCancellationToken *)token; - -/*! - Returns a task that will be completed after the given block completes with - the specified executor. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to immediately schedule to run with the given executor. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -+ (instancetype)taskFromExecutor:(BFExecutor *)executor withBlock:(nullable id (^)())block; - -// Properties that will be set on the task once it is completed. - -/*! - The result of a successful task. - */ -@property (nullable, nonatomic, strong, readonly) ResultType result; - -/*! - The error of a failed task. - */ -@property (nullable, nonatomic, strong, readonly) NSError *error; - -/*! - The exception of a failed task. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -@property (nullable, nonatomic, strong, readonly) NSException *exception -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - Whether this task has been cancelled. - */ -@property (nonatomic, assign, readonly, getter=isCancelled) BOOL cancelled; - -/*! - Whether this task has completed due to an error or exception. - */ -@property (nonatomic, assign, readonly, getter=isFaulted) BOOL faulted; - -/*! - Whether this task has completed. - */ -@property (nonatomic, assign, readonly, getter=isCompleted) BOOL completed; - -/*! - Enqueues the given block to be run once this task is complete. - This method uses a default execution strategy. The block will be - run on the thread where the previous task completes, unless the - the stack depth is too deep, in which case it will be run on a - dispatch queue with default priority. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block; - -/*! - Enqueues the given block to be run once this task is complete. - This method uses a default execution strategy. The block will be - run on the thread where the previous task completes, unless the - the stack depth is too deep, in which case it will be run on a - dispatch queue with default priority. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -/*! - Enqueues the given block to be run once this task is complete. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor withBlock:(BFContinuationBlock)block; -/*! - Enqueues the given block to be run once this task is complete. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - his method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation, error, or exception. - If it did, then the failure will be propagated to the returned - task. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block; - -/*! - Identical to continueWithBlock:, except that the block is only run - if this task did not produce a cancellation, error, or exception. - If it did, then the failure will be propagated to the returned - task. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or - exception. If it did, then the failure will be propagated to the - returned task. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor withSuccessBlock:(BFContinuationBlock)block; - -/*! - Identical to continueWithExecutor:withBlock:, except that the block - is only run if this task did not produce a cancellation, error, or - exception. If it did, then the failure will be propagated to the - returned task. - @param executor A BFExecutor responsible for determining how the - continuation block will be run. - @param block The block to be run once this task is complete. - @param cancellationToken The cancellation token (optional). - @returns A task that will be completed after block has run. - If block returns a BFTask, then the task returned from - this method will not be completed until that task is completed. - */ -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken; - -/*! - Waits until this operation is completed. - This method is inefficient and consumes a thread resource while - it's running. It should be avoided. This method logs a warning - message if it is used on the main thread. - */ -- (void)waitUntilFinished; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFTask.m b/StarterProject/Pods/Bolts/Bolts/Common/BFTask.m deleted file mode 100644 index fa14fac..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFTask.m +++ /dev/null @@ -1,563 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFTask.h" - -#import - -#import "Bolts.h" -#import "BFTask+Exceptions.h" - -NS_ASSUME_NONNULL_BEGIN - -__attribute__ ((noinline)) void warnBlockingOperationOnMainThread() { - NSLog(@"Warning: A long-running operation is being executed on the main thread. \n" - " Break on warnBlockingOperationOnMainThread() to debug."); -} - -NSString *const BFTaskErrorDomain = @"bolts"; -NSInteger const kBFMultipleErrorsError = 80175001; -NSString *const BFTaskMultipleExceptionsException = @"BFMultipleExceptionsException"; - -NSString *const BFTaskMultipleErrorsUserInfoKey = @"errors"; -NSString *const BFTaskMultipleExceptionsUserInfoKey = @"exceptions"; - -@interface BFTask () { - id _result; - NSError *_error; - NSException *_exception; -} - -@property (nonatomic, assign, readwrite, getter=isCancelled) BOOL cancelled; -@property (nonatomic, assign, readwrite, getter=isFaulted) BOOL faulted; -@property (nonatomic, assign, readwrite, getter=isCompleted) BOOL completed; - -@property (nonatomic, strong) NSObject *lock; -@property (nonatomic, strong) NSCondition *condition; -@property (nonatomic, strong) NSMutableArray *callbacks; - -@end - -@implementation BFTask - -#pragma mark - Initializer - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _lock = [[NSObject alloc] init]; - _condition = [[NSCondition alloc] init]; - _callbacks = [NSMutableArray array]; - - return self; -} - -- (instancetype)initWithResult:(id)result { - self = [super init]; - if (!self) return self; - - [self trySetResult:result]; - - return self; -} - -- (instancetype)initWithError:(NSError *)error { - self = [super init]; - if (!self) return self; - - [self trySetError:error]; - - return self; -} - -- (instancetype)initWithException:(NSException *)exception { - self = [super init]; - if (!self) return self; - - [self trySetException:exception]; - - return self; -} - -- (instancetype)initCancelled { - self = [super init]; - if (!self) return self; - - [self trySetCancelled]; - - return self; -} - -#pragma mark - Task Class methods - -+ (instancetype)taskWithResult:(nullable id)result { - return [[self alloc] initWithResult:result]; -} - -+ (instancetype)taskWithError:(NSError *)error { - return [[self alloc] initWithError:error]; -} - -+ (instancetype)taskWithException:(NSException *)exception { - return [[self alloc] initWithException:exception]; -} - -+ (instancetype)cancelledTask { - return [[self alloc] initCancelled]; -} - -+ (instancetype)taskForCompletionOfAllTasks:(nullable NSArray *)tasks { - __block int32_t total = (int32_t)tasks.count; - if (total == 0) { - return [self taskWithResult:nil]; - } - - __block int32_t cancelled = 0; - NSObject *lock = [[NSObject alloc] init]; - NSMutableArray *errors = [NSMutableArray array]; - NSMutableArray *exceptions = [NSMutableArray array]; - - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - for (BFTask *task in tasks) { - [task continueWithBlock:^id(BFTask *t) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (t.exception) { - @synchronized (lock) { - [exceptions addObject:t.exception]; -#pragma clang diagnostic pop - } - } else if (t.error) { - @synchronized (lock) { - [errors addObject:t.error]; - } - } else if (t.cancelled) { - OSAtomicIncrement32Barrier(&cancelled); - } - - if (OSAtomicDecrement32Barrier(&total) == 0) { - if (exceptions.count > 0) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (exceptions.count == 1) { - tcs.exception = [exceptions firstObject]; - } else { - NSException *exception = [NSException exceptionWithName:BFTaskMultipleExceptionsException - reason:@"There were multiple exceptions." - userInfo:@{ BFTaskMultipleExceptionsUserInfoKey: exceptions }]; - tcs.exception = exception; - } -#pragma clang diagnostic pop - } else if (errors.count > 0) { - if (errors.count == 1) { - tcs.error = [errors firstObject]; - } else { - NSError *error = [NSError errorWithDomain:BFTaskErrorDomain - code:kBFMultipleErrorsError - userInfo:@{ BFTaskMultipleErrorsUserInfoKey: errors }]; - tcs.error = error; - } - } else if (cancelled > 0) { - [tcs cancel]; - } else { - tcs.result = nil; - } - } - return nil; - }]; - } - return tcs.task; -} - -+ (instancetype)taskForCompletionOfAllTasksWithResults:(nullable NSArray *)tasks { - return [[self taskForCompletionOfAllTasks:tasks] continueWithSuccessBlock:^id(BFTask *task) { - return [tasks valueForKey:@"result"]; - }]; -} - -+ (instancetype)taskForCompletionOfAnyTask:(nullable NSArray *)tasks -{ - __block int32_t total = (int32_t)tasks.count; - if (total == 0) { - return [self taskWithResult:nil]; - } - - __block int completed = 0; - __block int32_t cancelled = 0; - - NSObject *lock = [NSObject new]; - NSMutableArray *errors = [NSMutableArray new]; - NSMutableArray *exceptions = [NSMutableArray new]; - - BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; - for (BFTask *task in tasks) { - [task continueWithBlock:^id(BFTask *t) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (t.exception != nil) { - @synchronized(lock) { - [exceptions addObject:t.exception]; -#pragma clang diagnostic pop - } - } else if (t.error != nil) { - @synchronized(lock) { - [errors addObject:t.error]; - } - } else if (t.cancelled) { - OSAtomicIncrement32Barrier(&cancelled); - } else { - if(OSAtomicCompareAndSwap32Barrier(0, 1, &completed)) { - [source setResult:t.result]; - } - } - - if (OSAtomicDecrement32Barrier(&total) == 0 && - OSAtomicCompareAndSwap32Barrier(0, 1, &completed)) { - if (cancelled > 0) { - [source cancel]; - } else if (exceptions.count > 0) { -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (exceptions.count == 1) { - source.exception = exceptions.firstObject; - } else { - NSException *exception = [NSException exceptionWithName:BFTaskMultipleExceptionsException - reason:@"There were multiple exceptions." - userInfo:@{ BFTaskMultipleExceptionsUserInfoKey: exceptions }]; - source.exception = exception; -#pragma clang diagnostic pop - } - } else if (errors.count > 0) { - if (errors.count == 1) { - source.error = errors.firstObject; - } else { - NSError *error = [NSError errorWithDomain:BFTaskErrorDomain - code:kBFMultipleErrorsError - userInfo:@{ @"errors": errors }]; - source.error = error; - } - } - } - // Abort execution of per tasks continuations - return nil; - }]; - } - return source.task; -} - - -+ (instancetype)taskWithDelay:(int)millis { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - tcs.result = nil; - }); - return tcs.task; -} - -+ (instancetype)taskWithDelay:(int)millis cancellationToken:(nullable BFCancellationToken *)token { - if (token.cancellationRequested) { - return [BFTask cancelledTask]; - } - - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, millis * NSEC_PER_MSEC); - dispatch_after(popTime, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){ - if (token.cancellationRequested) { - [tcs cancel]; - return; - } - tcs.result = nil; - }); - return tcs.task; -} - -+ (instancetype)taskFromExecutor:(BFExecutor *)executor withBlock:(nullable id (^)())block { - return [[self taskWithResult:nil] continueWithExecutor:executor withBlock:^id(BFTask *task) { - return block(); - }]; -} - -#pragma mark - Custom Setters/Getters - -- (nullable id)result { - @synchronized(self.lock) { - return _result; - } -} - -- (BOOL)trySetResult:(nullable id)result { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - _result = result; - [self runContinuations]; - return YES; - } -} - -- (nullable NSError *)error { - @synchronized(self.lock) { - return _error; - } -} - -- (BOOL)trySetError:(NSError *)error { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.faulted = YES; - _error = error; - [self runContinuations]; - return YES; - } -} - -- (nullable NSException *)exception { - @synchronized(self.lock) { - return _exception; - } -} - -- (BOOL)trySetException:(NSException *)exception { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.faulted = YES; - _exception = exception; - [self runContinuations]; - return YES; - } -} - -- (BOOL)isCancelled { - @synchronized(self.lock) { - return _cancelled; - } -} - -- (BOOL)isFaulted { - @synchronized(self.lock) { - return _faulted; - } -} - -- (BOOL)trySetCancelled { - @synchronized(self.lock) { - if (self.completed) { - return NO; - } - self.completed = YES; - self.cancelled = YES; - [self runContinuations]; - return YES; - } -} - -- (BOOL)isCompleted { - @synchronized(self.lock) { - return _completed; - } -} - -- (void)runContinuations { - @synchronized(self.lock) { - [self.condition lock]; - [self.condition broadcast]; - [self.condition unlock]; - for (void (^callback)() in self.callbacks) { - callback(); - } - [self.callbacks removeAllObjects]; - } -} - -#pragma mark - Chaining methods - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor withBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:executor block:block cancellationToken:nil]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - block:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken { - BFTaskCompletionSource *tcs = [BFTaskCompletionSource taskCompletionSource]; - - // Capture all of the state that needs to used when the continuation is complete. - dispatch_block_t executionBlock = ^{ - if (cancellationToken.cancellationRequested) { - [tcs cancel]; - return; - } - - id result = nil; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - if (BFTaskCatchesExceptions()) { - @try { - result = block(self); - } @catch (NSException *exception) { - NSLog(@"[Bolts] Warning: `BFTask` caught an exception in the continuation block." - @" This behavior is discouraged and will be removed in a future release." - @" Caught Exception: %@", exception); - tcs.exception = exception; - return; - } - } else { - result = block(self); - } -#pragma clang diagnostic pop - - if ([result isKindOfClass:[BFTask class]]) { - - id (^setupWithTask) (BFTask *) = ^id(BFTask *task) { - if (cancellationToken.cancellationRequested || task.cancelled) { - [tcs cancel]; -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wdeprecated-declarations" - } else if (task.exception) { - tcs.exception = task.exception; -#pragma clang diagnostic pop - } else if (task.error) { - tcs.error = task.error; - } else { - tcs.result = task.result; - } - return nil; - }; - - BFTask *resultTask = (BFTask *)result; - - if (resultTask.completed) { - setupWithTask(resultTask); - } else { - [resultTask continueWithBlock:setupWithTask]; - } - - } else { - tcs.result = result; - } - }; - - BOOL completed; - @synchronized(self.lock) { - completed = self.completed; - if (!completed) { - [self.callbacks addObject:[^{ - [executor execute:executionBlock]; - } copy]]; - } - } - if (completed) { - [executor execute:executionBlock]; - } - - return tcs.task; -} - -- (BFTask *)continueWithBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:nil]; -} - -- (BFTask *)continueWithBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken { - return [self continueWithExecutor:[BFExecutor defaultExecutor] block:block cancellationToken:cancellationToken]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - withSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:executor successBlock:block cancellationToken:nil]; -} - -- (BFTask *)continueWithExecutor:(BFExecutor *)executor - successBlock:(BFContinuationBlock)block - cancellationToken:(nullable BFCancellationToken *)cancellationToken { - if (cancellationToken.cancellationRequested) { - return [BFTask cancelledTask]; - } - - return [self continueWithExecutor:executor block:^id(BFTask *task) { - if (task.faulted || task.cancelled) { - return task; - } else { - return block(task); - } - } cancellationToken:cancellationToken]; -} - -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block { - return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:nil]; -} - -- (BFTask *)continueWithSuccessBlock:(BFContinuationBlock)block cancellationToken:(nullable BFCancellationToken *)cancellationToken { - return [self continueWithExecutor:[BFExecutor defaultExecutor] successBlock:block cancellationToken:cancellationToken]; -} - -#pragma mark - Syncing Task (Avoid it) - -- (void)warnOperationOnMainThread { - warnBlockingOperationOnMainThread(); -} - -- (void)waitUntilFinished { - if ([NSThread isMainThread]) { - [self warnOperationOnMainThread]; - } - - @synchronized(self.lock) { - if (self.completed) { - return; - } - [self.condition lock]; - } - // TODO: (nlutsenko) Restructure this to use Bolts-Swift thread access synchronization architecture - // In the meantime, it's absolutely safe to get `_completed` aka an ivar, as long as it's a `BOOL` aka less than word size. - while (!_completed) { - [self.condition wait]; - } - [self.condition unlock]; -} - -#pragma mark - NSObject - -- (NSString *)description { - // Acquire the data from the locked properties - BOOL completed; - BOOL cancelled; - BOOL faulted; - NSString *resultDescription = nil; - - @synchronized(self.lock) { - completed = self.completed; - cancelled = self.cancelled; - faulted = self.faulted; - resultDescription = completed ? [NSString stringWithFormat:@" result = %@", self.result] : @""; - } - - // Description string includes status information and, if available, the - // result since in some ways this is what a promise actually "is". - return [NSString stringWithFormat:@"<%@: %p; completed = %@; cancelled = %@; faulted = %@;%@>", - NSStringFromClass([self class]), - self, - completed ? @"YES" : @"NO", - cancelled ? @"YES" : @"NO", - faulted ? @"YES" : @"NO", - resultDescription]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h b/StarterProject/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h deleted file mode 100644 index 18810bc..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import - -NS_ASSUME_NONNULL_BEGIN - -@class BFTask; - -/*! - A BFTaskCompletionSource represents the producer side of tasks. - It is a task that also has methods for changing the state of the - task by settings its completion values. - */ -@interface BFTaskCompletionSource<__covariant ResultType> : NSObject - -/*! - Creates a new unfinished task. - */ -+ (instancetype)taskCompletionSource; - -/*! - The task associated with this TaskCompletionSource. - */ -@property (nonatomic, strong, readonly) BFTask *task; - -/*! - Completes the task by setting the result. - Attempting to set this for a completed task will raise an exception. - @param result The result of the task. - */ -- (void)setResult:(nullable ResultType)result; - -/*! - Completes the task by setting the error. - Attempting to set this for a completed task will raise an exception. - @param error The error for the task. - */ -- (void)setError:(NSError *)error; - -/*! - Completes the task by setting an exception. - Attempting to set this for a completed task will raise an exception. - @param exception The exception for the task. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -- (void)setException:(NSException *)exception -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - Completes the task by marking it as cancelled. - Attempting to set this for a completed task will raise an exception. - */ -- (void)cancel; - -/*! - Sets the result of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetResult:(nullable ResultType)result; - -/*! - Sets the error of the task if it wasn't already completed. - @param error The error for the task. - @returns whether the new value was set. - */ -- (BOOL)trySetError:(NSError *)error; - -/*! - Sets the exception of the task if it wasn't already completed. - @param exception The exception for the task. - @returns whether the new value was set. - - @deprecated `BFTask` exception handling is deprecated and will be removed in a future release. - */ -- (BOOL)trySetException:(NSException *)exception -__attribute__((deprecated("`BFTask` exception handling is deprecated and will be removed in a future release."))); - -/*! - Sets the cancellation state of the task if it wasn't already completed. - @returns whether the new value was set. - */ -- (BOOL)trySetCancelled; - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m b/StarterProject/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m deleted file mode 100644 index 1b99aab..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/BFTaskCompletionSource.m +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "BFTaskCompletionSource.h" - -#import "BFTask.h" - -NS_ASSUME_NONNULL_BEGIN - -@interface BFTask (BFTaskCompletionSource) - -- (BOOL)trySetResult:(nullable id)result; -- (BOOL)trySetError:(NSError *)error; -- (BOOL)trySetException:(NSException *)exception; -- (BOOL)trySetCancelled; - -@end - -@implementation BFTaskCompletionSource - -#pragma mark - Initializer - -+ (instancetype)taskCompletionSource { - return [[self alloc] init]; -} - -- (instancetype)init { - self = [super init]; - if (!self) return self; - - _task = [[BFTask alloc] init]; - - return self; -} - -#pragma mark - Custom Setters/Getters - -- (void)setResult:(nullable id)result { - if (![self.task trySetResult:result]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the result on a completed task."]; - } -} - -- (void)setError:(NSError *)error { - if (![self.task trySetError:error]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the error on a completed task."]; - } -} - -- (void)setException:(NSException *)exception { - if (![self.task trySetException:exception]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot set the exception on a completed task."]; - } -} - -- (void)cancel { - if (![self.task trySetCancelled]) { - [NSException raise:NSInternalInconsistencyException - format:@"Cannot cancel a completed task."]; - } -} - -- (BOOL)trySetResult:(nullable id)result { - return [self.task trySetResult:result]; -} - -- (BOOL)trySetError:(NSError *)error { - return [self.task trySetError:error]; -} - -- (BOOL)trySetException:(NSException *)exception { - return [self.task trySetException:exception]; -} - -- (BOOL)trySetCancelled { - return [self.task trySetCancelled]; -} - -@end - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/Bolts.h b/StarterProject/Pods/Bolts/Bolts/Common/Bolts.h deleted file mode 100644 index 907e4a2..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/Bolts.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import -#import -#import -#import -#import -#import -#import - -#if __has_include() && TARGET_OS_IPHONE && !TARGET_OS_WATCH && !TARGET_OS_TV -#import -#import -#import -#import -#import -#import -#import -#import -#import -#endif - - -NS_ASSUME_NONNULL_BEGIN - -/** - A string containing the version of the Bolts Framework used by the current application. - */ -extern NSString *const BoltsFrameworkVersionString; - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/Bolts/Common/Bolts.m b/StarterProject/Pods/Bolts/Bolts/Common/Bolts.m deleted file mode 100644 index 54a88ac..0000000 --- a/StarterProject/Pods/Bolts/Bolts/Common/Bolts.m +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2014, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - */ - -#import "Bolts.h" - -NS_ASSUME_NONNULL_BEGIN - -NSString *const BoltsFrameworkVersionString = @"1.8.4"; - -NS_ASSUME_NONNULL_END diff --git a/StarterProject/Pods/Bolts/README.md b/StarterProject/Pods/Bolts/README.md deleted file mode 100644 index 5e972c8..0000000 --- a/StarterProject/Pods/Bolts/README.md +++ /dev/null @@ -1,683 +0,0 @@ -Bolts -============ -[![Build Status](https://img.shields.io/travis/BoltsFramework/Bolts-ObjC/master.svg?style=flat)](https://travis-ci.org/BoltsFramework/Bolts-ObjC) -[![Coverage Status](https://codecov.io/github/BoltsFramework/Bolts-ObjC/coverage.svg?branch=master)](https://codecov.io/github/BoltsFramework/Bolts-ObjC?branch=master) -[![Pod Platform](https://img.shields.io/cocoapods/p/Bolts.svg?style=flat)](https://cocoapods.org/pods/Bolts) -[![Pod License](https://img.shields.io/cocoapods/l/Bolts.svg?style=flat)](https://github.com/BoltsFramework/Bolts-ObjC/blob/master/LICENSE) -[![Reference Status](https://www.versioneye.com/objective-c/bolts/reference_badge.svg?style=flat)](https://www.versioneye.com/objective-c/bolts/references) - -[![Pod Version](https://img.shields.io/cocoapods/v/Bolts.svg?style=flat)](https://cocoapods.org/pods/Bolts) -[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage) - -Bolts is a collection of low-level libraries designed to make developing mobile -apps easier. Bolts was designed by Parse and Facebook for our own internal use, -and we have decided to open source these libraries to make them available to -others. Using these libraries does not require using any Parse services. Nor -do they require having a Parse or Facebook developer account. - -Bolts includes: - -* "Tasks", which make organization of complex asynchronous code more manageable. A task is kind of like a JavaScript Promise, but available for iOS and Android. -* An implementation of the [App Links protocol](http://applinks.org/), helping you link to content in other apps and handle incoming deep-links. - -For more information, see the [Bolts iOS API Reference](http://boltsframework.github.io/docs/ios/). - -# Tasks - -To build a truly responsive iOS application, you must keep long-running operations off of the UI thread, and be careful to avoid blocking anything the UI thread might be waiting on. This means you will need to execute various operations in the background. To make this easier, we've added a class called `BFTask`. A task represents the result of an asynchronous operation. Typically, a `BFTask` is returned from an asynchronous function and gives the ability to continue processing the result of the task. When a task is returned from a function, it's already begun doing its job. A task is not tied to a particular threading model: it represents the work being done, not where it is executing. Tasks have many advantages over other methods of asynchronous programming, such as callbacks. `BFTask` is not a replacement for `NSOperation` or GCD. In fact, they play well together. But tasks do fill in some gaps that those technologies don't address. -* `BFTask` takes care of managing dependencies for you. Unlike using `NSOperation` for dependency management, you don't have to declare all dependencies before starting a `BFTask`. For example, imagine you need to save a set of objects and each one may or may not require saving child objects. With an `NSOperation`, you would normally have to create operations for each of the child saves ahead of time. But you don't always know before you start the work whether that's going to be necessary. That can make managing dependencies with `NSOperation` very painful. Even in the best case, you have to create your dependencies before the operations that depend on them, which results in code that appears in a different order than it executes. With `BFTask`, you can decide during your operation's work whether there will be subtasks and return the other task in just those cases. -* `BFTasks` release their dependencies. `NSOperation` strongly retains its dependencies, so if you have a queue of ordered operations and sequence them using dependencies, you have a leak, because every operation gets retained forever. `BFTasks` release their callbacks as soon as they are run, so everything cleans up after itself. This can reduce memory use, and simplify memory management. -* `BFTasks` keep track of the state of finished tasks: It tracks whether there was a returned value, the task was cancelled, or if an error occurred. It also has convenience methods for propagating errors. With `NSOperation`, you have to build all of this stuff yourself. -* `BFTasks` don't depend on any particular threading model. So it's easy to have some tasks perform their work with an operation queue, while others perform work using blocks with GCD. These tasks can depend on each other seamlessly. -* Performing several tasks in a row will not create nested "pyramid" code as you would get when using only callbacks. -* `BFTasks` are fully composable, allowing you to perform branching, parallelism, and complex error handling, without the spaghetti code of having many named callbacks. -* You can arrange task-based code in the order that it executes, rather than having to split your logic across scattered callback functions. - -For the examples in this doc, assume there are async versions of some common Parse methods, called `saveAsync:` and `findAsync:` which return a `Task`. In a later section, we'll show how to define these functions yourself. - -## The `continueWithBlock` Method - -Every `BFTask` has a method named `continueWithBlock:` which takes a continuation block. A continuation is a block that will be executed when the task is complete. You can then inspect the task to check if it was successful and to get its result. - -```objective-c -// Objective-C -[[self saveAsync:obj] continueWithBlock:^id(BFTask *task) { - if (task.isCancelled) { - // the save was cancelled. - } else if (task.error) { - // the save failed. - } else { - // the object was saved successfully. - PFObject *object = task.result; - } - return nil; -}]; -``` - -```swift -// Swift -self.saveAsync(obj).continueWithBlock { - (task: BFTask!) -> BFTask in - if task.isCancelled() { - // the save was cancelled. - } else if task.error != nil { - // the save failed. - } else { - // the object was saved successfully. - var object = task.result() as PFObject - } -} -``` - -BFTasks use Objective-C blocks, so the syntax should be pretty straightforward. Let's look closer at the types involved with an example. - -```objective-c -// Objective-C -/** - * Gets an NSString asynchronously. - */ -- (BFTask *)getStringAsync { - // Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. - return [[self getNumberAsync] continueWithBlock:^id(BFTask *task) { - // This continuation block takes the NSNumber BFTask as input, - // and provides an NSString as output. - - NSNumber *number = task.result; - return [NSString stringWithFormat:@"%@", number]; - )]; -} -``` - -```swift -// Swift -/** - * Gets an NSString asynchronously. - */ -func getStringAsync() -> BFTask { - //Let's suppose getNumberAsync returns a BFTask whose result is an NSNumber. - return self.getNumberAsync().continueWithBlock { - (task: BFTask!) -> NSString in - // This continuation block takes the NSNumber BFTask as input, - // and provides an NSString as output. - - let number = task.result() as NSNumber - return NSString(format:"%@", number) - } -} -``` - -In many cases, you only want to do more work if the previous task was successful, and propagate any errors or cancellations to be dealt with later. To do this, use the `continueWithSuccessBlock:` method instead of `continueWithBlock:`. - -```objective-c -// Objective-C -[[self saveAsync:obj] continueWithSuccessBlock:^id(BFTask *task) { - // the object was saved successfully. - return nil; -}]; -``` - -```swift -// Swift -self.saveAsync(obj).continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // the object was saved successfully. - return nil -} -``` - -## Chaining Tasks Together - -BFTasks are a little bit magical, in that they let you chain them without nesting. If you return a BFTask from `continueWithBlock:`, then the task returned by `continueWithBlock:` will not be considered finished until the new task returned from the new continuation block. This lets you perform multiple actions without incurring the pyramid code you would get with callbacks. Likewise, you can return a `BFTask` from `continueWithSuccessBlock:`. So, return a `BFTask` to do more asynchronous work. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Student"]; -[query orderByDescending:@"gpa"]; -[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *valedictorian = [students objectAtIndex:0]; - [valedictorian setObject:@YES forKey:@"valedictorian"]; - return [self saveAsync:valedictorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - PFObject *valedictorian = task.result; - return [self findAsync:query]; -}] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *salutatorian = [students objectAtIndex:1]; - [salutatorian setObject:@YES forKey:@"salutatorian"]; - return [self saveAsync:salutatorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Everything is done! - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Student") -query.orderByDescending("gpa") -findAsync(query).continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var valedictorian = students.objectAtIndex(0) as PFObject - valedictorian["valedictorian"] = true - return self.saveAsync(valedictorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - var valedictorian = task.result() as PFObject - return self.findAsync(query) -}.continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var salutatorian = students.objectAtIndex(1) as PFObject - salutatorian["salutatorian"] = true - return self.saveAsync(salutatorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // Everything is done! - return nil -} -``` - -## Error Handling - -By carefully choosing whether to call `continueWithBlock:` or `continueWithSuccessBlock:`, you can control how errors are propagated in your application. Using `continueWithBlock:` lets you handle errors by transforming them or dealing with them. You can think of failed tasks kind of like throwing an exception. In fact, if you throw an exception inside a continuation, the resulting task will be faulted with that exception. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Student"]; -[query orderByDescending:@"gpa"]; -[[[[[self findAsync:query] continueWithSuccessBlock:^id(BFTask *task) { - NSArray *students = task.result; - PFObject *valedictorian = [students objectAtIndex:0]; - [valedictorian setObject:@YES forKey:@"valedictorian"]; - // Force this callback to fail. - return [BFTask taskWithError:[NSError errorWithDomain:@"example.com" - code:-1 - userInfo:nil]]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Now this continuation will be skipped. - PFQuery *valedictorian = task.result; - return [self findAsync:query]; -}] continueWithBlock:^id(BFTask *task) { - if (task.error) { - // This error handler WILL be called. - // The error will be the NSError returned above. - // Let's handle the error by returning a new value. - // The task will be completed with nil as its value. - return nil; - } - // This will also be skipped. - NSArray *students = task.result; - PFObject *salutatorian = [students objectAtIndex:1]; - [salutatorian setObject:@YES forKey:@"salutatorian"]; - return [self saveAsync:salutatorian]; -}] continueWithSuccessBlock:^id(BFTask *task) { - // Everything is done! This gets called. - // The task's result is nil. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Student") -query.orderByDescending("gpa") -findAsync(query).continueWithSuccessBlock { - (task: BFTask!) -> BFTask in - let students = task.result() as NSArray - var valedictorian = students.objectAtIndex(0) as PFObject - valedictorian["valedictorian"] = true - //Force this callback to fail. - return BFTask(error:NSError(domain:"example.com", - code:-1, userInfo: nil)) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - //Now this continuation will be skipped. - var valedictorian = task.result() as PFObject - return self.findAsync(query) -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - if task.error != nil { - // This error handler WILL be called. - // The error will be the NSError returned above. - // Let's handle the error by returning a new value. - // The task will be completed with nil as its value. - return nil - } - // This will also be skipped. - let students = task.result() as NSArray - var salutatorian = students.objectAtIndex(1) as PFObject - salutatorian["salutatorian"] = true - return self.saveAsync(salutatorian) -}.continueWithSuccessBlock { - (task: BFTask!) -> AnyObject! in - // Everything is done! This gets called. - // The tasks result is nil. - return nil -} -``` - -It's often convenient to have a long chain of success callbacks with only one error handler at the end. - -## Creating Tasks - -When you're getting started, you can just use the tasks returned from methods like `findAsync:` or `saveAsync:`. However, for more advanced scenarios, you may want to make your own tasks. To do that, you create a `BFTaskCompletionSource`. This object will let you create a new `BFTask`, and control whether it gets marked as finished or cancelled. After you create a `BFTaskCompletionSource`, you'll need to call `setResult:`, `setError:`, or `cancel` to trigger its continuations. - -```objective-c -// Objective-C -- (BFTask *)successAsync { - BFTaskCompletionSource *successful = [BFTaskCompletionSource taskCompletionSource]; - [successful setResult:@"The good result."]; - return successful.task; -} - -- (BFTask *)failAsync { - BFTaskCompletionSource *failed = [BFTaskCompletionSource taskCompletionSource]; - [failed setError:[NSError errorWithDomain:@"example.com" code:-1 userInfo:nil]]; - return failed.task; -} -``` - -```swift -// Swift -func successAsync() -> BFTask { - var successful = BFTaskCompletionSource() - successful.setResult("The good result.") - return successful.task -} - -func failAsync() -> BFTask { - var failed = BFTaskCompletionSource() - failed.setError(NSError(domain:"example.com", code:-1, userInfo:nil)) - return failed.task -} -``` - -If you know the result of a task at the time it is created, there are some convenience methods you can use. - -```objective-c -// Objective-C -BFTask *successful = [BFTask taskWithResult:@"The good result."]; - -BFTask *failed = [BFTask taskWithError:anError]; -``` - -```swift -// Swift -let successful = BFTask(result:"The good result") - -let failed = BFTask(error:anError) -``` - -## Creating Async Methods - -With these tools, it's easy to make your own asynchronous functions that return tasks. For example, you can make a task-based version of `fetchAsync:` easily. - -```objective-c -// Objective-C -- (BFTask *) fetchAsync:(PFObject *)object { - BFTaskCompletionSource *task = [BFTaskCompletionSource taskCompletionSource]; - [object fetchInBackgroundWithBlock:^(PFObject *object, NSError *error) { - if (!error) { - [task setResult:object]; - } else { - [task setError:error]; - } - }]; - return task.task; -} -``` - -```swift -// Swift -func fetchAsync(object: PFObject) -> BFTask { - var task = BFTaskCompletionSource() - object.fetchInBackgroundWithBlock { - (object: PFObject?, error: NSError?) -> Void in - if error == nil { - task.setResult(object) - } else { - task.setError(error) - } - } - return task.task -} - -``` - -It's similarly easy to create `saveAsync:`, `findAsync:` or `deleteAsync:`. - -## Tasks in Series - -`BFTasks` are convenient when you want to do a series of tasks in a row, each one waiting for the previous to finish. For example, imagine you want to delete all of the comments on your blog. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; -[query whereKey:@"post" equalTo:@123]; - -[[[self findAsync:query] continueWithBlock:^id(BFTask *task) { - NSArray *results = task.result; - - // Create a trivial completed task as a base case. - BFTask *task = [BFTask taskWithResult:nil]; - for (PFObject *result in results) { - // For each item, extend the task with a function to delete the item. - task = [task continueWithBlock:^id(BFTask *task) { - // Return a task that will be marked as completed when the delete is finished. - return [self deleteAsync:result]; - }]; - } - return task; -}] continueWithBlock:^id(BFTask *task) { - // Every comment was deleted. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Comments") -query.whereKey("post", equalTo:123) -findAsync(query).continueWithBlock { - (task: BFTask!) -> BFTask in - let results = task.result() as NSArray - - // Create a trivial completed task as a base case. - let task = BFTask(result:nil) - for result : PFObject in results { - // For each item, extend the task with a function to delete the item. - task = task.continueWithBlock { - (task: BFTask!) -> BFTask in - return self.deleteAsync(result) - } - } - return task -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - // Every comment was deleted. - return nil -} -``` - -## Tasks in Parallel - -You can also perform several tasks in parallel, using the `taskForCompletionOfAllTasks:` method. You can start multiple operations at once, and use `taskForCompletionOfAllTasks:` to create a new task that will be marked as completed when all of its input tasks are completed. The new task will be successful only if all of the passed-in tasks succeed. Performing operations in parallel will be faster than doing them serially, but may consume more system resources and bandwidth. - -```objective-c -// Objective-C -PFQuery *query = [PFQuery queryWithClassName:@"Comments"]; -[query whereKey:@"post" equalTo:@123]; - -[[[self findAsync:query] continueWithBlock:^id(BFTask *results) { - // Collect one task for each delete into an array. - NSMutableArray *tasks = [NSMutableArray array]; - for (PFObject *result in results) { - // Start this delete immediately and add its task to the list. - [tasks addObject:[self deleteAsync:result]]; - } - // Return a new task that will be marked as completed when all of the deletes are - // finished. - return [BFTask taskForCompletionOfAllTasks:tasks]; -}] continueWithBlock:^id(BFTask *task) { - // Every comment was deleted. - return nil; -}]; -``` - -```swift -// Swift -var query = PFQuery(className:"Comments") -query.whereKey("post", equalTo:123) - -findAsync(query).continueWithBlock { - (task: BFTask!) -> BFTask in - // Collect one task for each delete into an array. - var tasks = NSMutableArray.array() - var results = task.result() as NSArray - for result : PFObject! in results { - // Start this delete immediately and add its task to the list. - tasks.addObject(self.deleteAsync(result)) - } - // Return a new task that will be marked as completed when all of the deletes - // are finished. - return BFTask(forCompletionOfAllTasks:tasks) -}.continueWithBlock { - (task: BFTask!) -> AnyObject! in - // Every comment was deleted. - return nil -} -``` - -## Task Executors - -Both `continueWithBlock:` and `continueWithSuccessBlock:` methods have another form that takes an instance of `BFExecutor`. These are `continueWithExecutor:withBlock:` and `continueWithExecutor:withSuccessBlock:`. These methods allow you to control how the continuation is executed. The default executor will dispatch to GCD, but you can provide your own executor to schedule work onto a different thread. For example, if you want to continue with work on the UI thread: - -```objective-c -// Create a BFExecutor that uses the main thread. -BFExecutor *myExecutor = [BFExecutor executorWithBlock:^void(void(^block)()) { - dispatch_async(dispatch_get_main_queue(), block); -}]; - -// And use the Main Thread Executor like this. The executor applies only to the new -// continuation being passed into continueWithBlock. -[[self fetchAsync:object] continueWithExecutor:myExecutor withBlock:^id(BFTask *task) { - myTextView.text = [object objectForKey:@"name"]; -}]; -``` - -For common cases, such as dispatching on the main thread, we have provided default implementations of `BFExecutor`. These include `defaultExecutor`, `immediateExecutor`, `mainThreadExecutor`, `executorWithDispatchQueue:`, and `executorWithOperationQueue:`. For example: - -```objective-c -// Continue on the Main Thread, using a built-in executor. -[[self fetchAsync:object] continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) { - myTextView.text = [object objectForKey:@"name"]; -}]; -``` - -## Task Cancellation - -It's generally bad design to keep track of the `BFTaskCompletionSource` for cancellation. A better model is to create a "cancellation token" at the top level, and pass that to each async function that you want to be part of the same "cancelable operation". Then, in your continuation blocks, you can check whether the cancellation token has been cancelled and bail out early by returning a `[BFTask cancelledTask]`. For example: - -```objective-c -- (void)doSomethingComplicatedAsync:(MYCancellationToken *)cancellationToken { - [[self doSomethingAsync:cancellationToken] continueWithBlock:^{ - if (cancellationToken.isCancelled) { - return [BFTask cancelledTask]; - } - // Do something that takes a while. - return result; - }]; -} - -// Somewhere else. -MYCancellationToken *cancellationToken = [[MYCancellationToken alloc] init]; -[obj doSomethingComplicatedAsync:cancellationToken]; - -// When you get bored... -[cancellationToken cancel]; -``` - -**Note:** The cancellation token implementation should be thread-safe. -We are likely to add some concept like this to Bolts at some point in the future. - -# App Links - -[App Links](http://applinks.org/) provide a cross-platform mechanism that allows a developer to define and publish a deep-linking scheme for their content, allowing other apps to link directly to an experience optimized for the device they are running on. Whether you are building an app that receives incoming links or one that may link out to other apps' content, Bolts provides tools to simplify implementation of the [App Links protocol](http://applinks.org/documentation). - -## Handling an App Link - -The most common case will be making your app receive App Links. In-linking will allow your users to quickly access the richest, most native-feeling presentation of linked content on their devices. Bolts makes it easy to handle an inbound App Link (as well as general inbound deep-links) by providing utilities for processing an incoming URL. - -For example, you can use the `BFURL` utility class to parse an incoming URL in your `AppDelegate`: - -```objective-c -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation { - BFURL *parsedUrl = [BFURL URLWithInboundURL:url sourceApplication:sourceApplication]; - - // Use the target URL from the App Link to locate content. - if ([parsedUrl.targetURL.pathComponents[1] isEqualToString:@"profiles"]) { - // Open a profile viewer. - } - - // You can also check the query string easily. - NSString *query = parsedUrl.targetQueryParameters[@"query"]; - - // Apps that have existing deep-linking support and map their App Links to existing - // deep-linking functionality may instead want to perform these operations on the input URL. - // Use the target URL from the App Link to locate content. - if ([parsedUrl.inputURL.pathComponents[1] isEqualToString:@"profiles"]) { - // Open a profile viewer. - } - - // You can also check the query string easily. - NSString *query = parsedUrl.inputQueryParameters[@"query"]; - - // Apps can easily check the Extras and App Link data from the App Link as well. - NSString *fbAccessToken = parsedUrl.appLinkExtras[@"fb_access_token"]; - NSDictionary *refererData = parsedUrl.appLinkExtras[@"referer"]; -} -``` - -## Navigating to a URL - -Following an App Link allows your app to provide the best user experience (as defined by the receiving app) when a user navigates to a link. Bolts makes this process simple, automating the steps required to follow a link: - -1. Resolve the App Link by getting the App Link metadata from the HTML at the URL specified. -2. Step through App Link targets relevant to the device being used, checking whether the app that can handle the target is present on the device. -3. If an app is present, build a URL with the appropriate al_applink_data specified and navigate to that URL. -4. Otherwise, open the browser with the original URL specified. - -In the simplest case, it takes just one line of code to navigate to a URL that may have an App Link: - -```objective-c -[BFAppLinkNavigation navigateToURLInBackground:url]; -``` - -### Adding App and Navigation Data - -Under most circumstances, the data that will need to be passed along to an app during a navigation will be contained in the URL itself, so that whether or not the app is actually installed on the device, users are taken to the correct content. Occasionally, however, apps will want to pass along data that is relevant for app-to-app navigation, or will want to augment the App Link protocol with information that might be used by the app to adjust how the app should behave (e.g. showing a link back to the referring app). - -If you want to take advantage of these features, you can break apart the navigation process. First, you must have an App Link to which you wish to navigate: - -```objective-c -[[BFAppLinkNavigation resolveAppLinkInBackground:url] continueWithSuccessBlock:^id(BFTask *task) { - BFAppLink *link = task.result; -}]; -``` - -Then, you can build an App Link request with any additional data you would like and navigate: - -```objective-c -BFAppLinkNavigation *navigation = [BFAppLinkNavigation navigationWithAppLink:link - extras:@{ @"access_token": @"t0kEn" } - appLinkData:@{ @"ref": @"12345" }]; -NSError *error = nil; -[navigation navigate:&error]; -``` - -### Resolving App Link Metadata - -Bolts allows for custom App Link resolution, which may be used as a performance optimization (e.g. caching the metadata) or as a mechanism to allow developers to use a centralized index for obtaining App Link metadata. A custom App Link resolver just needs to be able to take a URL and return a `BFAppLink` containing the ordered list of `BFAppLinkTarget`s that are applicable for this device. Bolts provides one of these out of the box that performs this resolution on the device using a hidden UIWebView. - -You can use any resolver that implements the `BFAppLinkResolving` protocol by using one of the overloads on `BFAppLinkNavigation`: - -```objective-c -[BFAppLinkNavigation navigateToURLInBackground:url - resolver:resolver]; -``` - -Alternatively, a you can swap out the default resolver to be used by the built-in APIs: - -```objective-c -[BFAppLinkNavigation setDefaultResolver:resolver]; -[BFAppLinkNavigation navigateToURLInBackground:url]; -``` - -## App Link Return-to-Referer View - -When an application is opened via an App Link, a banner allowing the user to "Touch to return to " should be displayed. The `BFAppLinkReturnToRefererView` provides this functionality. It will take an incoming App Link and parse the referer information to display the appropriate calling app name. - -```objective-c -- (void)viewDidLoad { - [super viewDidLoad]; - - // Perform other view initialization. - - self.returnToRefererController = [[BFAppLinkReturnToRefererController alloc] init]; - - // self.returnToRefererView is a BFAppLinkReturnToRefererView. - // You may initialize the view either by loading it from a NIB or programmatically. - self.returnToRefererController.view = self.returnToRefererView; - - // If you have a UINavigationController in the view, then the bar must be shown above it. - [self.returnToRefererController] -} -``` - -The following code assumes that the view controller has an `openedAppLinkURL` `NSURL` property that has already been populated with the URL used to open the app. You can then do something like this to show the view: - -```objective-c -- (void)viewWillAppear { - [super viewWillAppear]; - - // Show only if you have a back AppLink. - [self.returnToRefererController showViewForRefererURL:self.openedAppLinkURL]; -} -``` - -In a navigation-controller view hierarchy, the banner should be displayed above the navigation bar, and `BFAppLinkReturnToRefererController` provides an `initForDisplayAboveNavController` method to assist with this. - -## Analytics - -Bolts introduces Measurement Event. App Links posts three different Measurement Event notifications to the application, which can be caught and integrated with existing analytics components in your application. - -* `al_nav_out` — Raised when your app switches out to an App Links URL. -* `al_nav_in` — Raised when your app opens an incoming App Links URL. -* `al_ref_back_out` — Raised when your app returns back the referrer app using the built-in top navigation back bar view. - -### Listen for App Links Measurement Events - -There are other analytics tools that are integrated with Bolts' App Links events, but you can also listen for these events yourself: - -```objective-c -[[NSNotificationCenter defaultCenter] addObserverForName:BFMeasurementEventNotificationName object:nil queue:nil usingBlock:^(NSNotification *note) { - NSDictionary *event = note.userInfo; - NSDictionary *eventData = event[BFMeasurementEventArgsKey]; - // Integrate to your logging/analytics component. -}]; -``` - -### App Links Event Fields - -App Links Measurement Events sends additional information from App Links Intents in flattened string key value pairs. Here are some of the useful fields for the three events. - -* `al_nav_in` - * `inputURL`: the URL that opens the app. - * `inputURLScheme`: the scheme of `inputURL`. - * `refererURL`: the URL that the referrer app added into `al_applink_data`: `referer_app_link`. - * `refererAppName`: the app name that the referrer app added to `al_applink_data`: `referer_app_link`. - * `sourceApplication`: the bundle of referrer application. - * `targetURL`: the `target_url` field in `al_applink_data`. - * `version`: App Links API version. - -* `al_nav_out` / `al_ref_back_out` - * `outputURL`: the URL used to open the other app (or browser). If there is an eligible app to open, this will be the custom scheme url/intent in `al_applink_data`. - * `outputURLScheme`: the scheme of `outputURL`. - * `sourceURL`: the URL of the page hosting App Links meta tags. - * `sourceURLHost`: the hostname of `sourceURL`. - * `success`: `“1”` to indicate success in opening the App Link in another app or browser; `“0”` to indicate failure to open the App Link. - * `type`: `“app”` for open in app, `“web”` for open in browser; `“fail”` when the success field is `“0”`. - * `version`: App Links API version. - -# Installation - -You can download the latest framework files from our [Releases page](https://github.com/BoltsFramework/Bolts-ObjC/releases). - -Bolts is also available through [CocoaPods](https://cocoapods.org/). To install it simply add the following line to your Podfile: - - pod 'Bolts' diff --git a/StarterProject/Pods/FastCoding/FastCoder/FastCoder.h b/StarterProject/Pods/FastCoding/FastCoder/FastCoder.h deleted file mode 100644 index 7a860dc..0000000 --- a/StarterProject/Pods/FastCoding/FastCoder/FastCoder.h +++ /dev/null @@ -1,56 +0,0 @@ -// -// FastCoding.h -// -// Version 3.2.2 -// -// Created by Nick Lockwood on 09/12/2013. -// Copyright (c) 2013 Charcoal Design -// -// Distributed under the permissive zlib License -// Get the latest version from here: -// -// https://github.com/nicklockwood/FastCoding -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// - - -#import - - -extern NSString *const FastCodingException; - - -@interface NSObject (FastCoding) - -+ (NSArray *)fastCodingKeys; -- (id)awakeAfterFastCoding; -- (Class)classForFastCoding; -- (BOOL)preferFastCoding; - -@end - - -@interface FastCoder : NSObject - -+ (id)objectWithData:(NSData *)data; -+ (id)propertyListWithData:(NSData *)data; -+ (NSData *)dataWithRootObject:(id)object; - -@end diff --git a/StarterProject/Pods/FastCoding/FastCoder/FastCoder.m b/StarterProject/Pods/FastCoding/FastCoder/FastCoder.m deleted file mode 100755 index 02508ac..0000000 --- a/StarterProject/Pods/FastCoding/FastCoder/FastCoder.m +++ /dev/null @@ -1,2571 +0,0 @@ -// -// FastCoding.m -// -// Version 3.2.2 -// -// Created by Nick Lockwood on 09/12/2013. -// Copyright (c) 2013 Charcoal Design -// -// Distributed under the permissive zlib License -// Get the latest version from here: -// -// https://github.com/nicklockwood/FastCoding -// -// This software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// -// 3. This notice may not be removed or altered from any source distribution. -// - -#import "FastCoder.h" -#import -#import - - -#ifndef FC_DIAGNOSTIC_ENABLED -#define FC_DIAGNOSTIC_ENABLED 0 -#endif - - -#import -#if __has_feature(objc_arc) -#pragma clang diagnostic ignored "-Wpedantic" -#warning FastCoding runs slower under ARC. It is recommended that you disable it for this file -#endif - - -#pragma clang diagnostic ignored "-Wgnu" -#pragma clang diagnostic ignored "-Wpointer-arith" -#pragma clang diagnostic ignored "-Wmissing-prototypes" -#pragma clang diagnostic ignored "-Wfour-char-constants" -#pragma clang diagnostic ignored "-Wobjc-missing-property-synthesis" -#pragma clang diagnostic ignored "-Wdirect-ivar-access" -#pragma clang diagnostic ignored "-Wcast-qual" - - -NSString *const FastCodingException = @"FastCodingException"; - - -static const uint32_t FCIdentifier = 'FAST'; -static const uint16_t FCMajorVersion = 3; -static const uint16_t FCMinorVersion = 2; - - -typedef struct -{ - uint32_t identifier; - uint16_t majorVersion; - uint16_t minorVersion; -} -FCHeader; - - -typedef NS_ENUM(uint8_t, FCType) -{ - FCTypeNil = 0, - FCTypeNull, - FCTypeObjectAlias8, - FCTypeObjectAlias16, - FCTypeObjectAlias32, - FCTypeStringAlias8, - FCTypeStringAlias16, - FCTypeStringAlias32, - FCTypeString, - FCTypeDictionary, - FCTypeArray, - FCTypeSet, - FCTypeOrderedSet, - FCTypeTrue, - FCTypeFalse, - FCTypeInt8, - FCTypeInt16, - FCTypeInt32, - FCTypeInt64, - FCTypeFloat32, - FCTypeFloat64, - FCTypeData, - FCTypeDate, - FCTypeMutableString, - FCTypeMutableDictionary, - FCTypeMutableArray, - FCTypeMutableSet, - FCTypeMutableOrderedSet, - FCTypeMutableData, - FCTypeClassDefinition, - FCTypeObject8, - FCTypeObject16, - FCTypeObject32, - FCTypeURL, - FCTypePoint, - FCTypeSize, - FCTypeRect, - FCTypeRange, - FCTypeVector, - FCTypeAffineTransform, - FCType3DTransform, - FCTypeMutableIndexSet, - FCTypeIndexSet, - FCTypeNSCodedObject, - FCTypeDecimalNumber, - FCTypeOne, - FCTypeZero, - - FCTypeCount // sentinel value -}; - - -#if !__has_feature(objc_arc) -#define FC_AUTORELEASE(x) [(x) autorelease] -#else -#define FC_AUTORELEASE(x) (x) -#endif - - -#import -#if TARGET_OS_IPHONE -#define OR_IF_MAC(x) -#else -#define OR_IF_MAC(x) || (x) -#endif - - -#define FC_ASSERT_FITS(length, offset, total) { if ((NSUInteger)((offset) + (length)) > (total)) \ -[NSException raise:FastCodingException format:@"Unexpected EOF when parsing object starting at %i", (int32_t)(offset)]; } - -#define FC_READ_VALUE(type, offset, input, total) type value; { \ -FC_ASSERT_FITS (sizeof(type), offset, total); \ -value = *(type *)(input + offset); \ -offset += sizeof(value); } - -#define FC_ALIGN_INPUT(type, offset) { \ -unsigned long align = offset % sizeof(type); \ -if (align) offset += sizeof(type) - align; } - -#define FC_ALIGN_OUTPUT(type, output) { \ -unsigned long align = [output length] % sizeof(type); \ -if (align) [output increaseLengthBy:sizeof(type) - align]; } - - -@interface FCNSCoder : NSCoder - -@end - - -@interface FCNSCoder () -{ - -@public - __unsafe_unretained id _rootObject; - __unsafe_unretained NSMutableData *_output; - __unsafe_unretained NSMutableDictionary *_objectCache; - __unsafe_unretained NSMutableDictionary *_classCache; - __unsafe_unretained NSMutableDictionary *_stringCache; - __unsafe_unretained NSMutableDictionary *_classesByName; -} - -@end - - -@interface FCNSDecoder : NSCoder - -@end - - -typedef id FCTypeConstructor(FCNSDecoder *); - - -@interface FCNSDecoder () -{ - -@public - NSUInteger *_offset; - const void *_input; - NSUInteger _total; - FCTypeConstructor **_constructors; - __unsafe_unretained NSData *_objectCache; - __unsafe_unretained NSData *_classCache; - __unsafe_unretained NSData *_stringCache; - __unsafe_unretained NSMutableArray *_propertyDictionaryPool; - __unsafe_unretained NSMutableDictionary *_properties; -} - -@end - - -@interface FCClassDefinition : NSObject - -@end - - -@interface FCClassDefinition () -{ - -@public - __unsafe_unretained NSString *_className; - __unsafe_unretained NSArray *_propertyKeys; -} - -@end - - -@interface NSObject (FastCoding_Private) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder; - -@end - - -static Boolean FCEqualityCallback(const void *value1, const void *value2) -{ - return (Boolean)[(id)value1 isEqual:(id)value2]; -} - -static CFHashCode FCHashCallback(const void *value) -{ - return [(id)value hash]; -} - -static inline NSUInteger FCCacheParsedObject(__unsafe_unretained id object, __unsafe_unretained NSData *cache) -{ - NSUInteger offset = (NSUInteger)CFDataGetLength((CFMutableDataRef)cache); - -#if FC_DIAGNOSTIC_ENABLED - - if (![@[[NSURL class], [NSString class]] containsObject:[object classForCoder]]) { - printf("%tu: %s\n", offset / sizeof(id), [[[object classForCoder] description] UTF8String]); - } - -#endif - - CFDataAppendBytes((CFMutableDataRef)cache, (void *)&object, sizeof(id)); - return offset; -} - -static inline void FCReplaceCachedObject(NSUInteger offset, __unsafe_unretained id object, __unsafe_unretained NSData *cache) -{ - CFDataReplaceBytes((CFMutableDataRef)cache, CFRangeMake((CFIndex)offset, sizeof(id)), (void *)&object, sizeof(id)); -} - -static inline id FCCachedObjectAtIndex(NSUInteger index, __unsafe_unretained NSData *cache) -{ - NSUInteger count = (NSUInteger)CFDataGetLength((CFMutableDataRef)cache) / (NSUInteger)sizeof(id); - if (index >= count) - { - [NSException raise:FastCodingException format:@"Attempted to read cache object at index %tu, but cache object count is %tu", index, count]; - return [NSNull null]; - } - return ((__unsafe_unretained id *)(void *)CFDataGetBytePtr((CFMutableDataRef)cache))[index]; -} - - -static id FCReadObject(__unsafe_unretained FCNSDecoder *decoder); -static id FCReadObject_2_3(__unsafe_unretained FCNSDecoder *decoder); - -static inline uint8_t FCReadType(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint8_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline uint8_t FCReadRawUInt8(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint8_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline uint16_t FCReadRawUInt16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint16_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline uint32_t FCReadRawUInt32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint32_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline double FCReadRawDouble(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(Float64, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static id FCReadRawString(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSString *string = nil; - NSUInteger length = strlen(decoder->_input + *decoder->_offset) + 1; - FC_ASSERT_FITS(length, *decoder->_offset, decoder->_total); - if (length > 1) - { - string = CFBridgingRelease(CFStringCreateWithBytes(NULL, decoder->_input + *decoder->_offset, - (CFIndex)length - 1, kCFStringEncodingUTF8, false)); - } - else - { - string = @""; - } - *decoder->_offset += length; - return string; -} - -static id FCReadNil(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return nil; -} - -static id FCReadNull(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return [NSNull null]; -} - -static id FCReadAlias8(__unsafe_unretained FCNSDecoder *decoder) -{ - return FCCachedObjectAtIndex(FCReadRawUInt8(decoder), decoder->_objectCache); -} - -static id FCReadAlias16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint16_t, *decoder->_offset); - return FCCachedObjectAtIndex(FCReadRawUInt16(decoder), decoder->_objectCache); -} - -static id FCReadAlias32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - return FCCachedObjectAtIndex(FCReadRawUInt32(decoder), decoder->_objectCache); -} - -static id FCReadStringAlias8(__unsafe_unretained FCNSDecoder *decoder) -{ - return FCCachedObjectAtIndex(FCReadRawUInt8(decoder), decoder->_stringCache); -} - -static id FCReadStringAlias16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint16_t, *decoder->_offset); - return FCCachedObjectAtIndex(FCReadRawUInt16(decoder), decoder->_stringCache); -} - -static id FCReadStringAlias32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - return FCCachedObjectAtIndex(FCReadRawUInt32(decoder), decoder->_stringCache); -} - -static id FCReadString(__unsafe_unretained FCNSDecoder *decoder) -{ - NSString *string = FCReadRawString(decoder); - FCCacheParsedObject(string, decoder->_stringCache); - return string; -} - -static id FCReadMutableString(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSMutableString *string = nil; - NSUInteger length = strlen(decoder->_input + *decoder->_offset) + 1; - FC_ASSERT_FITS(length, *decoder->_offset, decoder->_total); - if (length > 1) - { - string = FC_AUTORELEASE([[NSMutableString alloc] initWithBytes:decoder->_input + *decoder->_offset length:length - 1 encoding:NSUTF8StringEncoding]); - } - else - { - string = [NSMutableString string]; - } - *decoder->_offset += length; - FCCacheParsedObject(string, decoder->_objectCache); - return string; -} - -static id FCReadDictionary(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSDictionary *dict = nil; - if (count) - { - __autoreleasing id *keys = (__autoreleasing id *)malloc(count * sizeof(id)); - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject(decoder); - keys[i] = FCReadObject(decoder); - } - - dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count]; - free(objects); - free(keys); - } - else - { - dict = @{}; - } - FCCacheParsedObject(dict, decoder->_objectCache); - return dict; -} - -static id FCReadMutableDictionary(__unsafe_unretained FCNSDecoder *decoder) -{ - const CFDictionaryKeyCallBacks keyCallbacks = - { - kCFTypeDictionaryKeyCallBacks.version, - kCFTypeDictionaryKeyCallBacks.retain, - kCFTypeDictionaryKeyCallBacks.release, - kCFTypeDictionaryKeyCallBacks.copyDescription, - &FCEqualityCallback, - &FCHashCallback - }; - - const CFDictionaryValueCallBacks valueCallbacks = - { - kCFTypeDictionaryKeyCallBacks.version, - kCFTypeDictionaryKeyCallBacks.retain, - kCFTypeDictionaryKeyCallBacks.release, - kCFTypeDictionaryKeyCallBacks.copyDescription, - &FCEqualityCallback, - }; - - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSMutableDictionary *dict = CFBridgingRelease(CFDictionaryCreateMutable(NULL, (CFIndex)count, &keyCallbacks, &valueCallbacks)); - FCCacheParsedObject(dict, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - __autoreleasing id object = FCReadObject(decoder); - __autoreleasing id key = FCReadObject(decoder); - CFDictionarySetValue((CFMutableDictionaryRef)dict, (const void *)key, (const void *)object); - } - return dict; -} - -static id FCReadArray(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSArray *array = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject(decoder); - } - array = [NSArray arrayWithObjects:objects count:count]; - free(objects); - } - else - { - array = @[]; - } - FCCacheParsedObject(array, decoder->_objectCache); - return array; -} - -static id FCReadMutableArray(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSMutableArray *array = [NSMutableArray arrayWithCapacity:count]; - FCCacheParsedObject(array, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - CFArrayAppendValue((CFMutableArrayRef)array, (void *)FCReadObject(decoder)); - } - return array; -} - -static id FCReadSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSSet *set = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject(decoder); - } - set = [NSSet setWithObjects:objects count:count]; - free(objects); - } - else - { - set = [NSSet set]; - } - FCCacheParsedObject(set, decoder->_objectCache); - return set; -} - -static id FCReadMutableSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSMutableSet *set = [NSMutableSet setWithCapacity:count]; - FCCacheParsedObject(set, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - [set addObject:FCReadObject(decoder)]; - } - return set; -} - -static id FCReadOrderedSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSOrderedSet *set = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject(decoder); - } - set = [NSOrderedSet orderedSetWithObjects:objects count:count]; - free(objects); - } - else - { - set = [NSOrderedSet orderedSet]; - } - FCCacheParsedObject(set, decoder->_objectCache); - return set; -} - -static id FCReadMutableOrderedSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - __autoreleasing NSMutableOrderedSet *set = [NSMutableOrderedSet orderedSetWithCapacity:count]; - FCCacheParsedObject(set, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - [set addObject:FCReadObject(decoder)]; - } - return set; -} - -static id FCReadTrue(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @YES; -} - -static id FCReadFalse(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @NO; -} - -static id FCReadOne(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @1; -} - -static id FCReadZero(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @0; -} - -static id FCReadInt8(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(int8_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadInt16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(int16_t, *decoder->_offset); - FC_READ_VALUE(int16_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadInt32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(int32_t, *decoder->_offset); - FC_READ_VALUE(int32_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadInt64(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(int64_t, *decoder->_offset); - FC_READ_VALUE(int64_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadFloat32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float32, *decoder->_offset); - FC_READ_VALUE(Float32, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadFloat64(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - FC_READ_VALUE(Float64, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - return number; -} - -static id FCReadData(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t length = FCReadRawUInt32(decoder); - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - __autoreleasing NSData *data = [NSData dataWithBytes:(decoder->_input + *decoder->_offset) length:length]; - *decoder->_offset += paddedLength; - FCCacheParsedObject(data, decoder->_objectCache); - return data; -} - -static id FCReadMutableData(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t length = FCReadRawUInt32(decoder); - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - __autoreleasing NSMutableData *data = [NSMutableData dataWithBytes:(decoder->_input + *decoder->_offset) length:length]; - *decoder->_offset += paddedLength; - FCCacheParsedObject(data, decoder->_objectCache); - return data; -} - -static id FCReadDate(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(NSTimeInterval, *decoder->_offset); - FC_READ_VALUE(NSTimeInterval, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSDate *date = [NSDate dateWithTimeIntervalSince1970:value]; - FCCacheParsedObject(date, decoder->_objectCache); - return date; -} - -static id FCReadClassDefinition(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing FCClassDefinition *definition = FC_AUTORELEASE([[FCClassDefinition alloc] init]); - FCCacheParsedObject(definition, decoder->_classCache); - definition->_className = FCReadRawString(decoder); - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t count = FCReadRawUInt32(decoder); - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadRawString(decoder); - } - __autoreleasing NSArray *propertyKeys = [NSArray arrayWithObjects:objects count:count]; - definition->_propertyKeys = propertyKeys; - free(objects); - } - - //now return the actual object instance - return FCReadObject(decoder); -} - -static id FCReadObjectInstance(__unsafe_unretained FCNSDecoder *decoder, NSUInteger classIndex) -{ - __autoreleasing FCClassDefinition *definition = FCCachedObjectAtIndex(classIndex, decoder->_classCache); - __autoreleasing Class objectClass = NSClassFromString(definition->_className); - __autoreleasing id object = nil; - if (objectClass) - { - object = FC_AUTORELEASE([[objectClass alloc] init]); - } - else if (definition->_className) - { - object = [NSMutableDictionary dictionaryWithObject:definition->_className forKey:@"$class"]; - } - else if (object) - { - object = [NSMutableDictionary dictionary]; - } - NSUInteger cacheIndex = FCCacheParsedObject(object, decoder->_objectCache); - for (__unsafe_unretained NSString *key in definition->_propertyKeys) - { - [object setValue:FCReadObject(decoder) forKey:key]; - } - id newObject = [object awakeAfterFastCoding]; - if (newObject != object) - { - //TODO: this is only a partial solution, as any objects that referenced - //this object between when it was created and now will have received incorrect instance - FCReplaceCachedObject(cacheIndex, newObject, decoder->_objectCache); - } - return newObject; -} - -static id FCReadObject8(__unsafe_unretained FCNSDecoder *decoder) -{ - return FCReadObjectInstance(decoder, FCReadRawUInt8(decoder)); -} - -static id FCReadObject16(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint16_t, *decoder->_offset); - return FCReadObjectInstance(decoder, FCReadRawUInt16(decoder)); -} - -static id FCReadObject32(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - return FCReadObjectInstance(decoder, FCReadRawUInt32(decoder)); -} - -static id FCReadURL(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSURL *URL = [NSURL URLWithString:FCReadObject(decoder) relativeToURL:FCReadObject(decoder)]; - FCCacheParsedObject(URL, decoder->_stringCache); - return URL; -} - -static id FCReadPoint(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGPoint point = {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)}; - NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(CGPoint)]; - return value; -} - -static id FCReadSize(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGSize size = {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)}; - NSValue *value = [NSValue valueWithBytes:&size objCType:@encode(CGSize)]; - return value; -} - -static id FCReadRect(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGRect rect = - { - {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)}, - {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)} - }; - NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)]; - return value; -} - -static id FCReadRange(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - NSRange range = {FCReadRawUInt32(decoder), FCReadRawUInt32(decoder)}; - NSValue *value = [NSValue valueWithBytes:&range objCType:@encode(NSRange)]; - return value; -} - -static id FCReadVector(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGVector point = {(CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder)}; - NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(CGVector)]; - return value; -} - -static id FCReadAffineTransform(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGAffineTransform transform = - { - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder) - }; - NSValue *value = [NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)]; - return value; -} - -static id FCRead3DTransform(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(Float64, *decoder->_offset); - CGFloat transform[] = - { - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder), - (CGFloat)FCReadRawDouble(decoder), (CGFloat)FCReadRawDouble(decoder) - }; - NSValue *value = [NSValue valueWithBytes:&transform objCType:@encode(CGFloat[16])]; - return value; -} - -static id FCReadMutableIndexSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t rangeCount = FCReadRawUInt32(decoder); - __autoreleasing NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; - FCCacheParsedObject(indexSet, decoder->_objectCache); - for (uint32_t i = 0; i < rangeCount; i++) - { - NSRange range = {FCReadRawUInt32(decoder), FCReadRawUInt32(decoder)}; - [indexSet addIndexesInRange:range]; - } - return indexSet; -} - -static id FCReadIndexSet(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(uint32_t, *decoder->_offset); - uint32_t rangeCount = FCReadRawUInt32(decoder); - __autoreleasing NSIndexSet *indexSet; - if (rangeCount == 1) - { - //common case optimisation - NSRange range = {FCReadRawUInt32(decoder), FCReadRawUInt32(decoder)}; - indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; - } - else - { - indexSet = [NSMutableIndexSet indexSet]; - for (uint32_t i = 0; i < rangeCount; i++) - { - NSRange range = {FCReadRawUInt32(decoder), FCReadRawUInt32(decoder)}; - [(NSMutableIndexSet *)indexSet addIndexesInRange:range]; - } - indexSet = [indexSet copy]; - - } - FCCacheParsedObject(indexSet, decoder->_objectCache); - return indexSet; -} - -static id FCReadNSCodedObject(__unsafe_unretained FCNSDecoder *decoder) -{ - NSString *className = FCReadObject(decoder); - NSMutableDictionary *oldProperties = decoder->_properties; - if ([decoder->_propertyDictionaryPool count]) - { - decoder->_properties = [decoder->_propertyDictionaryPool lastObject]; - [decoder->_propertyDictionaryPool removeLastObject]; - [decoder->_properties removeAllObjects]; - } - else - { - const CFDictionaryKeyCallBacks stringKeyCallbacks = - { - 0, - NULL, - NULL, - NULL, - FCEqualityCallback, - FCHashCallback - }; - - __autoreleasing id properties = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, &stringKeyCallbacks, NULL)); - decoder->_properties = properties; - } - while (true) - { - id object = FCReadObject(decoder); - if (!object) break; - NSString *key = FCReadObject(decoder); - decoder->_properties[key] = object; - } - id object = FC_AUTORELEASE([[NSClassFromString(className) alloc] initWithCoder:decoder]); - [decoder->_propertyDictionaryPool addObject:decoder->_properties]; - decoder->_properties = oldProperties; - FCCacheParsedObject(object, decoder->_objectCache); - return object; -} - -static id FCReadDecimalNumber(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_ALIGN_INPUT(NSDecimal, *decoder->_offset); - FC_READ_VALUE(NSDecimal, *decoder->_offset, decoder->_input, decoder->_total); - return [NSDecimalNumber decimalNumberWithDecimal:value]; -} - -static id FCReadObject(__unsafe_unretained FCNSDecoder *decoder) -{ - FCType type = FCReadType(decoder); - FCTypeConstructor *constructor = NULL; - if (type < FCTypeCount) - { - constructor = decoder->_constructors[type]; - } - if (!constructor) - { - [NSException raise:FastCodingException format:@"FastCoding cannot decode object of type: %i", type]; - return nil; - } - return constructor(decoder); -} - -id FCParseData(NSData *data, FCTypeConstructor *constructors[]) -{ - NSUInteger length = [data length]; - if (length < sizeof(FCHeader)) - { - //not a valid FastArchive - return nil; - } - - //read header - FCHeader header; - const void *input = data.bytes; - memcpy(&header, input, sizeof(header)); - if (header.identifier != FCIdentifier) - { - //not a FastArchive - return nil; - } - if (header.majorVersion < 2 || header.majorVersion > FCMajorVersion) - { - //not compatible - NSLog(@"This version of the FastCoding library doesn't support FastCoding version %i.%i files", header.majorVersion, header.minorVersion); - return nil; - } - - //create decoder - NSUInteger offset = sizeof(header); - FCNSDecoder *decoder = FC_AUTORELEASE([[FCNSDecoder alloc] init]); - decoder->_constructors = constructors; - decoder->_input = input; - decoder->_offset = &offset; - decoder->_total = length; - - //read data - __autoreleasing NSMutableData *objectCache = [NSMutableData dataWithCapacity:FCReadRawUInt32(decoder) * sizeof(id)]; - decoder->_objectCache = objectCache; - if (header.majorVersion < 3) - { - return FCReadObject_2_3(decoder); - } - else - { - __autoreleasing NSMutableData *classCache = [NSMutableData dataWithCapacity:FCReadRawUInt32(decoder) * sizeof(id)]; - __autoreleasing NSMutableData *stringCache = [NSMutableData dataWithCapacity:FCReadRawUInt32(decoder) * sizeof(id)]; - __autoreleasing NSMutableArray *propertyDictionaryPool = CFBridgingRelease(CFArrayCreateMutable(NULL, 0, NULL)); - - decoder->_classCache = classCache; - decoder->_stringCache = stringCache; - decoder->_propertyDictionaryPool = propertyDictionaryPool; - -#if FC_DIAGNOSTIC_ENABLED - - printf("Input cache:\n"); - -#endif - - @try - { - return FCReadObject(decoder); - } - @catch (NSException *exception) - { - NSLog(@"%@", [exception reason]); - return nil; - } - } -} - -static inline NSUInteger FCCacheWrittenObject(__unsafe_unretained id object, __unsafe_unretained NSMutableDictionary *cache) -{ - NSUInteger count = (NSUInteger)CFDictionaryGetCount((CFMutableDictionaryRef)cache); - CFDictionarySetValue((CFMutableDictionaryRef)cache, (const void *)(object), (const void *)(count + 1)); - return count; -} - -static inline NSUInteger FCIndexOfCachedObject(__unsafe_unretained id object, __unsafe_unretained NSMutableDictionary *cache) -{ - const void *index = CFDictionaryGetValue((CFMutableDictionaryRef)cache, (const void *)object); - if (index) - { - return ((NSUInteger)index) - 1; - } - return NSNotFound; -} - -static inline void FCWriteType(FCType value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteUInt8(uint8_t value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteUInt16(uint16_t value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteUInt32(uint32_t value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteDouble(Float64 value, __unsafe_unretained NSMutableData *output) -{ - [output appendBytes:&value length:sizeof(value)]; -} - -static inline void FCWriteString(__unsafe_unretained NSString *string, __unsafe_unretained NSMutableData *output) -{ - const char *utf8 = [string UTF8String]; - NSUInteger length = strlen(utf8) + 1; - [output appendBytes:utf8 length:length]; -} - -static inline BOOL FCWriteObjectAlias(__unsafe_unretained id object, __unsafe_unretained FCNSCoder *coder) -{ - NSUInteger index = FCIndexOfCachedObject(object, coder->_objectCache); - if (index <= UINT8_MAX) - { - FCWriteType(FCTypeObjectAlias8, coder->_output); - FCWriteUInt8((uint8_t)index, coder->_output); - return YES; - } - else if (index <= UINT16_MAX) - { - FCWriteType(FCTypeObjectAlias16, coder->_output); - FC_ALIGN_OUTPUT(uint16_t, coder->_output); - FCWriteUInt16((uint16_t)index, coder->_output); - return YES; - } - else if (index != NSNotFound) - { - FCWriteType(FCTypeObjectAlias32, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)index, coder->_output); - return YES; - } - else - { - return NO; - } -} - -static inline BOOL FCWriteStringAlias(__unsafe_unretained id object, __unsafe_unretained FCNSCoder *coder) -{ - NSUInteger index = FCIndexOfCachedObject(object, coder->_stringCache); - if (index <= UINT8_MAX) - { - FCWriteType(FCTypeStringAlias8, coder->_output); - FCWriteUInt8((uint8_t)index, coder->_output); - return YES; - } - else if (index <= UINT16_MAX) - { - FCWriteType(FCTypeStringAlias16, coder->_output); - FC_ALIGN_OUTPUT(uint16_t, coder->_output); - FCWriteUInt16((uint16_t)index, coder->_output); - return YES; - } - else if (index != NSNotFound) - { - FCWriteType(FCTypeStringAlias32, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)index, coder->_output); - return YES; - } - else - { - return NO; - } -} - -static void FCWriteObject(__unsafe_unretained id object, __unsafe_unretained FCNSCoder *coder) -{ - if (object) - { - [object FC_encodeWithCoder:coder]; - } - else - { - FCWriteType(FCTypeNil, coder->_output); - } -} - - -@implementation FastCoder - -+ (id)objectWithData:(NSData *)data -{ - static FCTypeConstructor *constructors[] = - { - FCReadNil, - FCReadNull, - FCReadAlias8, - FCReadAlias16, - FCReadAlias32, - FCReadStringAlias8, - FCReadStringAlias16, - FCReadStringAlias32, - FCReadString, - FCReadDictionary, - FCReadArray, - FCReadSet, - FCReadOrderedSet, - FCReadTrue, - FCReadFalse, - FCReadInt8, - FCReadInt16, - FCReadInt32, - FCReadInt64, - FCReadFloat32, - FCReadFloat64, - FCReadData, - FCReadDate, - FCReadMutableString, - FCReadMutableDictionary, - FCReadMutableArray, - FCReadMutableSet, - FCReadMutableOrderedSet, - FCReadMutableData, - FCReadClassDefinition, - FCReadObject8, - FCReadObject16, - FCReadObject32, - FCReadURL, - FCReadPoint, - FCReadSize, - FCReadRect, - FCReadRange, - FCReadVector, - FCReadAffineTransform, - FCRead3DTransform, - FCReadMutableIndexSet, - FCReadIndexSet, - FCReadNSCodedObject, - FCReadDecimalNumber, - FCReadOne, - FCReadZero - }; - - return FCParseData(data, constructors); -} - -+ (id)propertyListWithData:(NSData *)data -{ - static FCTypeConstructor *constructors[] = - { - NULL, - FCReadNull, - FCReadAlias8, - FCReadAlias16, - FCReadAlias32, - FCReadStringAlias8, - FCReadStringAlias16, - FCReadStringAlias32, - FCReadString, - FCReadDictionary, - FCReadArray, - FCReadSet, - FCReadOrderedSet, - FCReadTrue, - FCReadFalse, - FCReadInt8, - FCReadInt16, - FCReadInt32, - FCReadInt64, - FCReadFloat32, - FCReadFloat64, - FCReadData, - FCReadDate, - FCReadMutableString, - FCReadMutableDictionary, - FCReadMutableArray, - FCReadMutableSet, - FCReadMutableOrderedSet, - FCReadMutableData, - NULL, - NULL, - NULL, - NULL, - FCReadURL, - FCReadPoint, - FCReadSize, - FCReadRect, - FCReadRange, - FCReadVector, - FCReadAffineTransform, - FCRead3DTransform, - FCReadMutableIndexSet, - FCReadIndexSet, - NULL, - FCReadDecimalNumber, - FCReadOne, - FCReadZero - }; - - return FCParseData(data, constructors); -} - -+ (NSData *)dataWithRootObject:(id)object -{ - if (object) - { - //write header - FCHeader header = {FCIdentifier, FCMajorVersion, FCMinorVersion}; - NSMutableData *output = [NSMutableData dataWithLength:sizeof(header)]; - memcpy(output.mutableBytes, &header, sizeof(header)); - - //object count placeholders - FCWriteUInt32(0, output); - FCWriteUInt32(0, output); - FCWriteUInt32(0, output); - - @autoreleasepool - { - __autoreleasing id objectCache = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, NULL, NULL)); - __autoreleasing id classCache = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, NULL, NULL)); - __autoreleasing id stringCache = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, &kCFCopyStringDictionaryKeyCallBacks, NULL)); - __autoreleasing id classesByName = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, &kCFCopyStringDictionaryKeyCallBacks, NULL)); - - //create coder - FCNSCoder *coder = FC_AUTORELEASE([[FCNSCoder alloc] init]); - coder->_rootObject = object; - coder->_output = output; - coder->_objectCache = objectCache; - coder->_classCache = classCache; - coder->_stringCache = stringCache; - coder->_classesByName = classesByName; - - //write object - FCWriteObject(object, coder); - -#if FC_DIAGNOSTIC_ENABLED - - NSUInteger count = [objectCache count]; - const void **keys = (const void **)malloc(count * sizeof(id)); - const NSUInteger *values = (const NSUInteger *)malloc(count * sizeof(NSUInteger)); - CFDictionaryGetKeysAndValues((CFDictionaryRef)objectCache, keys, (const void **)values); - NSMutableDictionary *cache = [NSMutableDictionary dictionary]; - for (NSUInteger i = 0; i < count; i++) - { - cache[@(values[i])] = (id)keys[i]; - } - printf("Output cache:\n"); - for (NSUInteger i = 0; i < count; i++) - { - printf("%tu: %s\n", i, [[[cache[@(i + 1)] classForCoder] description] UTF8String]); - } - printf("\n"); - free(keys); - free((void **)values); - -#endif - - //set object count - uint32_t objectCount = (uint32_t)[objectCache count]; - [output replaceBytesInRange:NSMakeRange(sizeof(header), sizeof(uint32_t)) withBytes:&objectCount]; - - //set class count - uint32_t classCount = (uint32_t)[classCache count]; - [output replaceBytesInRange:NSMakeRange(sizeof(header) + sizeof(uint32_t), sizeof(uint32_t)) withBytes:&classCount]; - - //set string count - uint32_t stringCount = (uint32_t)[stringCache count]; - [output replaceBytesInRange:NSMakeRange(sizeof(header) + sizeof(uint32_t) * 2, sizeof(uint32_t)) withBytes:&stringCount]; - - return output; - } - } - return nil; -} - -@end - - -@implementation FCNSCoder - -- (BOOL)allowsKeyedCoding -{ - return YES; -} - -- (void)encodeObject:(__unsafe_unretained id)objv forKey:(__unsafe_unretained NSString *)key -{ - if (objv) - { - FCWriteObject(objv, self); - FCWriteObject(key, self); - } -} - -- (void)encodeConditionalObject:(id)objv forKey:(__unsafe_unretained NSString *)key -{ - if (FCIndexOfCachedObject(objv, _objectCache) != NSNotFound) - { - FCWriteObject(objv, self); - FCWriteObject(key, self); - } -} - -- (void)encodeBool:(BOOL)boolv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(boolv), self); - FCWriteObject(key, self); -} - -- (void)encodeInt:(int)intv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(intv), self); - FCWriteObject(key, self); -} - -- (void)encodeInteger:(NSInteger)intv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(intv), self); - FCWriteObject(key, self); -} - -- (void)encodeInt32:(int32_t)intv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(intv), self); - FCWriteObject(key, self); -} - -- (void)encodeInt64:(int64_t)intv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(intv), self); - FCWriteObject(key, self); -} - -- (void)encodeFloat:(float)realv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(realv), self); - FCWriteObject(key, self); -} - -- (void)encodeDouble:(double)realv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject(@(realv), self); - FCWriteObject(key, self); -} - -- (void)encodeBytes:(const uint8_t *)bytesp length:(NSUInteger)lenv forKey:(__unsafe_unretained NSString *)key -{ - FCWriteObject([NSData dataWithBytes:bytesp length:lenv], self); - FCWriteObject(key, self); -} - -@end - - -@implementation FCNSDecoder - -- (BOOL)allowsKeyedCoding -{ - return YES; -} - -- (BOOL)containsValueForKey:(NSString *)key -{ - return _properties[key] != nil; -} - -- (id)decodeObjectForKey:(__unsafe_unretained NSString *)key -{ - return _properties[key]; -} - -- (BOOL)decodeBoolForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] boolValue]; -} - -- (int)decodeIntForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] intValue]; -} - -- (NSInteger)decodeIntegerForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] integerValue]; -} - -- (int32_t)decodeInt32ForKey:(__unsafe_unretained NSString *)key -{ - return (int32_t)[_properties[key] longValue]; -} - -- (int64_t)decodeInt64ForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] longLongValue]; -} - -- (float)decodeFloatForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] floatValue]; -} - -- (double)decodeDoubleForKey:(__unsafe_unretained NSString *)key -{ - return [_properties[key] doubleValue]; -} - -- (const uint8_t *)decodeBytesForKey:(__unsafe_unretained NSString *)key returnedLength:(NSUInteger *)lengthp -{ - __autoreleasing NSData *data = _properties[key]; - *lengthp = [data length]; - return data.bytes; -} - -@end - - -@implementation FCClassDefinition : NSObject - -//no encoding implementation needed - -@end - - -@implementation NSObject (FastCoding) - -+ (NSArray *)fastCodingKeys -{ - __autoreleasing NSMutableArray *codableKeys = [NSMutableArray array]; - unsigned int propertyCount; - objc_property_t *properties = class_copyPropertyList(self, &propertyCount); - for (unsigned int i = 0; i < propertyCount; i++) - { - //get property - objc_property_t property = properties[i]; - const char *propertyName = property_getName(property); - NSString *key = @(propertyName); - - //see if there is a backing ivar - char *ivar = property_copyAttributeValue(property, "V"); - if (ivar) - { - //check if ivar has KVC-compliant name - NSString *ivarName = @(ivar); - if ([ivarName isEqualToString:key] || [ivarName isEqualToString:[@"_" stringByAppendingString:key]]) - { - //setValue:forKey: will work - [codableKeys addObject:key]; - } - free(ivar); - } - } - free(properties); - return codableKeys; -} - -+ (NSArray *)FC_aggregatePropertyKeys -{ - __autoreleasing NSArray *codableKeys = nil; - codableKeys = objc_getAssociatedObject(self, _cmd); - if (codableKeys == nil) - { - codableKeys = [NSMutableArray array]; - Class subclass = [self class]; - while (subclass != [NSObject class]) - { - [(NSMutableArray *)codableKeys addObjectsFromArray:[subclass fastCodingKeys]]; - subclass = [subclass superclass]; - } - codableKeys = [NSArray arrayWithArray:codableKeys]; - - //make the association atomically so that we don't need to bother with an @synchronize - objc_setAssociatedObject(self, _cmd, codableKeys, OBJC_ASSOCIATION_RETAIN); - } - return codableKeys; -} - -- (id)awakeAfterFastCoding -{ - return self; -} - -- (Class)classForFastCoding -{ - return [self classForCoder]; -} - -- (BOOL)preferFastCoding -{ - return NO; -} - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - - //handle NSCoding - if (![self preferFastCoding] && [self conformsToProtocol:@protocol(NSCoding)]) - { - //write object - FCWriteType(FCTypeNSCodedObject, coder->_output); - FCWriteObject(NSStringFromClass([self classForCoder]), coder); - [(id )self encodeWithCoder:coder]; - FCWriteType(FCTypeNil, coder->_output); - FCCacheWrittenObject(self, coder->_objectCache); - return; - } - - //write class definition - Class objectClass = [self classForFastCoding]; - NSUInteger classIndex = FCIndexOfCachedObject(objectClass, coder->_classCache); - __autoreleasing NSArray *propertyKeys = [objectClass FC_aggregatePropertyKeys]; - if (classIndex == NSNotFound) - { - classIndex = FCCacheWrittenObject(objectClass, coder->_classCache); - FCWriteType(FCTypeClassDefinition, coder->_output); - FCWriteString(NSStringFromClass(objectClass), coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[propertyKeys count], coder->_output); - for (__unsafe_unretained id value in propertyKeys) - { - FCWriteString(value, coder->_output); - } - } - - //write object - FCCacheWrittenObject(self, coder->_objectCache); - if (classIndex <= UINT8_MAX) - { - FCWriteType(FCTypeObject8, coder->_output); - FCWriteUInt8((uint8_t)classIndex, coder->_output); - } - else if (classIndex <= UINT16_MAX) - { - FCWriteType(FCTypeObject16, coder->_output); - FC_ALIGN_OUTPUT(uint16_t, coder->_output); - FCWriteUInt16((uint16_t)classIndex, coder->_output); - } - else - { - FCWriteType(FCTypeObject32, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)classIndex, coder->_output); - } - for (__unsafe_unretained NSString *key in propertyKeys) - { - FCWriteObject([self valueForKey:key], coder); - } -} - -@end - - -@implementation NSString (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if ([self classForCoder] == [NSMutableString class]) - { - if (FCWriteObjectAlias(self, coder)) return; - FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(FCTypeMutableString, coder->_output); - } - else - { - if (FCWriteStringAlias(self, coder)) return; - FCCacheWrittenObject(self, coder->_stringCache); - FCWriteType(FCTypeString, coder->_output); - } - FCWriteString(self, coder->_output); -} - -@end - - -@implementation NSNumber (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - switch (CFNumberGetType((CFNumberRef)self)) - { - case kCFNumberFloat32Type: - case kCFNumberFloatType: - { - FCWriteType(FCTypeFloat32, coder->_output); - Float32 value = [self floatValue]; - FC_ALIGN_OUTPUT(Float32, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - case kCFNumberFloat64Type: - case kCFNumberDoubleType: - case kCFNumberCGFloatType: - { - FCWriteType(FCTypeFloat64, coder->_output); - Float64 value = [self doubleValue]; - FC_ALIGN_OUTPUT(Float64, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - case kCFNumberSInt64Type: - case kCFNumberLongLongType: - case kCFNumberNSIntegerType: - { - int64_t value = [self longLongValue]; - if (value > (int64_t)INT32_MAX || value < (int64_t)INT32_MIN) - { - FCWriteType(FCTypeInt64, coder->_output); - FC_ALIGN_OUTPUT(int64_t, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - //otherwise treat as 32-bit - } - case kCFNumberSInt32Type: - case kCFNumberIntType: - case kCFNumberLongType: - case kCFNumberCFIndexType: - { - int32_t value = (int32_t)[self intValue]; - if (value > (int32_t)INT16_MAX || value < (int32_t)INT16_MIN) - { - FCWriteType(FCTypeInt32, coder->_output); - FC_ALIGN_OUTPUT(int32_t, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - //otherwise treat as 16-bit - } - case kCFNumberSInt16Type: - case kCFNumberShortType: - { - int16_t value = (int16_t)[self intValue]; - if (value > (int16_t)INT8_MAX || value < (int16_t)INT8_MIN) - { - FCWriteType(FCTypeInt16, coder->_output); - FC_ALIGN_OUTPUT(int16_t, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - break; - } - //otherwise treat as 8-bit - } - case kCFNumberSInt8Type: - case kCFNumberCharType: - { - int8_t value = (int8_t)[self intValue]; - if (value == 1) - { - FCWriteType((self == (id)kCFBooleanTrue)? FCTypeTrue: FCTypeOne, coder->_output); - } - else if (value == 0) - { - FCWriteType((self == (id)kCFBooleanFalse)? FCTypeFalse: FCTypeZero, coder->_output); - } - else - { - FCWriteType(FCTypeInt8, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; - } - } - } -} - -@end - - -@implementation NSDecimalNumber (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - FCWriteType(FCTypeDecimalNumber, coder->_output); - NSDecimal decimal = [self decimalValue]; - FC_ALIGN_OUTPUT(NSDecimal, coder->_output); - [coder->_output appendBytes:&decimal length:sizeof(decimal)]; -} - -@end - - -@implementation NSDate (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(FCTypeDate, coder->_output); - NSTimeInterval value = [self timeIntervalSince1970]; - FC_ALIGN_OUTPUT(NSTimeInterval, coder->_output); - [coder->_output appendBytes:&value length:sizeof(value)]; -} - -@end - - -@implementation NSData (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(([self classForCoder] == [NSMutableData class])? FCTypeMutableData: FCTypeData, coder->_output); - uint32_t length = (uint32_t)[self length]; - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32(length, coder->_output); - [coder->_output appendData:self]; - coder->_output.length += (4 - ((length % 4) ?: 4)); -} - -@end - - -@implementation NSNull (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - FCWriteType(FCTypeNull, coder->_output); -} - -@end - - -@implementation NSDictionary (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - - //alias keypath - __autoreleasing NSString *aliasKeypath = self[@"$alias"]; - if ([self count] == 1 && aliasKeypath) - { - __autoreleasing id node = coder->_rootObject; - NSArray *parts = [aliasKeypath componentsSeparatedByString:@"."]; - for (__unsafe_unretained NSString *key in parts) - { - if ([node isKindOfClass:[NSArray class]]) - { - node = ((NSArray *)node)[(NSUInteger)[key integerValue]]; - } - else - { - node = [node valueForKey:key]; - } - } - FCWriteObject(node, coder); - return; - } - - //object bootstrapping - __autoreleasing NSString *className = self[@"$class"]; - if (className) - { - //get class definition - __autoreleasing NSArray *propertyKeys = [[self allKeys] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self != '$class'"]]; - __autoreleasing FCClassDefinition *definition = coder->_classesByName[className]; - if (definition) - { - //check that existing class definition contains all keys - __autoreleasing NSMutableArray *keys = nil; - for (__unsafe_unretained id key in propertyKeys) - { - if (![definition->_propertyKeys containsObject:key]) - { - keys = keys ?: [NSMutableArray array]; - [keys addObject:key]; - } - } - propertyKeys = definition->_propertyKeys; - if (keys) - { - //we need to create a new class definition that includes extra keys - propertyKeys = [propertyKeys arrayByAddingObjectsFromArray:keys]; - definition = nil; - } - } - if (!definition) - { - //create class definition - definition = FC_AUTORELEASE([[FCClassDefinition alloc] init]); - definition->_className = className; - definition->_propertyKeys = propertyKeys; - coder->_classesByName[className] = definition; - } - - //write class definition - NSUInteger classIndex = FCIndexOfCachedObject(definition, coder->_classCache); - if (classIndex == NSNotFound) - { - classIndex = FCCacheWrittenObject(definition, coder->_classCache); - FCWriteType(FCTypeClassDefinition, coder->_output); - FCWriteString(definition->_className, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[propertyKeys count], coder->_output); - for (__unsafe_unretained id key in propertyKeys) - { - //convert each to a string using -description, just in case - FCWriteString([key description], coder->_output); - } - } - - //write object - FCCacheWrittenObject(self, coder->_objectCache); - if (classIndex <= UINT8_MAX) - { - FCWriteType(FCTypeObject8, coder->_output); - FCWriteUInt8((uint8_t)classIndex, coder->_output); - } - else if (classIndex <= UINT16_MAX) - { - FCWriteType(FCTypeObject16, coder->_output); - FC_ALIGN_OUTPUT(uint16_t, coder->_output); - FCWriteUInt16((uint16_t)classIndex, coder->_output); - } - else - { - FCWriteType(FCTypeObject32, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)classIndex, coder->_output); - } - for (__unsafe_unretained NSString *key in propertyKeys) - { - FCWriteObject(self[key], coder); - } - return; - } - - //ordinary dictionary - BOOL mutable = ([self classForCoder] == [NSMutableDictionary class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(mutable? FCTypeMutableDictionary: FCTypeDictionary, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[self count], coder->_output); - __autoreleasing NSArray *values = [self allValues]; - __autoreleasing NSArray *keys = [self allKeys]; - NSUInteger index = 0; - for (__unsafe_unretained id value in values) - { - FCWriteObject(value, coder); - FCWriteObject(keys[index++], coder); - } - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - -@implementation NSArray (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - BOOL mutable = ([self classForCoder] == [NSMutableArray class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(mutable? FCTypeMutableArray: FCTypeArray, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[self count], coder->_output); - for (__unsafe_unretained id value in self) - { - FCWriteObject(value, coder); - } - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - - -@implementation NSSet (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - BOOL mutable = ([self classForCoder] == [NSMutableSet class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(mutable? FCTypeMutableSet: FCTypeSet, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[self count], coder->_output); - for (__unsafe_unretained id value in self) - { - FCWriteObject(value, coder); - } - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - -@implementation NSOrderedSet (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - BOOL mutable = ([self classForCoder] == [NSMutableOrderedSet class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - FCWriteType(mutable? FCTypeMutableOrderedSet: FCTypeOrderedSet, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)[self count], coder->_output); - for (__unsafe_unretained id value in self) - { - FCWriteObject(value, coder); - } - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - -@implementation NSIndexSet (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteObjectAlias(self, coder)) return; - - BOOL mutable = ([self classForCoder] == [NSMutableIndexSet class]); - if (mutable) FCCacheWrittenObject(self, coder->_objectCache); - - uint32_t __block rangeCount = 0; // wish we could get this directly from NSIndexSet... - [self enumerateRangesUsingBlock:^(__unused NSRange range, __unused BOOL *stop) { - rangeCount ++; - }]; - - FCWriteType(mutable? FCTypeMutableIndexSet: FCTypeIndexSet, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32(rangeCount, coder->_output); - [self enumerateRangesUsingBlock:^(NSRange range, __unused BOOL *stop) { - FCWriteUInt32((uint32_t)range.location, coder->_output); - FCWriteUInt32((uint32_t)range.length, coder->_output); - }]; - - if (!mutable) FCCacheWrittenObject(self, coder->_objectCache); -} - -@end - - -@implementation NSURL (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - if (FCWriteStringAlias(self, coder)) return; - FCWriteType(FCTypeURL, coder->_output); - FCWriteObject(self.relativeString, coder); - FCWriteObject(self.baseURL, coder); - FCCacheWrittenObject(self, coder->_stringCache); -} - -@end - - -@implementation NSValue (FastCoding) - -- (void)FC_encodeWithCoder:(__unsafe_unretained FCNSCoder *)coder -{ - FCCacheWrittenObject(self, coder->_objectCache); - const char *type = [self objCType]; - if (strcmp(type, @encode(CGPoint)) == 0 OR_IF_MAC(strcmp(type, @encode(NSPoint)) == 0)) - { - CGFloat point[2]; - [self getValue:&point]; - FCWriteType(FCTypePoint, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - FCWriteDouble((Float64)point[0], coder->_output); - FCWriteDouble((Float64)point[1], coder->_output); - } - else if (strcmp(type, @encode(CGSize)) == 0 OR_IF_MAC(strcmp(type, @encode(NSSize)) == 0)) - { - CGFloat size[2]; - [self getValue:&size]; - FCWriteType(FCTypeSize, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - FCWriteDouble((Float64)size[0], coder->_output); - FCWriteDouble((Float64)size[1], coder->_output); - } - else if (strcmp(type, @encode(CGRect)) == 0 OR_IF_MAC(strcmp(type, @encode(NSRect)) == 0)) - { - CGFloat rect[4]; - [self getValue:&rect]; - FCWriteType(FCTypeRect, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - FCWriteDouble((Float64)rect[0], coder->_output); - FCWriteDouble((Float64)rect[1], coder->_output); - FCWriteDouble((Float64)rect[2], coder->_output); - FCWriteDouble((Float64)rect[3], coder->_output); - } - else if (strcmp(type, @encode(NSRange)) == 0) - { - NSUInteger range[2]; - [self getValue:&range]; - FCWriteType(FCTypeRange, coder->_output); - FC_ALIGN_OUTPUT(uint32_t, coder->_output); - FCWriteUInt32((uint32_t)range[0], coder->_output); - FCWriteUInt32((uint32_t)range[1], coder->_output); - } - else if (strcmp(type, @encode(CGVector)) == 0) - { - CGFloat vector[2]; - [self getValue:&vector]; - FCWriteType(FCTypeVector, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - FCWriteDouble((Float64)vector[0], coder->_output); - FCWriteDouble((Float64)vector[1], coder->_output); - } - else if (strcmp(type, @encode(CGAffineTransform)) == 0) - { - CGFloat transform[6]; - [self getValue:&transform]; - FCWriteType(FCTypeAffineTransform, coder->_output); - for (NSUInteger i = 0; i < 6; i++) - { - FCWriteDouble((Float64)transform[i], coder->_output); - } - } - else if ([@(type) hasPrefix:@"{CATransform3D"]) - { - CGFloat transform[16]; - [self getValue:&transform]; - FCWriteType(FCType3DTransform, coder->_output); - FC_ALIGN_OUTPUT(Float64, coder->_output); - for (NSUInteger i = 0; i < 16; i++) - { - FCWriteDouble((Float64)transform[i], coder->_output); - } - } - else - { - [NSException raise:FastCodingException format:@"Unable to encode NSValue data of type %@", @(type)]; - } -} - -@end - - -#pragma mark - -#pragma mark legacy decoding - - -static inline uint32_t FCReadRawUInt32_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(uint32_t, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static inline double FCReadRawDouble_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(Float64, *decoder->_offset, decoder->_input, decoder->_total); - return value; -} - -static id FCReadRawString_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSString *string = nil; - NSUInteger length = strlen(decoder->_input + *decoder->_offset) + 1; - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - if (length > 1) - { - string = CFBridgingRelease(CFStringCreateWithBytes(NULL, decoder->_input + *decoder->_offset, - (CFIndex)length - 1, kCFStringEncodingUTF8, false)); - } - else - { - string = @""; - } - *decoder->_offset += paddedLength; - return string; -} - -static id FCReadNull_2_3(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return [NSNull null]; -} - -static id FCReadAlias_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - return FCCachedObjectAtIndex(FCReadRawUInt32_2_3(decoder), decoder->_objectCache); -} - -static id FCReadString_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - NSString *string = FCReadRawString_2_3(decoder); - FCCacheParsedObject(string, decoder->_objectCache); - return string; -} - -static id FCReadMutableString_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSMutableString *string = nil; - NSUInteger length = strlen(decoder->_input + *decoder->_offset) + 1; - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - if (length > 1) - { - string = FC_AUTORELEASE([[NSMutableString alloc] initWithBytes:decoder->_input + *decoder->_offset length:length - 1 encoding:NSUTF8StringEncoding]); - } - else - { - string = [NSMutableString string]; - } - *decoder->_offset += paddedLength; - FCCacheParsedObject(string, decoder->_objectCache); - return string; -} - -static id FCReadDictionary_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSDictionary *dict = nil; - if (count) - { - __autoreleasing id *keys = (__autoreleasing id *)malloc(count * sizeof(id)); - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject_2_3(decoder); - keys[i] = FCReadObject_2_3(decoder); - } - - dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys count:count]; - free(objects); - free(keys); - } - else - { - dict = @{}; - } - FCCacheParsedObject(dict, decoder->_objectCache); - return dict; -} - -static id FCReadMutableDictionary_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableDictionary *dict = CFBridgingRelease(CFDictionaryCreateMutable(NULL, (CFIndex)count, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); - FCCacheParsedObject(dict, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - __autoreleasing id object = FCReadObject_2_3(decoder); - __autoreleasing id key = FCReadObject_2_3(decoder); - CFDictionarySetValue((CFMutableDictionaryRef)dict, (const void *)key, (const void *)object); - } - return dict; -} - -static id FCReadArray_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSArray *array = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject_2_3(decoder); - } - array = [NSArray arrayWithObjects:objects count:count]; - free(objects); - } - else - { - array = @[]; - } - FCCacheParsedObject(array, decoder->_objectCache); - return array; -} - -static id FCReadMutableArray_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableArray *array = [NSMutableArray arrayWithCapacity:count]; - FCCacheParsedObject(array, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - CFArrayAppendValue((CFMutableArrayRef)array, (void *)FCReadObject_2_3(decoder)); - } - return array; -} - -static id FCReadSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSSet *set = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject_2_3(decoder); - } - set = [NSSet setWithObjects:objects count:count]; - free(objects); - } - else - { - set = [NSSet set]; - } - FCCacheParsedObject(set, decoder->_objectCache); - return set; -} - -static id FCReadMutableSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableSet *set = [NSMutableSet setWithCapacity:count]; - FCCacheParsedObject(set, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - [set addObject:FCReadObject_2_3(decoder)]; - } - return set; -} - -static id FCReadOrderedSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSOrderedSet *set = nil; - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadObject_2_3(decoder); - } - set = [NSOrderedSet orderedSetWithObjects:objects count:count]; - free(objects); - } - else - { - set = [NSOrderedSet orderedSet]; - } - FCCacheParsedObject(set, decoder->_objectCache); - return set; -} - -static id FCReadMutableOrderedSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t count = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableOrderedSet *set = [NSMutableOrderedSet orderedSetWithCapacity:count]; - FCCacheParsedObject(set, decoder->_objectCache); - for (uint32_t i = 0; i < count; i++) - { - [set addObject:FCReadObject_2_3(decoder)]; - } - return set; -} - -static id FCReadTrue_2_3(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @YES; -} - -static id FCReadFalse_2_3(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return @NO; -} - -static id FCReadInt32_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(int32_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - FCCacheParsedObject(number, decoder->_objectCache); - return number; -} - -static id FCReadInt64_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(int64_t, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - FCCacheParsedObject(number, decoder->_objectCache); - return number; -} - -static id FCReadFloat32_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(Float32, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - FCCacheParsedObject(number, decoder->_objectCache); - return number; -} - -static id FCReadFloat64_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(Float64, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSNumber *number = @(value); - FCCacheParsedObject(number, decoder->_objectCache); - return number; -} - -static id FCReadData_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t length = FCReadRawUInt32_2_3(decoder); - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - __autoreleasing NSData *data = [NSData dataWithBytes:(decoder->_input + *decoder->_offset) length:length]; - *decoder->_offset += paddedLength; - FCCacheParsedObject(data, decoder->_objectCache); - return data; -} - -static id FCReadMutableData_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t length = FCReadRawUInt32_2_3(decoder); - NSUInteger paddedLength = length + (4 - ((length % 4) ?: 4)); - FC_ASSERT_FITS(paddedLength, *decoder->_offset, decoder->_total); - __autoreleasing NSMutableData *data = [NSMutableData dataWithBytes:(decoder->_input + *decoder->_offset) length:length]; - *decoder->_offset += paddedLength; - FCCacheParsedObject(data, decoder->_objectCache); - return data; -} - -static id FCReadDate_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - FC_READ_VALUE(NSTimeInterval, *decoder->_offset, decoder->_input, decoder->_total); - __autoreleasing NSDate *date = [NSDate dateWithTimeIntervalSince1970:value]; - FCCacheParsedObject(date, decoder->_objectCache); - return date; -} - -static id FCReadClassDefinition_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing FCClassDefinition *definition = FC_AUTORELEASE([[FCClassDefinition alloc] init]); - FCCacheParsedObject(definition, decoder->_objectCache); - definition->_className = FCReadRawString_2_3(decoder); - uint32_t count = FCReadRawUInt32_2_3(decoder); - if (count) - { - __autoreleasing id *objects = (__autoreleasing id *)malloc(count * sizeof(id)); - for (uint32_t i = 0; i < count; i++) - { - objects[i] = FCReadRawString_2_3(decoder); - } - __autoreleasing NSArray *propertyKeys = [NSArray arrayWithObjects:objects count:count]; - definition->_propertyKeys = propertyKeys; - free(objects); - } - - //now return the actual object instance - return FCReadObject_2_3(decoder); -} - -static id FCReadObjectInstance_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing FCClassDefinition *definition = FCCachedObjectAtIndex(FCReadRawUInt32_2_3(decoder), decoder->_objectCache); - __autoreleasing Class objectClass = NSClassFromString(definition->_className); - __autoreleasing id object = nil; - if (objectClass) - { - object = FC_AUTORELEASE([[objectClass alloc] init]); - } - else if (definition->_className) - { - object = [NSMutableDictionary dictionaryWithObject:definition->_className forKey:@"$class"]; - } - else if (object) - { - object = [NSMutableDictionary dictionary]; - } - NSUInteger cacheIndex = FCCacheParsedObject(object, decoder->_objectCache); - for (__unsafe_unretained NSString *key in definition->_propertyKeys) - { - [object setValue:FCReadObject_2_3(decoder) forKey:key]; - } - id newObject = [object awakeAfterFastCoding]; - if (newObject != object) - { - //TODO: this is only a partial solution, as any objects that referenced - //this object between when it was created and now will have received incorrect instance - FCReplaceCachedObject(cacheIndex, newObject, decoder->_objectCache); - } - return newObject; -} - -static id FCReadNil_2_3(__unused __unsafe_unretained FCNSDecoder *decoder) -{ - return nil; -} - -static id FCReadURL_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSURL *URL = [NSURL URLWithString:FCReadObject_2_3(decoder) relativeToURL:FCReadObject_2_3(decoder)]; - FCCacheParsedObject(URL, decoder->_objectCache); - return URL; -} - -static id FCReadPoint_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGPoint point = {(CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder)}; - NSValue *value = [NSValue valueWithBytes:&point objCType:@encode(CGPoint)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadSize_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGSize size = {(CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder)}; - NSValue *value = [NSValue valueWithBytes:&size objCType:@encode(CGSize)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadRect_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGRect rect = - { - {(CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder)}, - {(CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder)} - }; - NSValue *value = [NSValue valueWithBytes:&rect objCType:@encode(CGRect)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadRange_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - NSRange range = {FCReadRawUInt32_2_3(decoder), FCReadRawUInt32_2_3(decoder)}; - NSValue *value = [NSValue valueWithBytes:&range objCType:@encode(NSRange)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadAffineTransform_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGAffineTransform transform = - { - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder) - }; - NSValue *value = [NSValue valueWithBytes:&transform objCType:@encode(CGAffineTransform)]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCRead3DTransform_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - CGFloat transform[] = - { - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder), - (CGFloat)FCReadRawDouble_2_3(decoder), (CGFloat)FCReadRawDouble_2_3(decoder) - }; - NSValue *value = [NSValue valueWithBytes:&transform objCType:@encode(CGFloat[16])]; - FCCacheParsedObject(value, decoder->_objectCache); - return value; -} - -static id FCReadMutableIndexSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - uint32_t rangeCount = FCReadRawUInt32_2_3(decoder); - __autoreleasing NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSet]; - FCCacheParsedObject(indexSet, decoder->_objectCache); - for (uint32_t i = 0; i < rangeCount; i++) - { - NSRange range = {FCReadRawUInt32_2_3(decoder), FCReadRawUInt32_2_3(decoder)}; - [indexSet addIndexesInRange:range]; - } - return indexSet; -} - -static id FCReadIndexSet_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - __autoreleasing NSIndexSet *indexSet; - uint32_t rangeCount = FCReadRawUInt32_2_3(decoder); - if (rangeCount == 1) - { - //common case optimisation - NSRange range = {FCReadRawUInt32_2_3(decoder), FCReadRawUInt32_2_3(decoder)}; - indexSet = [NSIndexSet indexSetWithIndexesInRange:range]; - } - else - { - indexSet = [NSMutableIndexSet indexSet]; - for (uint32_t i = 0; i < rangeCount; i++) - { - NSRange range = {FCReadRawUInt32_2_3(decoder), FCReadRawUInt32_2_3(decoder)}; - [(NSMutableIndexSet *)indexSet addIndexesInRange:range]; - } - indexSet = [indexSet copy]; - - } - FCCacheParsedObject(indexSet, decoder->_objectCache); - return indexSet; -} - -static id FCReadNSCodedObject_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - NSString *className = FCReadObject_2_3(decoder); - NSMutableDictionary *oldProperties = decoder->_properties; - decoder->_properties = CFBridgingRelease(CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks)); - while (true) - { - id object = FCReadObject_2_3(decoder); - if (!object) break; - NSString *key = FCReadObject_2_3(decoder); - decoder->_properties[key] = object; - } - id object = FC_AUTORELEASE([[NSClassFromString(className) alloc] initWithCoder:decoder]); - decoder->_properties = oldProperties; - FCCacheParsedObject(object, decoder->_objectCache); - return object; -} - -static id FCReadObject_2_3(__unsafe_unretained FCNSDecoder *decoder) -{ - static FCTypeConstructor *constructors[] = - { - FCReadNull_2_3, - FCReadAlias_2_3, - FCReadString_2_3, - FCReadDictionary_2_3, - FCReadArray_2_3, - FCReadSet_2_3, - FCReadOrderedSet_2_3, - FCReadTrue_2_3, - FCReadFalse_2_3, - FCReadInt32_2_3, - FCReadInt64_2_3, - FCReadFloat32_2_3, - FCReadFloat64_2_3, - FCReadData_2_3, - FCReadDate_2_3, - FCReadMutableString_2_3, - FCReadMutableDictionary_2_3, - FCReadMutableArray_2_3, - FCReadMutableSet_2_3, - FCReadMutableOrderedSet_2_3, - FCReadMutableData_2_3, - FCReadClassDefinition_2_3, - FCReadObjectInstance_2_3, - FCReadNil_2_3, - FCReadURL_2_3, - FCReadPoint_2_3, - FCReadSize_2_3, - FCReadRect_2_3, - FCReadRange_2_3, - FCReadAffineTransform_2_3, - FCRead3DTransform_2_3, - FCReadMutableIndexSet_2_3, - FCReadIndexSet_2_3, - FCReadNSCodedObject_2_3 - }; - - uint32_t type = FCReadRawUInt32_2_3(decoder); - if (type > sizeof(constructors)) - { - [NSException raise:FastCodingException format:@"FastCoding cannot decode object of type: %i", type]; - return nil; - } - return constructors[type](decoder); -} diff --git a/StarterProject/Pods/FastCoding/LICENCE.md b/StarterProject/Pods/FastCoding/LICENCE.md deleted file mode 100755 index dd3163d..0000000 --- a/StarterProject/Pods/FastCoding/LICENCE.md +++ /dev/null @@ -1,21 +0,0 @@ -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. \ No newline at end of file diff --git a/StarterProject/Pods/FastCoding/README.md b/StarterProject/Pods/FastCoding/README.md deleted file mode 100644 index 4393b90..0000000 --- a/StarterProject/Pods/FastCoding/README.md +++ /dev/null @@ -1,377 +0,0 @@ -[![Build Status](https://travis-ci.org/nicklockwood/FastCoding.svg)](https://travis-ci.org/nicklockwood/FastCoding) - - -Purpose --------------- - -FastCoder is a high-performance binary serialization format for Cocoa objects and object graphs. It is intended as a replacement for NSPropertyList, NSJSONSerializer, NSKeyedArchiver/Unarchiver and Core Data. - -The design goals of the FastCoder library are to be fast, flexible and secure. - -FastCoder is already faster (on average) for reading than any of the built-in serialization mechanisms in Cocoa, and is faster for writing than any mechanism except for JSON (which doesn't support arbitrary object types). File size is smaller than NSKeyedArchiver, and comparable to the other methods. - -FastCoder supports more data types than either JSON or Plist coding (including NSURL, NSValue, NSSet and NSOrderedSet), and allows all supported object types to be used as the keys in a dictionary, not just strings. - -FastCoder can also serialize your custom classes automatically using property inspection. For cases where this doesn't work automatically, you can easily implement your own serialization using the FastCoding or NSCoding protocols. - - -Supported OS & SDK Versions ------------------------------ - -* Supported build target - iOS 11.0 / Mac OS 10.12 (Xcode 9.0) -* Earliest supported deployment target - iOS 9.0 / Mac OS 10.10 -* Earliest compatible deployment target - iOS 4.0 / Mac OS 10.6 - -NOTE: 'Supported' means that the library has been tested with this version. 'Compatible' means that the library should work on this OS version (i.e. it doesn't rely on any unavailable SDK features) but is no longer being tested for compatibility and may require tweaking or bug fixes to run correctly. - - -ARC Compatibility ------------------- - -FastCoder is compatible with both ARC and non-ARC compile targets, however, performance is better when running with ARC disabled, and it is recommended that you apply the `-fno-objc-arc` compiler flag to the FastCoder.m class. To do this, go to the Build Phases tab in your target settings, open the Compile Sources group, double-click FastCoder.m in the list and type `-fno-objc-arc` into the popover. - - -Thread Safety --------------- - -It is safe to call the FastCoder encoding and decoding class methods concurrently from multiple threads. It should also be safe to encode the same object concurrently on multiple threads provided that you do not mutate the object while it is being encoded. - - -Installation --------------- - -To use FastCoder, just drag the FastCoder.h and .m files into your project. - - -Security --------------- - -The FastCoding parser checks for buffer overflow errors whilst parsing, and will throw an exception if the data instructs it to try to read past the end of the data file. This should prevent most kinds of code injection attack. - -Whilst it is not possible to use a FastCoded file to inject code, as with NSCoding, an attacker could use a modified FastCoded file to cause unexpected classes to be created in your object graph, which might present a potential attack risk (note that only classes that already exist in your code base or a built-in Cocoa Framework can be created this way). - -For the time being, it is best not to try to load arbitrary FastCoded files from an untrusted source (although it is fine to use them for saving data internally within your application's sandbox). If you want to exchange FastCoded files between apps or users, use only the explicitly supported class types (listed below) and load the file using `propertyListWithData:`, which only supports safe types and will refuse to load a file containing unknown classes. A future release of the FastCoding library will add more sophisticated whitelisting capabilities. - - -Supported Classes ------------------- - -FastCoding supports the following class types natively: - - NSNull - NSNumber - NSDecimalNumber - NSValue (only the following subtypes) - CGPoint/NSPoint - CGSize/NSSize - CGRect/NSRect - CGVector - NSRange - CGAffineTransform - CATransform3D - NSString - NSMutableString - NSArray - NSMutableArray - NSDictionary - NSMutableDictionary - NSSet - NSMutableSet - NSOrderedSet - NSMutableOrderedSet - NSIndexSet - NSMutableIndexSet - NSData - NSMutableData - NSDate - -FastCoding also automatically supports any class that complies with the NSCoding protocol, or any class whose properties are all KVC-compliant, or that explicity implements the FastCoding protocol. - - -FastCoder methods ------------------------------ - -FastCoder implements the following methods: - - + (id)objectWithData:(NSData *)data; - -Constructs an object tree from an FastCoded data object and returns it. FastCoder does not currently provide any mechanism for class validation or substitution, so this method should not be used for loading files with unknown provenance (i.e. where you can't guarantee where the file came from, or that the file hasn't been tampered with). For exchanging files between apps, or for user-accessible documents, it is recommended that you use the `propertyListWithData:` method for loading the file instead (although this does not support arbitrary classes). - -If an unknown class type is encountered in the file, it will be loaded as a dictionary of properties that can be converted back into a real class later (see 'Bootstrapping', below). Attempting to load a malformed or corrupt file will throw an exception (caught internally) and return nil. - - + (id)propertyListWithData:(NSData *)data; - -Like `objectWithData:`, but this method is limited to loading "safe" object types such as `NSString`, `NSNumber`, `NSArray`, etc. Despite the name, this method is not actually limited to objects supported by `NSPropertyList` - for example it supports `NSNull` and `NSURL` - however it is safe to use for loading files from untrusted sources. Also, unlike ordinary property list methods, this can handle circular references, aliased objects and mutable containers like `NSMutableArray`. Attempting to load a malformed or corrupt file, or one containing unsupported classes, will throw an exception (caught internally) and return nil. - - + (NSData *)dataWithRootObject:(id)object; - -Archives an object graph as a block of data, which can then be saved to a file or transmitted via a network. The file can be loaded again using `objectWithData:`, or `propertyListWithData:` (provided that it only contains supported class types). - - -The FastCoding Protocol ------------------------------ - -FastCoding supports encoding/decoding of arbitrary objects using the FastCoding protocol. The FastCoding protocol is an *informal* protocol, implemented as a category on NSObject. The protocol consists of the following methods: - - + (NSArray *)fastCodingKeys; - -This method returns a list of property names that should be encoded/decoded for an object. The default implementation automatically detects all of the non-virtual (i.e. ivar-backed) @properties (including private and read-only properties) of the object and returns them, so in most cases it is not necessary to override this method. **NOTE:** if you override `+fastCodingKeys`, you should only include property keys for the current class, not properties that are inherited from the superclass. - - - (id)awakeAfterFastCoding; - -This method is called after an object has been deserialized using the FastCoding protocol, and all of its properties have been set. The deserialized object will be replaced by the one returned by this method, so you can use this method to either modify or completely replace the object. The default implementation just returns `self`. **NOTE**: returning a different object from `-awakeAfterFastCoding` may lead to unexpected behaviour if the object being decoded (or any of its children) contains a reference to itself. - - - (Class)classForFastCoding; - -This method is used to supply an alternative class to use for coding/decoding an object. This works the same way as the `-classForCoder` method of NSCoding, and by default returns the same value. - - - (BOOL)preferFastCoding; - -Because FastCoding automatically supports NSCoding, any object that conforms to the NSCoding protocol (except for types that are explicitly supported by FastCoding) will be encoded using the NSCoding methods by default. This is better for compatibility purposes, but may be signficantly slower than using the FastCoding protocol. If your class supports both NSCoding and FastCoding, and you would prefer FastCoder to use the FastCoding protocol, override this method and return `YES` (the default value is `NO`). - - -Overriding Default FastCoding Behaviour -------------------------------------------- - -If you wish to exclude certain properties of your object from being encoded, you can do so in any of the following ways: - -* Only use an ivar, without declaring a matching `@property`. -* Change the name of the ivar to something that is not KVC compliant (i.e. not the same as the property, or the property name with an _ prefix). You can do this using the `@synthesize` directive, e.g. `@synthesize foo = unencodableFoo;` -* Override the +fastCodingKeys method - -If you wish to encode additional data that is not represented by an `@property`, override the `+fastCodingKeys` method and add the names of your virtual properties. You will need to implement suitable setter/getter methods for these properties, or the encoding/decoding process won't work. - -If you wish to substitute a different class for decoding, you can implement the `-classForFastCoding` method and FastCoding will encode the object as that class instead. If you wish to substitute a different object after decoding, use the `-awakeAfterFastCoding` method. - -If you have removed or renamed a property of a class, and want to provide backward compatibility for a previously saved FastCoder file, you should implement a private setter method for the old property, which you can then map to wherever it should go in the new object structure. E.g. if the old property was called foo, add a private `-setFoo:` method. Alternatively, override the `-setValue:forUndefinedKey:` method to gracefully handle any unknown property. - -If you want more precise control of the coding, such as using different names for keys, etc. then you can implement the NSCoding protocol. By default, if a class implements NSCoding, FastCoder will rely on the NSCoding methods to encode the object instead of automatically detecting the keys. - - -Bootstrapping ---------------------- - -Sometimes it is useful to be able to define an object graph by hand using a human-readable format such as JSON, but it's tedious and error-prone to write the recursive logic needed to convert the JSON dictionaries to the correct custom objects. - -FastCoder has a neat feature that allows you to *bootstrap* a carefully structured JSON or Plist file into a native object graph via the FastCoding format. To define an object of class Foo using JSON, you would use the following structure: - - { - "$class": "Foo", - "someProperty1": 1 - "someProperty2": "Hello World!" - } - -You could then load this as an ordinary `NSDictionary` using `NSJSONSerialization`. But when you then convert this to data using FastCoder, it will detect the $class key and save this using the custom object record format instead of as a dictionary. When the resultant FastCoded data is decoded again, this will be initialized as an object of type Foo instead of a dictionary. - -If you attempt to load the FastCoded file in an app that doesn't contain a class called Foo, the Foo object will just be loaded as an ordinary dictionary with a $class key, and then saved as a custom object again when the object is re-serialized. This means that it is possible to write applications and scripts that can process arbitrary FastCoded files without needing to know about or implement all of the classes used in the file (this is not possible using `NSCoding`, or at least would require a lot more work). - - -Aliases ---------------- - -Another limitation of ordinary Plist or JSON files versus an NSKeyedArchive or FastCoded file is that they don't support pointers or references. If you want multiple dictionary keys in a JSON file to point to the same object instance, there's no way to do that. FastCoding solves this problem using aliases. - -As with the $class syntax used for bootstrapping custom object types, FastCoding treats a key with the name $alias as an internal file reference. The $alias value is a keypath relative to the root object in the file, used to specify an existing object instance. For example, see the following JSON: - - { - "foo": { - "baz": { "text": "Hello World" }, - "someProperty1": 1 - }, - "bar": { - "baz": { "text": "Hello World" }, - "someProperty2": 2 - } - } - -Here, the objects foo and bar both contain an object baz. But if you want foo and bar to both reference the same baz instance, you would do that as follows: - - { - "foo": { - "baz": { "text": "Hello World" }, - "someProperty1": 1 - }, - "bar": { - "baz": { "$alias": "foo.baz" } - "someProperty2": 2 - } - } - -Note that the baz inside bar contains an alias to the baz inside foo. When saved as a FastCoded file and the loaded again, these will actually be the same object. It doesn't matter whether bar.baz aliases foo.baz or vice-versa; FastCoder aliasing supports forward references, and even circular references (where an object contains an alias to itself). The alias syntax works like a keypath, although, unlike regular keypaths, you can use numbers to represent array indices. For example, in the following code, foo points to the second object in the bar array, "Cruel": - - { - "foo": { "$alias": "bar.1" }, - "bar": [ "Goodbye", "Cruel", "World" ] - } - - -File structure ---------------------------- - -The FastArchive format is quite simple: - -There is a header consisting of a 32-bit identifier, followed by two 16-bit version numbers (major and minor). The header is followed by three 32-bit integers representing the total number of unique objects, classes and strings encoded in the file, respectively (this is not the same as the number of chunks). These values can be used to set the capacities of the object caches in advance, which provides some performance benefit. If the object counts are not set (have a value of zero), the cache will be grown dynamically. - -Following the header and object counts, there are a series of chunks. Each chunk consists of an 8-bit type identifier, followed by zero or more additional bytes of data, depending on the chunk type. - -Commonly used types and values are represented by their own chunk in order to reduce file size and processing overhead. Compound or variable-length types such as strings or collections are encoded in the sequence of bytes that follow the chunk. - - -Migration from version 3.0 ---------------------------- - -Unfortunately, version 3.0 files crashed on ARM7/ARM7s due to data alignment issues (this was fixed in version 3.0.1). If you saved data using that version and need to recover it, do the following: - -Find the following macro in the FastCoder.m file: - - #define FC_ALIGN_INPUT(type, offset) { \ - unsigned long align = offset % sizeof(type); \ - if (align) offset += sizeof(type) - align; } - -Modify it to this: - - #define FC_ALIGN_INPUT(type, offset) - -Load the file and save it again. Now change the macro back again. - - -Release notes ------------------- - -Version 3.2.2 - -- Fixed warnings on Xcode 9 -- Fixed corruption bug when writing NSCoded archives containing nil properties -- Added tvOS support to Podspec - -Version 3.2.1 - -- Fixed possible alignment issue with Float64 types on 32-bit processors - -Version 3.2 - -- Fixed subtle bug where @YES and @1 were unexpectedly being treated as different keys in a CFMutableDictionary on 32-bit devices -- NSNumber values of 1 and 0 are no longer encoded as booleans (related to the above fix) -- Fixed leak when reading NSCoded objects - -Version 3.1.1 - -- Fixed crash when encoding classes where encodeWithCoder: contains an enumeration block - -Version 3.1 - -- NSDecimalNumber is now supported (previously was encoded as NSNumber) -- Fixed bug with NSCoding support -- Fixed alignment issue when reading encoded NSDate objects (dates are hard, OK?) -- Fixed crash when using FastCoding with ARC (but you still shouldn't use ARC) - -Version 3.0.2 - -- Fixed bug when encoding NSDate objects, due to alignment error -- Fixed bug where class and string counts were set incorrectly (minor performance impact) - -Version 3.0.1 - -- Enabled data alignment to fix crash on ARM 32 devices -- Files created using version 3.0 cannot be loaded, there is a manual migration process if needed (see above) - -Version 3.0 - -- Brand new file format that is both smaller and faster to encode/decode than before -- Added +propertyListWithData method for safely loading files from untrusted sources -- Parsing exceptions are now caught internally - in the event of an error, methods will return nil -- Fully backwards compatible with version 2.x files -- Fixed floating point precision bug -- Added support for CGVector type - -Version 2.3 - -- FastCoding now includes compatibility for NSCoding, so any class that supports NSCoding will now be encoded by calling the NSCoding methods instead of using the FastCoding protocol (this is slightly slower, but more compatible) -- Fixed a bug in NSIndexSet decoding -- Fixed a minor memory leak in FCClassDefinition -- FastCoding 2.3 is fully backwards compatible (can read any version 2.x file). FastCoding 2.3 files can be read by a 2.2 implementation provided that they do not include NSCoded objects - -Version 2.2 - -- Encoding NSIndexSet and NSMutableIndexSet is now supported -- Mac benchmark no longer relies on hardcoded path to json file -- FastCoding 2.2 is fully backwards compatible (can read version 2.0 or 2.1 files). FastCoding 2.2 files can be read by a 2.0 or 2.1 implementation provided that they do not include any of the new data types - -Version 2.1.9 - -- Now imports CoreGraphics if not already included in .pch file -- Fixed some new warnings that cropped up in latest Xcode - -Version 2.1.8 - -- Fixed memory leak when writing data - -Version 2.1.7 - -- Fixed crash when saving - -Version 2.1.6 - -- Fixed some conversion warnings when using ARC - -Version 2.1.5 - -- Major speed improvements to object encoding (decoding speed is unaffected) -- FIxed some potential bugs cuased by empty strings or collections -- Fixed some minor memory leaks - -Version 2.1.4 - -- Fixed bug when encoding NSURLs. - -Version 2.1.3 - -- Fixed issue where properties from inherited classes would not be coded -- fastCodingKeys no longer includes properties with nonstandard ivar names (this brings the behaviour in line with the documentation) -- Fixed some compiler warnings - -Version 2.1.2 - -- Fixed crash when loading bootstrapped objects -- Added benchmark for coding custom objects - -Version 2.1.1 - -- Fixed a bug where multiple aliases to an object that returns a different instance from -awakeAfterFastCoding would not work correctly. This fix improves the common case, but there are still some caveats (see the documentation for the -awakeAfterFastCoding method for details). - -Version 2.1 - -- Encoding NSURL and NSValue is now supported -- Immutable arrays, dictionaries and sets are no longer converted to mutable variants when encoded -- Added -classForFastCoding method (to avoid conflicts with NSCoding) -- Fixed a bug in object bootrapping when a $class dictionary does not contain a value for every property of the class that it represents -- FastCoding 2.1 is fully backwards compatible (can read version 2.0 files). FastCoding 2.1 files can be read by a 2.0 implementation provided that they do not include any of the new data types - -Version 2.0.1 - -- Fixed bug in NSDate serialization - -Version 2.0 - -- FastCoding 2.0 is not forwards or backwards compatible with version 1.0 files -- Added ability to automatically encode any object type -- Mutability of NSString and NSData objects is now preserved -- Added bootstrapping mechanism for creating native objects from plist/json -- Improved decoding performance - -Version 1.1 - -- Improved security by throwing an exception if unexpected EOF is encountered -- Improved performance when using ARC (but don't use ARC) -- Refactored to use polymorphic style for serializing (cleaner code) -- Refactored to use function pointer array for parsing (slightly faster) -- Now complies with -Weverything warning level -- Addd Cocopods podspec file - -Version 1.0.1 - -- Fixed bug in the aliasing logic - -Version 1.0 - -- Initial release diff --git a/StarterProject/Pods/Local Podspecs/MetaWear.podspec.json b/StarterProject/Pods/Local Podspecs/MetaWear.podspec.json index 4fb6fc5..48727de 100644 --- a/StarterProject/Pods/Local Podspecs/MetaWear.podspec.json +++ b/StarterProject/Pods/Local Podspecs/MetaWear.podspec.json @@ -1,40 +1,85 @@ { "name": "MetaWear", - "version": "2.10.0", + "version": "3.0.0", "license": { "type": "Commercial", "text": "See https://www.mbientlab.com/terms/", "file": "LICENSE" }, "homepage": "https://mbientlab.com", - "summary": "iOS/macOS/tvOS API and documentation for the MetaWear platform", + "summary": "iOS/macOS/tvOS/watchOS API and documentation for the MetaWear platform", "description": "This library allows for simple interfacing with the MetaWear Bluetooth (BLE)\nsensor platform. Stream or log a variety of sensor data via simple API calls.\nContact us at hello@mbientlab.com if you need custom hardware or help with App development.\nSee www.mbientlab.com for details.", "authors": { "Stephen Schiffli": "stephen@mbientlab.com" }, "source": { "git": "https://github.com/mbientlab/MetaWear-SDK-iOS-macOS-tvOS.git", - "tag": "2.10.0" + "tag": "3.0.0", + "submodules": true }, "platforms": { - "ios": "8.0", - "osx": "10.11", - "tvos": "10.0" + "ios": "10.0", + "osx": "10.13", + "tvos": "10.0", + "watchos": "4.0" }, "social_media_url": "https://twitter.com/mbientLab", - "documentation_url": "https://www.mbientlab.com/docs/metawear/ios/2.10.0/index.html", - "source_files": "MetaWear/{Assets,Classes,Internal}/**/*.{h,m}", - "private_header_files": "MetaWear/Internal/**/*.h", - "frameworks": [ - "CoreData", - "CoreBluetooth" - ], - "dependencies": { - "Bolts/Tasks": [ - "~> 1.8.4" - ], - "FastCoding": [ - "~> 3.2.2" - ] - } + "documentation_url": "https://mbientlab.com/cppdocs/latest/", + "default_subspecs": "Core", + "subspecs": [ + { + "name": "Core", + "preserve_paths": "MetaWear/MetaWear-SDK-Cpp/src/**/*", + "source_files": [ + "MetaWear/Core/**/*", + "MetaWear/MetaWear-SDK-Cpp/src/metawear/**/*.cpp", + "MetaWear/MetaWear-SDK-Cpp/bindings/swift/**/*" + ], + "compiler_flags": [ + "-Wno-documentation", + "-Wno-comma" + ], + "pod_target_xcconfig": { + "SWIFT_VERSION": "4.0", + "HEADER_SEARCH_PATHS": "$(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src", + "SWIFT_INCLUDE_PATHS": "$(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src" + }, + "frameworks": "CoreBluetooth", + "dependencies": { + "Bolts-Swift": [ + "~> 1.3.0" + ] + } + }, + { + "name": "AsyncUtils", + "source_files": "MetaWear/AsyncUtils/**/*", + "dependencies": { + "MetaWear/Core": [ + + ] + } + }, + { + "name": "UI", + "source_files": "MetaWear/UI/**/*", + "dependencies": { + "MetaWear/Core": [ + + ], + "MetaWear/AsyncUtils": [ + + ] + } + }, + { + "name": "Mocks", + "source_files": "MetaWear/Mocks/**/*", + "dependencies": { + "MetaWear/Core": [ + + ] + } + } + ] } diff --git a/StarterProject/Pods/Manifest.lock b/StarterProject/Pods/Manifest.lock index 2725c7b..01b4d36 100644 --- a/StarterProject/Pods/Manifest.lock +++ b/StarterProject/Pods/Manifest.lock @@ -1,25 +1,33 @@ PODS: - - Bolts/Tasks (1.8.4) - - FastCoding (3.2.2) + - Bolts-Swift (1.3.0) - MBProgressHUD (1.1.0) - - MetaWear (2.10.0): - - Bolts/Tasks (~> 1.8.4) - - FastCoding (~> 3.2.2) + - MetaWear/AsyncUtils (3.0.0): + - MetaWear/Core + - MetaWear/Core (3.0.0): + - Bolts-Swift (~> 1.3.0) + - MetaWear/UI (3.0.0): + - MetaWear/AsyncUtils + - MetaWear/Core DEPENDENCIES: - MBProgressHUD - - MetaWear (from `../`) + - MetaWear/AsyncUtils (from `../`) + - MetaWear/UI (from `../`) + +SPEC REPOS: + https://github.com/CocoaPods/Specs.git: + - Bolts-Swift + - MBProgressHUD EXTERNAL SOURCES: MetaWear: - :path: ../ + :path: "../" SPEC CHECKSUMS: - Bolts: 8a7995239dbe724f9cba2248b766d48b7ebdd322 - FastCoding: f7b1b75a2ccb0dd6ef9c928e46339e20252d98d3 + Bolts-Swift: fa98d1b59fc1acea9b21a21306dcdca1c85e3737 MBProgressHUD: e7baa36a220447d8aeb12769bf0585582f3866d9 - MetaWear: a30bf8ff348feca9095f8952d927987aca1daf52 + MetaWear: db411d9e682ce4845a3e187a6de0b8cca16b726d -PODFILE CHECKSUM: 097e07f8cd09329bd0f334824e32a3f7be4e05a0 +PODFILE CHECKSUM: 981b4467a7e96b3f253edb1f00bd9efa48322787 -COCOAPODS: 1.3.1 +COCOAPODS: 1.5.0 diff --git a/StarterProject/Pods/Pods.xcodeproj/project.pbxproj b/StarterProject/Pods/Pods.xcodeproj/project.pbxproj index b1f730e..a7f98a9 100644 --- a/StarterProject/Pods/Pods.xcodeproj/project.pbxproj +++ b/StarterProject/Pods/Pods.xcodeproj/project.pbxproj @@ -7,1899 +7,578 @@ objects = { /* Begin PBXBuildFile section */ - 007A5F935E0FE09D37DCF0CE578020E5 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = ADA36E2FB695216C6920CF5C44FADC0D /* MBLAccelerometerBoschAxisReadyEvent.m */; }; - 00A8F46F23B8D5039B9847D1C6396394 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 999B80E344EA0797D0E594D2D30B9316 /* MBLGyroBMI160PackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 00C0D8776DA62FC9382C79B1C81BE913 /* MBLAccelerometerMMA8452Q+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1081563FA3CA893D64CD1D5FB19AA7ED /* MBLAccelerometerMMA8452Q+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 00C6D900C7849201DDF56DD4CE31DF30 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = D10DA96DC36AFE7F2E340BC3750A953E /* BFCancellationTokenRegistration.m */; }; - 00D10D7F9C39ABADF84177B299DE0DF7 /* MBLBarometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BCAB87B93748180D874EBBE46884B60 /* MBLBarometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 018707828F66FFDAD824EB2CC6594AAE /* MBLAccelerometerBoschFlatFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 23D4B75048CEA0D5AB05EAB2BD22D828 /* MBLAccelerometerBoschFlatFormat.m */; }; - 01C3B136C7E32FE2262B3CD7E42EEE41 /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = B70F33756D167A4FA310EF2A63F4E43C /* MBLAccelerometerMMA8452QRMSFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 01EE7393188F3D5F59BFCB78C8FD882A /* MBLCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B490A15EF33E626D39F6446407ED61B9 /* MBLCategoryLoader.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0263E752BBF07F4E3740DFA8EB5FD243 /* MBLAmbientLightLTR329.h in Headers */ = {isa = PBXBuildFile; fileRef = 667FE6FDD9DCB968C5507339B636F7D2 /* MBLAmbientLightLTR329.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 028754DCAA6C8911AE61FBD502BFEC49 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 062038508A0820C10A3AFACC41299093 /* MBLAccelerometerBMI160MotionEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 02D9114B6C63546D882B6EEB94977976 /* MBLAccelerometerOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A245E852C9DB3427462FC00076A2E163 /* MBLAccelerometerOrientationEvent.m */; }; - 031B559C34052F802BF87B08AA027008 /* MBLSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 23C7F2C4631BE97E6D0C65409A5C18AA /* MBLSettings.m */; }; - 031D6CD281D02EEC039D2551D6ABFA47 /* MBLAccelerometerBMI160MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 361ED24982D138D7DE2FB8AB055756C5 /* MBLAccelerometerBMI160MotionEvent.m */; }; - 0357FA7328CE79C263359412EDBB5351 /* MBLBarometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = C7D606484687C0BF332DCA330EFEC20B /* MBLBarometerBME280.m */; }; - 03BCCB9D790D54D373EE86D4A56AB689 /* MBLDataSample+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6259021266C0186D832790E6BADA3B3F /* MBLDataSample+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 046CEBDD8D9326BC344D84A651071897 /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F14222E245444E2244484CB57521B /* BFTask+Exceptions.m */; }; - 047D8202411B0D9D39C6E91E2728EE28 /* MBLAmbientLight.m in Sources */ = {isa = PBXBuildFile; fileRef = 52B98D79F80CCB0DF0D3549529A16F8F /* MBLAmbientLight.m */; }; - 0482099FFA08CE7F03A139E68F64B042 /* MBLConductanceData.m in Sources */ = {isa = PBXBuildFile; fileRef = FBE75E185B5C873EDD2E213F6BABCFEB /* MBLConductanceData.m */; }; - 04930BEAF55130FB9CD1DA128D88A05F /* MBLMechanicalSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C69BBA6C8D57F081647489D73293AA /* MBLMechanicalSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 056874E995CD6DA3F55C40AAFC656DCE /* MBLAccelerometerDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F4530EAE9B7DD9CFBFC2D0514B7E8A5 /* MBLAccelerometerDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 056AEED7D516692E0186D2AED398C910 /* MBLLoggingV2.h in Headers */ = {isa = PBXBuildFile; fileRef = FF68DD5BE6FD81CB7D400B9F8020E4AF /* MBLLoggingV2.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0633BB2F7E7AD46B97A37492D76B37F7 /* MBLGyroData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C6ED4316FF4C55F5D679E4A3A2E1BCC5 /* MBLGyroData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 06697F99A1ED141E5EE2C2DE58DBD95E /* MBLMetaWear+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 268C80524B2B2E30FEBB681C265CA05A /* MBLMetaWear+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 06A454588CF8176103530DB26A4418F5 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 172FA2D73597B91F0A83B07FB8E84F95 /* MBLAccelerometerMMA8452QOrientationFormat.m */; }; - 06C6F5AB79D6964167973306E6140CB3 /* MBLBluetoothPeripheralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 606EB73B59EF05A3719E7D85B32CE998 /* MBLBluetoothPeripheralMock.m */; }; - 06E79CB8874D925C04B1CEBCF5142780 /* MBLAccelerometerBMA255.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BEDBB7E24ED6EAA39173671F4ED72C2 /* MBLAccelerometerBMA255.m */; }; - 06EA24E33D9774729D9E174E6E61CC4B /* MBLPhotometerTCS3472Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C89D7E66B301BD38A7BEF9EFDE1766 /* MBLPhotometerTCS3472Format.m */; }; - 07580FD6D881402EB4D339B31D138686 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D9CF207753D00EA14C7FF077C2A7B77 /* MBLAccelerometerBoschAxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 07C4E2D0B0F91AFBEFA7D0B1E91CA900 /* MBLPhotometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CAE92F1F49B9AECE922BB817092AD0D /* MBLPhotometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 07E3CD3DF6ABE5C924CF495443421875 /* MBLTemperatureV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 6658DCB0C8125070E497B535C99E441D /* MBLTemperatureV0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 08088D5A5CB6B957288AF72ABDB6BC05 /* MBLAccelerometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = F44C28B27EDCD1478ADEFADF3B1B3362 /* MBLAccelerometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0838652626DF4DF0D8BA4CF0321CFB98 /* MBLAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = EA1D0D5468EE4C60F6520CA42C739533 /* MBLAccelerometer.m */; }; - 0853A9164A8F8AC9F42443E2A2A948D4 /* MBLDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0839AC074757922706A96E05EB0C5F43 /* MBLDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 08E9A1274D0437A7BB417633A7C5D866 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A5F62FE96D6A8B0861EF4045CB3F6036 /* MBLBarometerBoschPeriodicAltitudeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 08FAE697CA9747D677CFCEA5D1F49771 /* MBLGyroBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E74149B503E1A320D20F5F1BE50BC3 /* MBLGyroBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0990E6F8EC21448A02065F70372BEC80 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 207BFB192A72F39904B415B8A2423B7D /* MBLAccelerometerBMA255MotionEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 09BADE6E4396019B0E68E36890DE75AF /* MBLOrientationData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CECC196826DFE764A258D986CDA3D2C /* MBLOrientationData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 09D593070F455C6FF7A095D51CCE4CB0 /* MBLRMSAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 863E9035951E1AF3B90CAA3ADF4DACA4 /* MBLRMSAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0A31FF5D1FEE21A05D8FBC40341CE7BC /* MBLProximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE5DB293EAAAC3B450A32C1015827C3 /* MBLProximity.m */; }; - 0A5970F6BA0F5DDECD284EBB2A130409 /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = B115D36606B4AADD761217DB4C2A9A05 /* MBLHygrometerBME280PeriodicHumidityEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0A916CD5F577DA64668F53B8F396ECDA /* MBLCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD0CE2FF96D7D91B4C7D4AFCFE078B9 /* MBLCategoryLoader.m */; }; - 0AA23F0619596C63D5FC5D1FAD7F31C9 /* MBLAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = C4FE8BC8F7BFCBEAF055DBFCFEC485A0 /* MBLAnalytics.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0ABA0EA6F7E399876B01D8A8E3CE24BA /* MBLMagnetometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B6A31958CC8C516388975A773C8697 /* MBLMagnetometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0AE33F1B4AC881B4810D0FAE120CB2E0 /* MBLModuleInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CC6647544C92E237C5E58817ABF815 /* MBLModuleInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0B1D56452FE79C121AFE12C902E24B35 /* MBLEntityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 69F1D92E6B0195B84FE57CEC17068B37 /* MBLEntityEvent.m */; }; - 0B213C4CA7123C414639B7E10D5B6569 /* MBLBarometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BCAB87B93748180D874EBBE46884B60 /* MBLBarometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0B9E4B3149C7FE2E0902F369313E3D9E /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D9CF207753D00EA14C7FF077C2A7B77 /* MBLAccelerometerBoschAxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0BBF6F7AA8390710827AAA2DF7D9DD5B /* MBLEntityEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B00644538655FE4FD0C408206C17228D /* MBLEntityEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0C2864B3BE7B398C7EE97B7BC24748DB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C0572D9E03034C6B04220BC00D04F3A /* Foundation.framework */; }; - 0C478C11AA543C802EC73CCACA336701 /* MBLAccelerometerBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 33D764F5B99B1EC4BE551C6C7B35BCC7 /* MBLAccelerometerBMI160.m */; }; - 0C9D10D3F81E02FE7E09410F302753B2 /* MBLLoggingV0.h in Headers */ = {isa = PBXBuildFile; fileRef = BE4FB9FDAC472B413A57ED7CF855DEFD /* MBLLoggingV0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0D11324AC042B61DFCE54E1E11626DC3 /* MBLAccelerometerBoschFlatData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EDA4D0170274F95965943E2192C6DC68 /* MBLAccelerometerBoschFlatData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0D4966532746B0EBD685C33BEB8B6F85 /* MBLAccelerometerAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F05FB3AC8B8267ADA435588032133517 /* MBLAccelerometerAxisReadyEvent.m */; }; - 0DB6D8CB4D06B9251D66914573CC927E /* MBLProximityTSL2671.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A798DDB18A3E28FD00125FCEE626FA1 /* MBLProximityTSL2671.m */; }; - 0DF591DC3BE147CC5296DB50B9781AA9 /* MBLMetaWearManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1BBDE1DD563096720D8D866FF4DB4F /* MBLMetaWearManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0E0B8938BF5455B2C92C538774A70AE0 /* MBLDataSample+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6259021266C0186D832790E6BADA3B3F /* MBLDataSample+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0E3CFBFC273766D86EE9916F1EDB1E4C /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = B115D36606B4AADD761217DB4C2A9A05 /* MBLHygrometerBME280PeriodicHumidityEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0F6F04A40588C03B6EC7574E5B4C0A3B /* MBLAccelerometerMMA8452Q.h in Headers */ = {isa = PBXBuildFile; fileRef = C84458D72208FA0A9801EE0C9D88C10E /* MBLAccelerometerMMA8452Q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 0F822D2B59CD1FB7B38A046FB2887C09 /* MBLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B3A7CE6F23ABA370AA9B3A15AB2B67 /* MBLConversion.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0FA60738F8B91DF83022CC398E5BFD4A /* MBLRMSAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C89BB07023ED287565C2905593ACBB92 /* MBLRMSAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 0FAD7AA5CF796DC301B76E2C79BB7481 /* MBLAccelerometerBMA255MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A1C20C69C1F11101F8A5AEA7CC3BCFD /* MBLAccelerometerBMA255MotionEvent.m */; }; - 100BE1ACAF639F284684592FF36CEB6A /* BFTask+MBLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BDEC1B0CD69077F22F35CBFCBF3196BF /* BFTask+MBLPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1086A24837D37955068B2D6B95B2882A /* MBLBarometer.h in Headers */ = {isa = PBXBuildFile; fileRef = EF09D6F1F9512C264519E29311940625 /* MBLBarometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 10E99514ABABE27921AFCB96748A9F51 /* MBLTriggeredRead.m in Sources */ = {isa = PBXBuildFile; fileRef = DB9E3B0C0143094BF1E25BD373A05CF9 /* MBLTriggeredRead.m */; }; - 1108F215FCBC2BF74316E7837C978EA8 /* MBLConductance.h in Headers */ = {isa = PBXBuildFile; fileRef = 092C07496FB9BDB608711C9FD3FC05BC /* MBLConductance.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1130F099490C4FE71C3DEA4AE1B2EB39 /* MBLAccelerometerMMA8452QFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F41068E6EDA92E05A9EF6BB15369A327 /* MBLAccelerometerMMA8452QFormat.m */; }; - 115C7C68CE11CA439B24F5F34FB3A781 /* MBLBluetoothPeripheral.h in Headers */ = {isa = PBXBuildFile; fileRef = 959AB88023DAC11C162E060851EAF248 /* MBLBluetoothPeripheral.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 117621719C75A193F9C4378074F1FCA5 /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F69E657022FBB3BFC4F9645E201C9A41 /* MBLAccelerometerBoschPackedDataReadyEvent.m */; }; - 1184D96263A807FD725620C0C7C35047 /* MBLQuaternionData.h in Headers */ = {isa = PBXBuildFile; fileRef = F9779743BB0779445345CE025777D106 /* MBLQuaternionData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 11854CBBF61F302CE3F0950F7AC0ECA2 /* MBLEulerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6017B957E6C2CA4CF3F4D7052EDB2C39 /* MBLEulerFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 11D2423EBB09EE63FFD04A74D600A80A /* MBLGyroBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E74149B503E1A320D20F5F1BE50BC3 /* MBLGyroBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 12123103B1106D8EC10B68333174E6D4 /* MBLGyroData.m in Sources */ = {isa = PBXBuildFile; fileRef = A13D336140C6DEDD777F645BE4DF3B7D /* MBLGyroData.m */; }; - 1236E6FB18664CFF5BFFDDF969F8D31F /* MBLTemperatureV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 6658DCB0C8125070E497B535C99E441D /* MBLTemperatureV0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 123E8E5446320755EEFA7AF567D3F472 /* MBLBarometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 152E66FF201A94616AFB7BD1F2FF05A6 /* MBLBarometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1294F304C31FCC4A19035E79E9FEC44C /* MBLGPIOPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B73C063AF59387AEB21A691DC36720D /* MBLGPIOPin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 130ECF256BB78A590629D34025336F90 /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D5B7CB99D2B0CDC0A260E478493EF8D /* MBLAccelerometerMMA8452QRMSFormat.m */; }; - 1351E5CFB014D295A32D74D6693EEC61 /* MBLEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6509C8C65CA28F032A641699AEFF71CE /* MBLEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 137E9F681D6303248F0F5DFD076D9E19 /* MBLEntityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 69F1D92E6B0195B84FE57CEC17068B37 /* MBLEntityEvent.m */; }; - 138118CE22A7DD1D5157AA6807134F40 /* MBLANCSEventData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E2B5EE129D83B149A06CCA4B37C894D /* MBLANCSEventData.m */; }; - 13947F3A08967161B50A45FA6F1ED179 /* MBLRMSAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 863E9035951E1AF3B90CAA3ADF4DACA4 /* MBLRMSAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 13BE50729505159CD5E4EC724D6028A1 /* MBLGPIOPin+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EE024F5D66D6ACBD750318E522672E62 /* MBLGPIOPin+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 13F246B9EE3839F4C1C454D9C03B6357 /* MBLExternalThermistor1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8054F93E6D42DC6A34994588A10AE395 /* MBLExternalThermistor1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 14338195F91A77F854F4F724DA7D856B /* MBLTemperatureV0.h in Headers */ = {isa = PBXBuildFile; fileRef = 6658DCB0C8125070E497B535C99E441D /* MBLTemperatureV0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 143665E529D073BE98C784DF9F3926EF /* MBLMovingAverage.m in Sources */ = {isa = PBXBuildFile; fileRef = 33FCF62EE29EAEB61B0798123DACA455 /* MBLMovingAverage.m */; }; - 147C99F3CE0C392DF7757EDB0CDE0CE3 /* MBLAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4646EED1655B7225F08B814330EC1A7C /* MBLAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 14E4944B5900DD472818E4F41344BCA4 /* MBLTriggeredRead.m in Sources */ = {isa = PBXBuildFile; fileRef = DB9E3B0C0143094BF1E25BD373A05CF9 /* MBLTriggeredRead.m */; }; - 1609AE32BE8073A8F3ECC4AF812E13D0 /* MBLBluetoothCentral.h in Headers */ = {isa = PBXBuildFile; fileRef = 432403714E611FF7BE6154CE961F4250 /* MBLBluetoothCentral.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 163E1A0658B7C26929F445A7628B1A40 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2A68EACC91CAAC95762EC992300966 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 16491DE660C29D0387338693834CCA4B /* MBLDispatchQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 41D4C40BFB8F6904AB91AFDE99FBF1BA /* MBLDispatchQueue.m */; }; - 1656B2CEDB6A30CF8960BC12BEBA56CF /* MBLConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = 281F942BD483B5AA0F5F85DD304B6613 /* MBLConversion.m */; }; - 16A8BF9AF6BFD6334E0C902EC2EF01E8 /* MBLGPIOPinChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AD4735DDB0C827E61EAD3079BF9F48 /* MBLGPIOPinChangeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 16EEEE7F4D6ACCF3A652F02A8A09EA8E /* MBLAccelerometerBoschTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EF6751A4DC10EFEC4854078BC5450F20 /* MBLAccelerometerBoschTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 173F27F86D557710683C3877F92D9E63 /* MBLEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D055002FFB17C8EFDD48660E35E6005 /* MBLEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1751903853DF56C5374AC2BFD18A7A84 /* MBLTemperatureV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 76D3C5C522E631CD62211B6A10A59906 /* MBLTemperatureV1.m */; }; - 1754A4474037656F2025C75DD15C96D8 /* MBLSerial.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D47EFF60E4C35624057BD74F164FED /* MBLSerial.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 176714F1C8D585BC4BC9B9311E04415C /* MBLAmbientLight.h in Headers */ = {isa = PBXBuildFile; fileRef = 82CE7DAC5F60556447508756C4E8F51D /* MBLAmbientLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 179A16B937582359FF4A4011E358CAC5 /* MBLNeopixel.m in Sources */ = {isa = PBXBuildFile; fileRef = D35056D85FD1D73A2248A8740AD67A57 /* MBLNeopixel.m */; }; - 17A2040A905F3CE230935C2970129C8C /* MetaWear-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 704061BDD1CE1F0A43981744793667D1 /* MetaWear-macOS-dummy.m */; }; - 17C5072135E71C3005BD497AD08F34D2 /* MBLiBeacon.h in Headers */ = {isa = PBXBuildFile; fileRef = 656F14665616943F45AC63474738055B /* MBLiBeacon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 17C6ACD813A952FDD50BCFA677D1859D /* MBLLoggingV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AA1285865F5EFEA7063678C325141C /* MBLLoggingV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 17D8C40392E9C09D0C11C3CAAAEBD7BE /* MBLMetaWearManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 54F14BC835BED9B7143848F9E2E659E7 /* MBLMetaWearManager+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1807147394C536FFB21A1773A896743E /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = DBA14B83EB16970888BC823DCB27D0DE /* MBLAccelerometerBoschLowOrHighGEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 18432B2373F051FC06EAAD817879D114 /* MBLBitmaskEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F865DC2E67227DAA5EE2F439D5387DA /* MBLBitmaskEvent.m */; }; - 1884E7E848371AA88625FF6C9487F3AE /* MBLDeviceLookup.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A1CFEDCF8D9E2970D011A98BA41516 /* MBLDeviceLookup.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1887829CCEB945F82C1E24F20F2E908E /* MBLBarometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = C7D606484687C0BF332DCA330EFEC20B /* MBLBarometerBME280.m */; }; - 18C409E5AC14E6D3AE70719A00F9E6AC /* MBLFilter+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F55C51DAE936C836EF541084E24B60E /* MBLFilter+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 18E3BD82D02E6EAAAFE5B73EAEACEBA8 /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A474AB6E2E2CA0DA6C14DBEB43951265 /* MBLAccelerometerBoschPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 193110AB48A0E19860362CB957394874 /* MBLMockUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F44FE55A5E98E6D8AC3E760780EF5E2 /* MBLMockUtils.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 195276FC91950470CEFDC3B929DC01F4 /* MBLMagnetometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 24D72AD39D3634D27DC081E4D87585BA /* MBLMagnetometerData.m */; }; - 1957D848BFE70BEF89ECE674E564EB32 /* MBLEulerAngleData.m in Sources */ = {isa = PBXBuildFile; fileRef = CAA65D05E75DE377B086744D71B8C1FE /* MBLEulerAngleData.m */; }; - 19B9EA746720828F076A4F592650933F /* MBLBarometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B7D355831A50F19EE21A3AA550982E0 /* MBLBarometer.m */; }; - 19D87C0C89730B9146CB313026EF37E1 /* MBLProximity.h in Headers */ = {isa = PBXBuildFile; fileRef = 17235EF49A060133B6160184A954CF3B /* MBLProximity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A0E8C176BDF5300C23B0255524130DB /* MBLSPIData.m in Sources */ = {isa = PBXBuildFile; fileRef = D20073129429570646FABC385B7A5A9B /* MBLSPIData.m */; }; - 1A3B8592B9063295FB4E8B536A9D0680 /* MBLBluetoothPeripheralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = CC5A95481671F9338C7026FE94A5DF8A /* MBLBluetoothPeripheralMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1A7639922F5EFD267C27F5DF651EAAC2 /* MBLAccelerometerBoschOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FE8178DDBF5ECA3097B097B4826CBA7 /* MBLAccelerometerBoschOrientationFormat.m */; }; - 1A7E1FDE13C9AFDC237D075BDFF21F3D /* MBLDeviceLookup.m in Sources */ = {isa = PBXBuildFile; fileRef = 86E1D090FC147E56789D44771ED27CC8 /* MBLDeviceLookup.m */; }; - 1A8A3A5C6373B9A5558316C9A199F6E3 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC1499FF61B9E6574CE31364FA9D2B1 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1A9C6DC010EF5DFBE503AB9E44DD6EBC /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A390610F982814D7D440FF84A47DB46D /* Foundation.framework */; }; - 1ADEBFAD28FED1ECAEE88CF663EB053B /* MBLOrientationData.m in Sources */ = {isa = PBXBuildFile; fileRef = 981644CDA9C010F4972FAA55611E3E3B /* MBLOrientationData.m */; }; - 1AF35D798F76AB4EEA83FBF5E9803BA9 /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 081D7D7A834CA695B5960AF3CB99F844 /* MBLAccelerometerBoschLowOrHighGEvent.m */; }; - 1B162E7D2B85F7F94F2A9DC5ECFA3D31 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F5712A92A2039700975BCEC60516F2A /* CoreGraphics.framework */; }; - 1B3D69A795F5DB5B6B42B9C15E75B8B2 /* MBLTimer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E7206C6D035ED95789E77DFDCD5BAADE /* MBLTimer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1B6FA1EB71F39B9C8FE081506F21AD08 /* MBLAccelerometerBoschFlatFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 23D4B75048CEA0D5AB05EAB2BD22D828 /* MBLAccelerometerBoschFlatFormat.m */; }; - 1B8FA404CF9B6E08E0031C56577E364A /* MBLBitmaskEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AD91C5A54D69D8FC1A1F1279364850 /* MBLBitmaskEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1C7ADA7278632D8B54635091B5DE967F /* Pods-Starter-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = A5451082E0834788675C40629C4DE03A /* Pods-Starter-iOS-dummy.m */; }; - 1C8A5A74FA30EF234CC40119E3F83941 /* MBLSensorFusion+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A26B9116DB8E62C6D25B45482B11FBE /* MBLSensorFusion+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1D3E27DE12C010B75C797DDA6013B4AE /* MBLiBeacon.m in Sources */ = {isa = PBXBuildFile; fileRef = D1FF06642DBC4FFC0B2B829104D421CD /* MBLiBeacon.m */; }; - 1D41C0220539BCC48DEED8F8E2913B4B /* MBLGPIOData.m in Sources */ = {isa = PBXBuildFile; fileRef = 22A04A37C49AAF2FBC39F33DF7915A35 /* MBLGPIOData.m */; }; - 1D543D8E1465F2BAEEF1970856731564 /* MBLMetaWearManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 54F14BC835BED9B7143848F9E2E659E7 /* MBLMetaWearManager+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1D97F6B078C80889883AD3D1CBCDB6AE /* MBLLoggingV2.m in Sources */ = {isa = PBXBuildFile; fileRef = E7FCF970780F8D7CD3B2B0E5F719748F /* MBLLoggingV2.m */; }; - 1DCE35ADC3F86E93B18EC9932B9FAFBF /* MBLAccelerometerBMA255MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A1C20C69C1F11101F8A5AEA7CC3BCFD /* MBLAccelerometerBMA255MotionEvent.m */; }; - 1EA010232B0FF1DEC4AE0C159A988FF7 /* MBLPhotometerTCS3472Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF58587D0E4D84D2A2CAD8A2E5B3F43 /* MBLPhotometerTCS3472Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1EBFF5114884178DD262F512653A1034 /* MBLSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 23C7F2C4631BE97E6D0C65409A5C18AA /* MBLSettings.m */; }; - 1EDF498579F01D17226D1373A1AF521E /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 7363ED845F28AB97287B35E39CCDC238 /* BFTask.m */; }; - 1F013FB42FF60A5AEDC2B0D1A840055F /* MBLLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = DEE0335A76FAAF539900AA6D34E2F76F /* MBLLogging.m */; }; - 1F20B4873A6190061D845DB8731DA24E /* MBLHygrometer.m in Sources */ = {isa = PBXBuildFile; fileRef = CA4A1F9105F65278463AB28856E1DD2F /* MBLHygrometer.m */; }; - 1F44842175C66F2DB12B81AB3254E442 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C36465A5F194D2A078B19C566482E5F /* CoreGraphics.framework */; }; - 1F5348BEEA5B06F0FD5A9FB2C4914DE1 /* MBLProximityTSL2671.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A798DDB18A3E28FD00125FCEE626FA1 /* MBLProximityTSL2671.m */; }; - 1F75920457EEDF425C639CE39A2A247B /* MBLEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D055002FFB17C8EFDD48660E35E6005 /* MBLEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 1F849E5A46B41DADB32D0A55BF89BFAE /* MBLBarometerBMP280.m in Sources */ = {isa = PBXBuildFile; fileRef = 9203157C9B5F34C2D630EC2DCAAA7A63 /* MBLBarometerBMP280.m */; }; - 1F8D4091A0D5FC723AB73418FB269D6D /* MBLRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDF8C838AC5CDC445B42F979FBDAC51 /* MBLRegister.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 1FEC8F0EF7FA87813324461E67C7B10A /* MBLOrientationData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D165D933792FAC7CD7E487418BA0372 /* MBLOrientationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 202194E42F1F6B3FF36A747DC172D7A4 /* MBLAmbientLightLTR329.h in Headers */ = {isa = PBXBuildFile; fileRef = 667FE6FDD9DCB968C5507339B636F7D2 /* MBLAmbientLightLTR329.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2033467B97A189AC77EA051852114065 /* MBLAccelerometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 227DD8EB5493B11D84B1611388D7B876 /* MBLAccelerometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 20344C8B76AAF1FA62C12955050A8385 /* MBLCorrectedFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A281F1299DAC68B29A2FFDD77F54AD6E /* MBLCorrectedFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 207A715B49E51A95DDD52D66B10CB354 /* MBLData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D6ACD4F53E85B97F12F359D00E79C610 /* MBLData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 208CE7958AB66DD45D7AB319E4C22646 /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A474AB6E2E2CA0DA6C14DBEB43951265 /* MBLAccelerometerBoschPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 209FADE609951DEB783C949F19C2FA79 /* MBLiBeacon.m in Sources */ = {isa = PBXBuildFile; fileRef = D1FF06642DBC4FFC0B2B829104D421CD /* MBLiBeacon.m */; }; - 20F7690285E72B3E6220E9A1F686CB36 /* MBLGPIO+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E309FA5671BF963CA0BB99B55E5F6FD /* MBLGPIO+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2110F182CB0C39150B6BBD3A67290A8C /* MBLStringData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1397B8415354E57CA0415FD804EAA630 /* MBLStringData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2112C0B6E641100E8199806D3A0C0E9B /* MBLConstants+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DB01C6F682F5A01DBF66F2B08662B46 /* MBLConstants+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 213E27EB1EA48B0D5A51E5ADF413DF82 /* MBLLED.m in Sources */ = {isa = PBXBuildFile; fileRef = FC6957324B1EF69DC57A843B7DF24A0B /* MBLLED.m */; }; - 22222295D117BDAAE2EF7B7BD0E500FB /* MBLHygrometer.m in Sources */ = {isa = PBXBuildFile; fileRef = CA4A1F9105F65278463AB28856E1DD2F /* MBLHygrometer.m */; }; - 22443624992BCE5C75A8C7575559959E /* MBLDownloadOnlyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2760600C17CE3E9ED9744899937B5799 /* MBLDownloadOnlyEvent.m */; }; - 2279F6588C6299302A271FBA8A453395 /* MBLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B3A7CE6F23ABA370AA9B3A15AB2B67 /* MBLConversion.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 22FAF3ED28FA0B3D624A06DB239E1A2D /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 73232EE235678E12A8D3D2A1E3D6C1D4 /* MBLHygrometerBME280PeriodicHumidityEvent.m */; }; - 230EC01645588E5B7D9C58A51AA033D9 /* MetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 26436F719298208FEF75335BA19CD0DA /* MetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 233D0AEF7CE36309B8F7A420075A9740 /* MBLMockPeripheralFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 998B663E822CF022104FFFFC53613FC0 /* MBLMockPeripheralFactory.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2394317D164847044865DB60AD261581 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C1F1308812099E58753AEE34BA7BB55 /* CoreBluetooth.framework */; }; - 2404D14D2F246A434EE0C1A5B84D6DDE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C0572D9E03034C6B04220BC00D04F3A /* Foundation.framework */; }; - 24115C81696A22509B46744B4404DC3D /* MBLGyroData.h in Headers */ = {isa = PBXBuildFile; fileRef = 61BCBD52E7383CADF427953727B943A7 /* MBLGyroData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 246BEE6333AEAD3A0A2453E573D8BC3A /* MBLEulerAngleData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BFED5A2B9A105DCF96490C518361A50 /* MBLEulerAngleData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 24B605934CC532948A4D8A04C503EBBB /* MBLFilter+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F55C51DAE936C836EF541084E24B60E /* MBLFilter+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 252234E5BB2DCC6BC3C2234938B8D15F /* MBLAccelerometerBoschFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 289EFCFE9074EB09D61042A67F1CB9AC /* MBLAccelerometerBoschFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 25402D1EA49A28ADF599A27820333568 /* MBLGyroBMI160Format.m in Sources */ = {isa = PBXBuildFile; fileRef = D9C252AFF8BB0956C98DE543968E2066 /* MBLGyroBMI160Format.m */; }; - 25438E9EE2B4EDC394BB5DBAFD50B679 /* FastCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DA61D4744EC46627267FA744013E0589 /* FastCoder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 254CCE6F46947D196F937F326C3B132D /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A332C200F72820570A10F894CE18588 /* Bolts.m */; }; - 255049C34DF850BCC81B63EB27D15DAA /* MBLMockUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A01A75152EFBAC91B18298FABEEA3047 /* MBLMockUtils.m */; }; - 25EB0FBA30E094568C065E1BC4BA4696 /* MBLMacAddressFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9046915089B8C866F632E74C372B90F6 /* MBLMacAddressFormat.m */; }; - 25F80B2F656307D6410D9D1E1EB1C3D1 /* MBLBarometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EF3AF0D81EBDB21ED461275346CB1158 /* MBLBarometerBosch+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2608A2B732BEAB17360E29B17B7F87EF /* MBLTestDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = A7CB624F324B3C20D299DC3EEF4DEBEB /* MBLTestDebug.m */; }; - 2617E166D2F6D3E7EF6847DDEABE7583 /* MBLOnDieTemperature0.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EACF36CC75B1953FD7F7A4F613CC43C /* MBLOnDieTemperature0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 261A6D1A6FEBB1682DE32724312F00C4 /* MBLTemperatureV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D8062A60FDD5F2D81372764F8C172A3 /* MBLTemperatureV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2630BEE87165E7AA06DA5E94E4556FFF /* MBLModuleMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B00B1B667709822576FBFD9DDAB1218 /* MBLModuleMock.m */; }; - 26384010544EEB78D82A39090D605576 /* MBLDependentData.m in Sources */ = {isa = PBXBuildFile; fileRef = 91BAE67E444C7034D747E48A7F4A4F47 /* MBLDependentData.m */; }; - 26873FCD7E76937A1FE7BBF82D8869B9 /* MBLNeopixel.m in Sources */ = {isa = PBXBuildFile; fileRef = D35056D85FD1D73A2248A8740AD67A57 /* MBLNeopixel.m */; }; - 268FB17C82D96CFED7FB64A3F55C78F5 /* MBLGyroData.h in Headers */ = {isa = PBXBuildFile; fileRef = 61BCBD52E7383CADF427953727B943A7 /* MBLGyroData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 269C8276FDDCC079E0B593F646B5BCC4 /* MetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 26436F719298208FEF75335BA19CD0DA /* MetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 26D2944CEE0520BEA69089F331F4E142 /* MBLTestDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = A7CB624F324B3C20D299DC3EEF4DEBEB /* MBLTestDebug.m */; }; - 26DEDEEC73D35D6863A81C80EEE693B4 /* MBLMetaWearManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1BBDE1DD563096720D8D866FF4DB4F /* MBLMetaWearManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 26F20B97CD0ABA4C71256CEC3A7698FD /* MBLI2C.m in Sources */ = {isa = PBXBuildFile; fileRef = 29215526A5413BB1A1A9E46FA68490BA /* MBLI2C.m */; }; - 273F150EF40E4843E90390D87EB8552D /* MBLMagnetometerBMM150+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B76EF451B2C9BD1FC4B6483ECB68C1 /* MBLMagnetometerBMM150+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2768518B7F6A55E5AC790D16F601FD52 /* MBLMacAddressFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9046915089B8C866F632E74C372B90F6 /* MBLMacAddressFormat.m */; }; - 280947584C042DD7CE224BCE39BD77B5 /* MBLEulerFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = A2FD4BE33BC98270E878E0FDD87F2729 /* MBLEulerFormat.m */; }; - 281A655E59C8E009FC6899EE552442AE /* MBLLED.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B7C1BF89D1729EB27F1B94086AF8E4 /* MBLLED.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2855D02234B0E92618B01337C04E9C0B /* MBLCorrectedFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = FBBC21F0A88BF36DA520DA6B9873B4FF /* MBLCorrectedFormat.m */; }; - 28587A3351B6432B58F5C8507E98017E /* MBLI2CData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3ED4C20784864624CA77166567B77F /* MBLI2CData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 286E1B7D886FED1DE8F0D3A212963252 /* MBLAccelerometerAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BD9EE0CE69712E8C1D2AF65EC09F00B3 /* MBLAccelerometerAxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 287468ADE3C152C4DD0F7A269A074ED6 /* MBLSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED9B9C87C7D1F4D61A9B578A3CB486D /* MBLSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 28B366DFB04605067F27311BC48F1FB0 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19E1E8CEA308C7ED9F28151A953C1AD6 /* MBLAccelerometerBoschDataReadyEvent.m */; }; - 290505F95D9BB5ACA7F297CCD5FC8820 /* MBLConductance.m in Sources */ = {isa = PBXBuildFile; fileRef = C014ECE4DBE240C0F225336A0534E7CF /* MBLConductance.m */; }; - 29408C09F08ECC7C4FA6CBAA842A3A2D /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DE51A6F1F172F26196BE2B7A8654EE5 /* BFExecutor.m */; }; - 29826E4B17F00492FB8DFBC88A51CC4C /* MBLMockUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A01A75152EFBAC91B18298FABEEA3047 /* MBLMockUtils.m */; }; - 29996DBD3EB92F8DAFEF1831563AE819 /* MBLQuaternionFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = ACFC6C443B09DE923F4D13B49B6529F0 /* MBLQuaternionFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 29B48CE4C1B8726C0BF9CEA5EFC394B0 /* MBLQuaternionData.h in Headers */ = {isa = PBXBuildFile; fileRef = F9779743BB0779445345CE025777D106 /* MBLQuaternionData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 29B6EC03D2F74F9AA0628207AFC3F5FF /* MBLQuaternionFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = ACFC6C443B09DE923F4D13B49B6529F0 /* MBLQuaternionFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 29EB0F8305B96EB3E4E245D551D2ED84 /* MBLOnDieTemperature0.m in Sources */ = {isa = PBXBuildFile; fileRef = 595150EE7F64D8A9B4418FE04A0F711B /* MBLOnDieTemperature0.m */; }; - 2A0606C29B1A1429EF8104518C962317 /* MBLFirmwareUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE7E5AA02B63E011DF1DF98336F4BE8 /* MBLFirmwareUpdateManager.m */; }; - 2A0E6137C7477E041142EB541278E910 /* MBLI2CData.h in Headers */ = {isa = PBXBuildFile; fileRef = C32548046B3323EF853B2B5CDF55525C /* MBLI2CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2A2DC6A81B318858B30DA7BC8C8EDC04 /* MBLAccelerometerShakeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D46242C19F48BEE2D15792861D2EFDF /* MBLAccelerometerShakeEvent.m */; }; - 2A30E78BBAC505C0C7C67461E35E5C9B /* MBLAccelerometerTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 75AF7D9B0330B805F7A4C347639CF709 /* MBLAccelerometerTapEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2AC8AB95D7C77A56CBEBA85BF16C6AD0 /* MBLConductance.h in Headers */ = {isa = PBXBuildFile; fileRef = 092C07496FB9BDB608711C9FD3FC05BC /* MBLConductance.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2ADF8A7E3C73F255C51A3657F476598B /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF83E2F0603DA4CBD738A9E84F5072A0 /* Cocoa.framework */; }; - 2AEC7EEBE8B3818F123317579FB5F702 /* MBLExternalThermistor0.m in Sources */ = {isa = PBXBuildFile; fileRef = DE11AC7A6BEA46D43A46B985F7DF59F4 /* MBLExternalThermistor0.m */; }; - 2AFC2A2DF155D2DC03226FD4374F5DC3 /* MBLModule.h in Headers */ = {isa = PBXBuildFile; fileRef = B9DE4E899E4844655FC917D8D457823C /* MBLModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2B0CF436D0B084627B6040CFD1DAC455 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BA9618B3D4982299C4F916FA38BE83A2 /* MBLAccelerometerBoschTapEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2B15C965342E2362D0EAE3FBC21063AB /* MBLMockPeripheralFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DC946709FD1C2A947BD1E3A79A18E21 /* MBLMockPeripheralFactory.m */; }; - 2B3016244C664AD89C93E8302CB7304F /* MBLDataSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = A8ECBD143ADFBD8D03EDA03D0B54B27C /* MBLDataSwitch.m */; }; - 2B35C4D876F0883B33AFB19AB65F575E /* MBLMacAddressFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 379385238BD2CE20DA91AB120E2530B9 /* MBLMacAddressFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2B4C6F67A9738437D0585749FFF9D7F3 /* MBLExternalThermistor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A01A4D7F336CD0F0E9091B7CC6B9648 /* MBLExternalThermistor.m */; }; - 2BBEE7F05D5A3AE8D625D0BDAA9F6086 /* MBLHapticBuzzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B28ABD0EEC5DEB324BECFFE15D7923 /* MBLHapticBuzzer.m */; }; - 2C408C20CE82360088003FE4C729137C /* MBLAccelerometerOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A245E852C9DB3427462FC00076A2E163 /* MBLAccelerometerOrientationEvent.m */; }; - 2C47CF86C089D19B7A89B1D55720482A /* MBLAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4646EED1655B7225F08B814330EC1A7C /* MBLAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2C9D26298755248774D507519F812F72 /* MBLAccelerometerBMA255.h in Headers */ = {isa = PBXBuildFile; fileRef = D5F1A4DFD6D0EFB150622ABD0E8F1316 /* MBLAccelerometerBMA255.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CB16980409BBBCFDA2F45616E113E6C /* MBLAccelerometerBMA255.h in Headers */ = {isa = PBXBuildFile; fileRef = D5F1A4DFD6D0EFB150622ABD0E8F1316 /* MBLAccelerometerBMA255.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2CB42E7672975839E2821FB722924294 /* MBLGravityFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE6896A63CD5BFB98F4BEFA942A2A08 /* MBLGravityFormat.m */; }; - 2CB67C93C5C5BB684995095D65BA6790 /* MBLDownloadOnlyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C00DFBCA78DE12AC8636FF801CD7203A /* MBLDownloadOnlyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2CEDFFEB09ED092B27C85E9A3043DDA8 /* MBLBitmaskEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F865DC2E67227DAA5EE2F439D5387DA /* MBLBitmaskEvent.m */; }; - 2D13530877F3E3C2BD981AEE64902DBC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1E607E00E745BA5868FC8C3BE81F2CDA /* QuartzCore.framework */; }; - 2D786E9E294F18EBFB7E926CA452A32A /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B8D190364D91B2BB0B5EFE96C91EA2 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2D86C80B67EA4CA5877AFDAEF2B2B7B7 /* MBLLoggingV2.h in Headers */ = {isa = PBXBuildFile; fileRef = FF68DD5BE6FD81CB7D400B9F8020E4AF /* MBLLoggingV2.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2D9CFB20086F2EEE68CFE7B744350087 /* MBLQuaternionData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B29669E68D153C6F0836018F0E43715 /* MBLQuaternionData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2DB77DFF503803ABC141622982C7250B /* MBLMockPeripheralFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 998B663E822CF022104FFFFC53613FC0 /* MBLMockPeripheralFactory.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2DE6D33EC00D301B0207FEE59F0B2AD5 /* MBLEntityModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F160C4428FBCC3B870F6B4338827F57 /* MBLEntityModule+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2DECD5E7F9D7C7DBF71CEB47CD066417 /* MBLEntityModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 594D339B971E1A22541A55D46D2A0010 /* MBLEntityModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E33070BB062C2860D96408C37D187AC /* MBLConductance.h in Headers */ = {isa = PBXBuildFile; fileRef = 092C07496FB9BDB608711C9FD3FC05BC /* MBLConductance.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E3A83F7C75727826C54B20E46435F78 /* MBLMetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = A66B7CD4ADF832A51D1279005F5F16D2 /* MBLMetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E3E9D3AF0D03F6677010D3F65D02789 /* MBLGyroData.h in Headers */ = {isa = PBXBuildFile; fileRef = 61BCBD52E7383CADF427953727B943A7 /* MBLGyroData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 2E4063B403662958F2FF9CA3DB16ADAD /* MBLMockPeripheralFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DC946709FD1C2A947BD1E3A79A18E21 /* MBLMockPeripheralFactory.m */; }; - 2E9F7F56E9D3E554F4F29333D8BE943C /* MBLQuaternionData.m in Sources */ = {isa = PBXBuildFile; fileRef = AE1FA155F112AAA570ACA5290C93EC1D /* MBLQuaternionData.m */; }; - 2F46316EAA8DD7A586FE80C66ADA705A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A390610F982814D7D440FF84A47DB46D /* Foundation.framework */; }; - 2F98E395547233A7BCDEA10B45779823 /* MBLSerial.m in Sources */ = {isa = PBXBuildFile; fileRef = 9404ACA56CB19BDDA6AA900FBDA9A317 /* MBLSerial.m */; }; - 2FB9BC8F2A583B5BA94D2F928331B9DF /* MBLExternalThermistor0.h in Headers */ = {isa = PBXBuildFile; fileRef = 56399F53F95874236906C93F8990D7D4 /* MBLExternalThermistor0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 2FCF3D03C78C81181AA551D24EFEC502 /* MBLCorrectedFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = FBBC21F0A88BF36DA520DA6B9873B4FF /* MBLCorrectedFormat.m */; }; - 2FEB35238B28742F4168CB847F09344D /* MBLTemperatureV0.m in Sources */ = {isa = PBXBuildFile; fileRef = D8725EB0E021DAD5A94DBA5397C6F845 /* MBLTemperatureV0.m */; }; - 2FF9B04C002990A888715522023CF806 /* MBLNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = F3085F6D2203E0F1C1703103D86EAE56 /* MBLNumericData.m */; }; - 30B7E2ECE58C50129A1644DEC830AE88 /* MBLPhotometerTCS3472.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D447E44BF7D2891CCCC9A36CEBAA97 /* MBLPhotometerTCS3472.m */; }; - 30B9312FA1D1026B94A931581608D1ED /* MBLAccelerometerBoschFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 289EFCFE9074EB09D61042A67F1CB9AC /* MBLAccelerometerBoschFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3101C58516BAAD495CF262E9556CCC1A /* MBLHygrometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB7B3F9D3FF6BC24D8C4A48E6924102 /* MBLHygrometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3174E8E837474FBAEDD9B16BB2268729 /* MBLBarometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D16E20C3099CCE7C274562CB5EA29EF9 /* MBLBarometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 319DFCE42E1BE851B2C20F3F334DD6F4 /* MBLDependentData.m in Sources */ = {isa = PBXBuildFile; fileRef = 91BAE67E444C7034D747E48A7F4A4F47 /* MBLDependentData.m */; }; - 31BE34A58946D23DAE2448AAAB44C7AF /* MBLAccelerometerBoschFlatEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EC92678BE93C7CF96A2F914F9952499D /* MBLAccelerometerBoschFlatEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 31BE8E6FD90F018BA39D1CB46B8C1957 /* MBLEulerFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = A2FD4BE33BC98270E878E0FDD87F2729 /* MBLEulerFormat.m */; }; - 3254CC6AE08F338ABA332274A02A5D07 /* MBLCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 370BDE5254786592F755411B3CEB8C1B /* MBLCommand.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 326F2D8885F626A785223AFDE0E34C3E /* MBLBluetoothCentral.h in Headers */ = {isa = PBXBuildFile; fileRef = 432403714E611FF7BE6154CE961F4250 /* MBLBluetoothCentral.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 327153BFA447F21BD4011C43E11BFA23 /* MBLTriggeredRead.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C5DFD9D0B808866C0C22532B0D36CB /* MBLTriggeredRead.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 328EFCF1807CB98BC92392985C26BE6B /* MBLGyroBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEE54F150DA612584E712A898EFEFC7 /* MBLGyroBMI160.m */; }; - 32BE2B3071281E702784EC6F4DBACDFB /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC1499FF61B9E6574CE31364FA9D2B1 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 32D649F49F782E519B9F11A8E885E8C6 /* MBLAccelerometerBoschFlatEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DF2D88DE8088065E8B624DDFBE58526E /* MBLAccelerometerBoschFlatEvent.m */; }; - 339F6F56F2DEA345CA975165BF0BD372 /* MBLAccelerometerBoschFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = E64B6F84CEA9ED48728E33BC7316B4EC /* MBLAccelerometerBoschFormat.m */; }; - 33D1412A1A69DFE227D3AFFE062D8D94 /* BFTask+MBLExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CA08FE632C7A756D3C35099AE7B05519 /* BFTask+MBLExtensions.m */; }; - 33D851F6E22642FDA677CBC3F8097BC4 /* MBLNeopixelStrand.m in Sources */ = {isa = PBXBuildFile; fileRef = CC931B2F13890FA224324A2D657F2483 /* MBLNeopixelStrand.m */; }; - 34138D1188F9D8A502998D18E54D5782 /* MBLOrientationData.m in Sources */ = {isa = PBXBuildFile; fileRef = 981644CDA9C010F4972FAA55611E3E3B /* MBLOrientationData.m */; }; - 345A8B20E435551E1D2115F460921A85 /* MBLRMSAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F4949F05143440EECC7F57B33495EC /* MBLRMSAccelerometerData.m */; }; - 348119EFF54B003E6F216DE34593DD6C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A390610F982814D7D440FF84A47DB46D /* Foundation.framework */; }; - 34A31AD536E0204CAA85935E234BACEB /* Pods-Starter-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B94539D46159311A844A5CB04B2BC9A3 /* Pods-Starter-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 34CAEC23F02CB917367551E9BF5F243C /* MBLMagnetometerBMM150Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 142C53373C506F66B3EC567CC1B46EC9 /* MBLMagnetometerBMM150Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 34D7AC17D6F51925DA409CBB4EA88B05 /* MBLNumericFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 172B2675C3FBB4FF57CCDD5C0451961E /* MBLNumericFormatter.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 34D92F80164F754A335DA1151801E63E /* MBLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9911EE11BDD37E8BC3F8EB29158E0C76 /* MBLFilter.m */; }; - 34F42FB00BFD8430424DB87F30DEFF31 /* MBLMagnetometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B6A31958CC8C516388975A773C8697 /* MBLMagnetometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3501B1AC04FC5EDB9AF722F70E09635E /* MBLTimerEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E75374D4E9DAB6C46F4B835D0D3F4A8F /* MBLTimerEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 35456420EB057908F094E171CE9F4580 /* MBLGPIOPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 196D9D18E35492ADFBF51545803C2917 /* MBLGPIOPin.m */; }; - 35487A67A799CE73E1704369374A4CE7 /* MBLGPIOPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 196D9D18E35492ADFBF51545803C2917 /* MBLGPIOPin.m */; }; - 3556B83D18707AC386DC1D1E8355248B /* MBLConstants+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DB01C6F682F5A01DBF66F2B08662B46 /* MBLConstants+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 355FB16581D0A7A798BD88591B55BD60 /* MBLI2CData.m in Sources */ = {isa = PBXBuildFile; fileRef = 002DBE59B80D267B7D1174CAFA7287D5 /* MBLI2CData.m */; }; - 355FDF24508B0A8639CDF0A226EA7399 /* MBLGravityFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C94BC89EEB1C4DD70F8FB940105EDF59 /* MBLGravityFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 35A66D99A3784029F565D4D3C8479E9F /* MBLAccelerometerBMI160StepEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AC5FCD84CB9C3A65FFB4D7339F725E58 /* MBLAccelerometerBMI160StepEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 362F8C61DF5363837BB3A18BA187CC59 /* MBLEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6509C8C65CA28F032A641699AEFF71CE /* MBLEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36516646DF97E3D835937E8F655914FF /* MBLAccelerometerFreeFallEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 05B9CA1F026CEB6CA68B3E741811AC90 /* MBLAccelerometerFreeFallEvent.m */; }; - 36668EF6FD16FB92D64A6B7441E99019 /* MBLAccelerometerBoschTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EF6751A4DC10EFEC4854078BC5450F20 /* MBLAccelerometerBoschTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3682C829A785BC1BBD85DF997D5A815E /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 7363ED845F28AB97287B35E39CCDC238 /* BFTask.m */; }; - 3698B50649ED8C22375F87B068A1A3CC /* MBLAccelerometerBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A057B248B30330E56EE400E14A8C4D3 /* MBLAccelerometerBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 36A3B6B71131E2F17C90512B3379E36D /* MBLTimer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E7206C6D035ED95789E77DFDCD5BAADE /* MBLTimer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 36A5F6F292CEB4EA0157CF3B5163EE58 /* MBLNeopixel.h in Headers */ = {isa = PBXBuildFile; fileRef = 8453DB9F88A660F88AB6F94B999E98B6 /* MBLNeopixel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 370019E61EB7BC89F8FF4A280CE6A158 /* MBLMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D102AFADD707A32746A67B9AD40758B /* MBLMacro.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3701353987ED251630E4AFD58DB8F033 /* MBLRMSAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C89BB07023ED287565C2905593ACBB92 /* MBLRMSAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3837B939212B40969CD7BC5D0D5AA5B4 /* MBLProximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE5DB293EAAAC3B450A32C1015827C3 /* MBLProximity.m */; }; - 3866AB500837CC210CAC556A03C68897 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF83E2F0603DA4CBD738A9E84F5072A0 /* Cocoa.framework */; }; - 388A205B3CE7589B4C95CB9A80C01DA4 /* MBLConductance.m in Sources */ = {isa = PBXBuildFile; fileRef = C014ECE4DBE240C0F225336A0534E7CF /* MBLConductance.m */; }; - 39042680580877AA7A8971A2A9C82EF2 /* MBLDownloadOnlyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C00DFBCA78DE12AC8636FF801CD7203A /* MBLDownloadOnlyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 392D68AF7C990DFCC64DF1BF15DF3E4A /* MBLGravityFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C94BC89EEB1C4DD70F8FB940105EDF59 /* MBLGravityFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 393C6A3DEB0A78A6ECED9738306825CC /* MBLRGBData.h in Headers */ = {isa = PBXBuildFile; fileRef = F27ABA1C1B56697C3CBEA5201D1E1EA5 /* MBLRGBData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39C01EC7F975487511B553264ABFDC25 /* MBLNonVolatileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 973C3CCB59EC1DD82ECF015EC4E4CCAA /* MBLNonVolatileState.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 39C6D1B7E5B78BA80A7452AEDF2A2BF7 /* MBLExternalThermistor1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8054F93E6D42DC6A34994588A10AE395 /* MBLExternalThermistor1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 39CF9405D3703A7B3E64EAA273C75A5B /* MBLAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = F04C1384B21B5E727D6A34D5475BB9EB /* MBLAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39F61D91B784185929A10EEEE5631F61 /* FastCoding-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7AC208DBD093028F1D1CB58E10BE97A7 /* FastCoding-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 39FFF99ABC7A011BEF642FDD71A3E6A5 /* MBLDeviceLookup.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A1CFEDCF8D9E2970D011A98BA41516 /* MBLDeviceLookup.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3A2954A93358AAC0E8DDEE9C19653EEF /* MBLAccelerometerDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F4530EAE9B7DD9CFBFC2D0514B7E8A5 /* MBLAccelerometerDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3A47544B9DF716773B610CA7D86EF0CB /* MBLSerial.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D47EFF60E4C35624057BD74F164FED /* MBLSerial.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A6A56AC96145E8B51C12EAF00461244 /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = ACE63D2BE2BD0FEFC6773E8A89B7A5F7 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3A6E198E6E3BEE3F95DC8534E3094655 /* MBLGyroBMI160DataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F2C1F6550CAD58FF98B0D93DD130951A /* MBLGyroBMI160DataReadyEvent.m */; }; - 3A6E6164F87363997CE3E8B2F3822FA4 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 215731CFCD0FCFDD822DED5785C4FEAA /* CoreData.framework */; }; - 3A8C1B056831746A5963A7F2C8C53629 /* MBLTemperatureV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 76D3C5C522E631CD62211B6A10A59906 /* MBLTemperatureV1.m */; }; - 3ACC1A4721E0420C37FE3A129551B71F /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F922D5EDD1533F98709ED495FF5D13 /* BFTaskCompletionSource.m */; }; - 3AFB659BBC277EF5752A2E3F855D6CD6 /* MBLTriggeredRead.m in Sources */ = {isa = PBXBuildFile; fileRef = DB9E3B0C0143094BF1E25BD373A05CF9 /* MBLTriggeredRead.m */; }; - 3B2925DCA31D2AA6E2907FF194B328B3 /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FF21602304B9BDD767C7D52A9274044 /* Bolts.framework */; }; - 3BC09D84B85BA13BC65487165046D693 /* MBLSensorFusion.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7AF3E43EEDBF72C0CA31B6012F63D5 /* MBLSensorFusion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3BD25BDF68D95BC1FBC955FCCC5A3201 /* MBLAccelerometerBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 33D764F5B99B1EC4BE551C6C7B35BCC7 /* MBLAccelerometerBMI160.m */; }; - 3C66D0B6739F35A356E91F917A8D21DB /* MBLAccelerometerBoschFlatEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EC92678BE93C7CF96A2F914F9952499D /* MBLAccelerometerBoschFlatEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3CA34A6DE73FC27AEC828A716C8DC356 /* MBLFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 565651CEC978D90131FF34714B7313F5 /* MBLFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3CAD5DDD72D15484A4EC15BF39B305DB /* MBLAccelerometerFreeFallEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C33369D8835EEDA9EEB6F1729BB9CE99 /* MBLAccelerometerFreeFallEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 3CB4FCAA6D1DDFEBCF1EF7B58DBF8096 /* MBLDataSample.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AB01530A4D412313CD65CD892515E4F /* MBLDataSample.m */; }; - 3D21A5DDD36F2C43299A5780310A8293 /* MBLAccelerometerBMA255MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 23AA82CBCF671572A6EDE8C4D2B334FE /* MBLAccelerometerBMA255MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3D329D47374A0BDD9D982902F08EB650 /* MBLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9911EE11BDD37E8BC3F8EB29158E0C76 /* MBLFilter.m */; }; - 3DCBE8FA5FC59E401F1BCB0EF44760FB /* MBLDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 174A108EC154260C6B810F2E28AB7C05 /* MBLDeviceInfo.m */; }; - 3DCCB929EF3A458A8E52E988E290B7F4 /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A332C200F72820570A10F894CE18588 /* Bolts.m */; }; - 3DD97DB81E4ED21F1BBA5993E2A83F34 /* MBLExternalThermistor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A778268E49E66EBB45C0785412E1303 /* MBLExternalThermistor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3DEBCDBB09738A6346299C4A5C852B0A /* MBProgressHUD-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 90AFDBD7957D024861737BBC4197DA9F /* MBProgressHUD-tvOS-dummy.m */; }; - 3E1BA60085BE599210D66E446904476E /* BFTask+MBLPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 72F465BA476651D387919A8222A795CE /* BFTask+MBLPrivate.m */; }; - 3E41B1AEC781A645ECB4612982CBE5CC /* MBLTemperatureV0.m in Sources */ = {isa = PBXBuildFile; fileRef = D8725EB0E021DAD5A94DBA5397C6F845 /* MBLTemperatureV0.m */; }; - 3E4901177DA2885BCC1DFDAE3D796F53 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F138D366CF5295E4813996DDBB5E8A9 /* MBProgressHUD.m */; }; - 3E5B6B44EF068328A1C9C89D304A143F /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 9784BDE57BF76980AD5F9EE5A90E6E6B /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3EAE76DA5324E7BF3907946988395C8B /* MBLPhotometerTCS3472.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D447E44BF7D2891CCCC9A36CEBAA97 /* MBLPhotometerTCS3472.m */; }; - 3F228097E731C3C17AFD51E89DBB688E /* MBLAccelerometerBoschTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFC91FEE47741BE83E3B4DA6ACA3891 /* MBLAccelerometerBoschTapEvent.m */; }; - 3F62F9D0AF72A7FEE2B5499770D88474 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 65100B32123F844FC52882C8AD36BA4D /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3FCD1809EF0B39DA112B5141E008E612 /* Bolts-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D7675FCA4D3B0BA8ADFA92394085D93 /* Bolts-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 3FD16EA9AA4715A5B972852648B5F67D /* MBLAccelerometerFreeFallEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 05B9CA1F026CEB6CA68B3E741811AC90 /* MBLAccelerometerFreeFallEvent.m */; }; - 3FE1D60563D69EC6A0878B4D19877336 /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = D10DA96DC36AFE7F2E340BC3750A953E /* BFCancellationTokenRegistration.m */; }; - 40466D153DB3F737F39155AC6013B331 /* MBLModuleInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6F4AD08FB0CDF8AB50BB6195F7858F /* MBLModuleInfo.m */; }; - 4075996A8EA593D2B8F4BAA24F67F29A /* MBLBluetoothCentralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = CA61631C3315F36BAAA72204FFFEAC2B /* MBLBluetoothCentralMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 409602619D02ED11201BF2F8049B5911 /* BFTask+MBLExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = F138F421CCDB2761404A746390697EA8 /* BFTask+MBLExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 40D5071817517F53C028BB945D076073 /* MBLEulerAngleData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FCEE56D4D921A7B44ADB7A0317845B34 /* MBLEulerAngleData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4104627C6500E2474714CA964AFBDE9C /* MBLI2C.h in Headers */ = {isa = PBXBuildFile; fileRef = DB0E435AD114EF383A969D5A426FE268 /* MBLI2C.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4105636F0F38EFD6756FA79B845D3D8E /* MetaWear-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EF4F6FF9581957C094B0E670C2B1AE2 /* MetaWear-iOS-dummy.m */; }; - 4121D8CB18F318C85650309AA6424861 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 408F8120EB62C2BAA6448622136747A1 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */; }; - 413D9E8DBC3C52647E46615E33FA671C /* MBLModule.h in Headers */ = {isa = PBXBuildFile; fileRef = B9DE4E899E4844655FC917D8D457823C /* MBLModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 41488489BC887FC280584349E11364E0 /* MBLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9411060398DF728E2336B402749A6090 /* MBLLogger.m */; }; - 415ACEB09354B7E15237E5DFEC2BBB1F /* MBLQuaternionData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B29669E68D153C6F0836018F0E43715 /* MBLQuaternionData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 41922A4CCCBA17D6B36881DBC7101680 /* MBLAccelerometerOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C764F83BE624351959E1C8A7026783 /* MBLAccelerometerOrientationEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 41FEC1065F1DCDC6483128EE969971C9 /* MBLGyroBMI160Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 77690A4A4C5A42B5BC6EFC98D6900C6E /* MBLGyroBMI160Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 420BC8D5322B13DD5F13332375293B37 /* MBLMagnetometer.m in Sources */ = {isa = PBXBuildFile; fileRef = C224152C9D28C7A32A827C076760707D /* MBLMagnetometer.m */; }; - 422051FDDC00913103FB5404730E7E5E /* MBLData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E006E0231DC90761DDF2F055756ED21 /* MBLData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4243DF300AC059AB6498EA063B801B36 /* MBLRGBData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CCF372AA4F3F117F4D4C7E23D0FF1BA4 /* MBLRGBData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4272D07F99AF4D70AE09E11161F41E30 /* MBLEulerAngleData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BFED5A2B9A105DCF96490C518361A50 /* MBLEulerAngleData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 432FD5F477909BABDC7C97389C2B5AA9 /* MBLTimerEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E75374D4E9DAB6C46F4B835D0D3F4A8F /* MBLTimerEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 43C488261787E32BC66A909DFFD9CBCE /* MBLAccelerometerFreeFallEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C33369D8835EEDA9EEB6F1729BB9CE99 /* MBLAccelerometerFreeFallEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 450500C329A0C642EB3BEA85657A9B15 /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = B70F33756D167A4FA310EF2A63F4E43C /* MBLAccelerometerMMA8452QRMSFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 455926B2567A109690A2969608677FAB /* MBLRGBData.m in Sources */ = {isa = PBXBuildFile; fileRef = 56EA971154A82E2F2D963F1F73C9DE35 /* MBLRGBData.m */; }; - 457A2D37F5BB0E2177030A82148A7E65 /* MBLMetaWear+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 268C80524B2B2E30FEBB681C265CA05A /* MBLMetaWear+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 458F9669D56A8E9DF7B5A1B0B8AA10FC /* MBLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6821E56C1E7FF7715251DC8A23A477ED /* MBLLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 461AF67A9414C8EDF296B5A98DBE5987 /* MBLLoggingV0.m in Sources */ = {isa = PBXBuildFile; fileRef = B751A124D571D4247E943A0FDA522578 /* MBLLoggingV0.m */; }; - 46520669635E49D3FCACB03DB0433122 /* MBLDispatchQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E6279DDBA7C4A8EF8080CAB21F48472 /* MBLDispatchQueue.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 465F6C7BF68B40BB4A9F7CAE6E7B48D7 /* MBLTimerEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A16B91106DC84C0FD697BD0C372F9757 /* MBLTimerEvent.m */; }; - 46956280CC6A700A438D65C4BA799479 /* FastCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01673900EEBEFA58AA0306E3FDE7950D /* FastCoding.framework */; }; - 4715F528021766A0C2DFBFC0DDCE8B16 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19E1E8CEA308C7ED9F28151A953C1AD6 /* MBLAccelerometerBoschDataReadyEvent.m */; }; - 4739EFC106481427C7B0E8A153B95F5A /* MBLAccelerometerBoschDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19E1E8CEA308C7ED9F28151A953C1AD6 /* MBLAccelerometerBoschDataReadyEvent.m */; }; - 476FED7D76119169EDC651E40B3E9FAB /* MBLExternalThermistor1.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C51D0FDECC9EF2A48A0AA5B4642A42 /* MBLExternalThermistor1.m */; }; - 4797F5B1C7CABB86E2AC4DB0152EE6C6 /* MBLGPIOPin+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EE024F5D66D6ACBD750318E522672E62 /* MBLGPIOPin+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 47BA9EFF6713CB4F63822AC2FE68114D /* MBLGyroBMI160Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 77690A4A4C5A42B5BC6EFC98D6900C6E /* MBLGyroBMI160Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 47FA55710C7B2E8163BCDD0DB0B56F59 /* MBLBarometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EF3AF0D81EBDB21ED461275346CB1158 /* MBLBarometerBosch+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 487AFE502A2DAB10AA68BFBE2F8145A7 /* MBLRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = BF469711620C344E8237ACB9E37488F5 /* MBLRegister.m */; }; - 4997169BF8890F27DC006F71B826CF43 /* MBLHygrometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 95088C502078D0A9B296CB2A3242C699 /* MBLHygrometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 49BFE992E3E2B4535318AAF195BCD88F /* MBLDownloadOnlyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2760600C17CE3E9ED9744899937B5799 /* MBLDownloadOnlyEvent.m */; }; - 49C30556C8C540BB9734EDE068E3FFAC /* MBLLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = DEE0335A76FAAF539900AA6D34E2F76F /* MBLLogging.m */; }; - 4A2A02D09727BE4D443C4997B12F03BC /* MBLMovingAverage.m in Sources */ = {isa = PBXBuildFile; fileRef = 33FCF62EE29EAEB61B0798123DACA455 /* MBLMovingAverage.m */; }; - 4A2F44D5E38E0565E43C7B42D1A00DDD /* MBLMovingAverage.h in Headers */ = {isa = PBXBuildFile; fileRef = A49860565C04C51B616558EDB6C207A1 /* MBLMovingAverage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4A8D97520171A89EA1AEFBF1C5784FD6 /* MBLAccelerometerBoschOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 903BBAC1CBE28E72767F13680C7D7260 /* MBLAccelerometerBoschOrientationEvent.m */; }; - 4B54C18DA0FB2DCBBA080973FC2DE3F2 /* MBLTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF25E6F0B0180F610BFBAEB11C7FF3D /* MBLTimer.m */; }; - 4B5D6C2344DFAF25A3C14B280559BBF5 /* MBLMacro.m in Sources */ = {isa = PBXBuildFile; fileRef = 610A24A199D5AD64DBB7279794C620F5 /* MBLMacro.m */; }; - 4B999A437E6E8138559E3B8E5641177E /* MBLAccelerometerBoschOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6303D6B2C2E393A3B84CCF481AA0DF /* MBLAccelerometerBoschOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4BD8348DAB327C1D82486DF5312A0033 /* MBLModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD7C01C3F8EC1E4BA465ACABE8FEA74 /* MBLModule+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4BDBCAA2C01653D947902C87157BB48A /* MBLAccelerometerMMA8452QFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C009289D9A902BB50149D3B9C4F04D4B /* MBLAccelerometerMMA8452QFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4C164EDC12FBD235BE3CE168274C860E /* MBLANCSEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = 843FE79A8036CA75D2F7C49DE6F61E82 /* MBLANCSEventData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4C9A86923C4102F3252DEF8BEDD59F59 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2A68EACC91CAAC95762EC992300966 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4D1041E8A013205F23DAD18EEC6B9B79 /* MBLBarometer.h in Headers */ = {isa = PBXBuildFile; fileRef = EF09D6F1F9512C264519E29311940625 /* MBLBarometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DF8AB8E5D12928B8D43E5361DC76FB7 /* MBLI2C.h in Headers */ = {isa = PBXBuildFile; fileRef = DB0E435AD114EF383A969D5A426FE268 /* MBLI2C.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 4DFB1E5DAC2D4824F02964A6564CCC25 /* MBLModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD7C01C3F8EC1E4BA465ACABE8FEA74 /* MBLModule+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4E3982064D322CA9A4D2D38A094C0E2A /* MBLDataProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = EAAB5B28E78532344EDA35CAEB74A6D8 /* MBLDataProcessor.m */; }; - 4E70032C8B3E2C62AFA6B2E95B1582DA /* MBLMovingAverage.h in Headers */ = {isa = PBXBuildFile; fileRef = A49860565C04C51B616558EDB6C207A1 /* MBLMovingAverage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4E8145F83D5EBE2A738BA7A9E0D83706 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 23916678C67AC667410DAAECAFDBFA2F /* MBLAccelerometerBoschDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4EC01C7EDF8ABCD1A4C30FB932A3BE73 /* MBLLoggingV2.m in Sources */ = {isa = PBXBuildFile; fileRef = E7FCF970780F8D7CD3B2B0E5F719748F /* MBLLoggingV2.m */; }; - 4F5E444F76399D029E79F301BAE5D57B /* MBLAccelerometerPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FC2A2394A1BBF5EB1B9FADD41B5C0 /* MBLAccelerometerPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4F62B76C4AF81D6C9B34142C2CAA0805 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 999B80E344EA0797D0E594D2D30B9316 /* MBLGyroBMI160PackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4FB2D5745918BA1C00357AFF0BC79267 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 207BFB192A72F39904B415B8A2423B7D /* MBLAccelerometerBMA255MotionEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 4FBFABB5E2973E50748F0B5262B54CF9 /* MBLNumericFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A1A7139C699D05C359780845610FB22 /* MBLNumericFormatter.m */; }; - 4FE417A08D9D179D296D8BE6EFDCB438 /* MBLBluetoothCentralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = CA61631C3315F36BAAA72204FFFEAC2B /* MBLBluetoothCentralMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5023AF74E7FDA0539F7F757735A5D0C1 /* MBLExternalThermistor1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8054F93E6D42DC6A34994588A10AE395 /* MBLExternalThermistor1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5078B818A1E7C97718D71A584CAF9C77 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = ADA36E2FB695216C6920CF5C44FADC0D /* MBLAccelerometerBoschAxisReadyEvent.m */; }; - 508E0461B02292E7D8630B877FA8889A /* BFTask+MBLExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = F138F421CCDB2761404A746390697EA8 /* BFTask+MBLExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 50CA0F39357621201D4F978AEAADCC3D /* MBLAccelerometerBoschOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6303D6B2C2E393A3B84CCF481AA0DF /* MBLAccelerometerBoschOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 511A54CE8A073686A3AF22AAA922FABF /* MBLQuaternionFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = ACFC6C443B09DE923F4D13B49B6529F0 /* MBLQuaternionFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5141E43AFE96D420E3DD7CEB8673A601 /* MBLGyroBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = DE97623D119021B33454944A2AADDF24 /* MBLGyroBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 51B43DF2E84C5C4D1448A9AF68A3FB4D /* MBLSettings+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 78645BA6A31BDB069A935A83150F934A /* MBLSettings+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5213157153A8F4A38E281EF70C85EDB0 /* MBLDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 174A108EC154260C6B810F2E28AB7C05 /* MBLDeviceInfo.m */; }; - 5259E11019505444D487134A70A6CB5B /* MBLAccelerometerBMI160MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 361ED24982D138D7DE2FB8AB055756C5 /* MBLAccelerometerBMI160MotionEvent.m */; }; - 5287966850BCB5E476D3C70E82FA1783 /* MBLAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA854A9B3FBED4784EE1CB16D572BD4 /* MBLAnalytics.m */; }; - 530E1CF46B7F533A0C93FC19435E6A06 /* MBLMagnetometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89D1CC714D0CFD616B98573800172072 /* MBLMagnetometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5314C1591BACDE231683623AE457C0FA /* MBLFirmwareBuild.m in Sources */ = {isa = PBXBuildFile; fileRef = D68E84770A265909E54F38978E25756E /* MBLFirmwareBuild.m */; }; - 5365D530008115AAF9C20AE2394C32CF /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF83E2F0603DA4CBD738A9E84F5072A0 /* Cocoa.framework */; }; - 5367C76D7FFD7281CAA23206E9AEFF64 /* MBLGPIOData.m in Sources */ = {isa = PBXBuildFile; fileRef = 22A04A37C49AAF2FBC39F33DF7915A35 /* MBLGPIOData.m */; }; - 537E630FC0718F5088AF8A95568D3B28 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EB9457C84BA60F953808A69B2CD44D2E /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */; }; - 53D53CC1BAEFFDE7A720C048CF63AD26 /* MBLMetaWearManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 10FD2A19A75CE29E07394D16F34BB579 /* MBLMetaWearManager.m */; }; - 54086E69244419973124B06648DEC2B7 /* MBLDataSample+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6259021266C0186D832790E6BADA3B3F /* MBLDataSample+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5466835F96ACCB738F4799F906FEC98F /* FastCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DA61D4744EC46627267FA744013E0589 /* FastCoder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 547FE27265A329B1B7E7BD4E77D3E5C5 /* MBLOrientationData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CECC196826DFE764A258D986CDA3D2C /* MBLOrientationData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5480D8A8412552EC2704B7F682C1666D /* MBLSPIData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFADBF1370D8B2EF860CA323969640D /* MBLSPIData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 54BF34AC2632288336CDE6DA77F07771 /* MBLAccelerometerPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FC2A2394A1BBF5EB1B9FADD41B5C0 /* MBLAccelerometerPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 550B53A8B080F8520CB618003D69BDB5 /* MBLConductanceData.m in Sources */ = {isa = PBXBuildFile; fileRef = FBE75E185B5C873EDD2E213F6BABCFEB /* MBLConductanceData.m */; }; - 550CFC2F0BE92B4D6CEC021693C7A8D1 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 65100B32123F844FC52882C8AD36BA4D /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 551C0576F4E0D10959B68FA0285B0FF9 /* MBLANCSEventData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B08FF8DBCEA081BFC5499F13D8D1EB48 /* MBLANCSEventData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 555967E96EBED672D1DCFCF21F896940 /* MBLAccelerometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = EAACFD7B01AD5B5FCDCC03A40F40FF14 /* MBLAccelerometerBosch.m */; }; - 55930F0C0205010A2B623DDCBFBD83FA /* MBLAccelerometerPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 305C1893654B1DF8D8533B49A105F27C /* MBLAccelerometerPackedDataReadyEvent.m */; }; - 560C80B0D11731A9B705F31C81F304D4 /* MBLDependentData.h in Headers */ = {isa = PBXBuildFile; fileRef = C1C99B28231BEF46531726251543F95D /* MBLDependentData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 563AACA761BA9910780CC56C7F192FD4 /* FastCoder.m in Sources */ = {isa = PBXBuildFile; fileRef = DA61D4744EC46627267FA744013E0589 /* FastCoder.m */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; - 5687D5A91A60B3E9D713E694F8F5B1D9 /* MBLModuleMock.h in Headers */ = {isa = PBXBuildFile; fileRef = BF610CD0F7089765CB25257C4241DE88 /* MBLModuleMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 56AC87082416F428093779FA87657620 /* MetaWear-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4521EBEC23752425A390EBF45A68D602 /* MetaWear-tvOS-dummy.m */; }; - 57220D120377407D870523397528F1CD /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FF21602304B9BDD767C7D52A9274044 /* Bolts.framework */; }; - 574605E224B6DA2F6E18BA1DC752A0C5 /* MBLFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 565651CEC978D90131FF34714B7313F5 /* MBLFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 574D7965C133EA49FE742EBA7045AC85 /* MBLAccelerometer.h in Headers */ = {isa = PBXBuildFile; fileRef = D72C4D748AA386035CB162B95E473342 /* MBLAccelerometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 574E0728955F19F0FB4A765DAB5D6656 /* MBLTemperature+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FC205D22FE98BDB3414F601B31B87F1A /* MBLTemperature+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 57B199FF65D8E3116227EFAD569CB00E /* MBLLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = DF05DA6CD115AA6EEF289B14B106AD87 /* MBLLogging.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 57E14209A84E85E16B7587D79DEE9AE5 /* MBLAccelerometerBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CF8DD02BEFD38F8B3A67A5070F0229 /* MBLAccelerometerBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 57F286CBB6ACBC070188E3F37EBA8ADB /* MBLDataSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = A8ECBD143ADFBD8D03EDA03D0B54B27C /* MBLDataSwitch.m */; }; - 57FDE92221C5D5D46E3B0C2983B06465 /* MBLAccelerometerBoschFlatFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EB490BFEC65DD75C59048669C60EADC0 /* MBLAccelerometerBoschFlatFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5838565AC46D94D267753EE90347D176 /* FastCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01673900EEBEFA58AA0306E3FDE7950D /* FastCoding.framework */; }; - 58511B74A77EA833ECA1848AE112FA7A /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F69E657022FBB3BFC4F9645E201C9A41 /* MBLAccelerometerBoschPackedDataReadyEvent.m */; }; - 588BC55B42FA7E6323117881099C91F7 /* MBLDispatchQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 41D4C40BFB8F6904AB91AFDE99FBF1BA /* MBLDispatchQueue.m */; }; - 58DF473B30F40AB6DDDA9E17E3F3486F /* MBLBarometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EF3AF0D81EBDB21ED461275346CB1158 /* MBLBarometerBosch+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 58F00EEFD3BD40AED8A6F8F154F7C0F0 /* MBLMagnetometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9196F6CF5B00156F9536837A4F00B8DA /* MBLMagnetometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5909B9C2604804C026E241095C78B8B2 /* MBLAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = EA1D0D5468EE4C60F6520CA42C739533 /* MBLAccelerometer.m */; }; - 5934EE12F9278553186136719E451596 /* MBLAnonymousEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 640013670E530E919FB4A9E04E8E67EC /* MBLAnonymousEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 595FB84AAD611DD71645CF8414F96602 /* MBLRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = BF469711620C344E8237ACB9E37488F5 /* MBLRegister.m */; }; - 59A3F0E928C90E782CEE4FA1F8B31A9D /* MBLConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = 281F942BD483B5AA0F5F85DD304B6613 /* MBLConversion.m */; }; - 59C8BE710550E5526AD15DFE610E4971 /* MBLProximity.h in Headers */ = {isa = PBXBuildFile; fileRef = 17235EF49A060133B6160184A954CF3B /* MBLProximity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5A146F72BD70659C73578951CF098A0E /* MBLAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4646EED1655B7225F08B814330EC1A7C /* MBLAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5A2973D610B15D1E50453393340C90DA /* MBLNeopixel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 414435389F012CBF6D41D5242CF5FDE3 /* MBLNeopixel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5A513B626707AAA7B6149C1C9FFD4638 /* MBLFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 9911EE11BDD37E8BC3F8EB29158E0C76 /* MBLFilter.m */; }; - 5A64A7465E17F48155FAF021E1B3E000 /* MBLMockUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = A01A75152EFBAC91B18298FABEEA3047 /* MBLMockUtils.m */; }; - 5A792112FE1700A9A4F389FCAC149055 /* bmi160.h in Headers */ = {isa = PBXBuildFile; fileRef = 533C556DA7434A78A2661C6C9D58B4B3 /* bmi160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5ADEF81E0A57E9EC64020581A077E430 /* MBLMockUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F44FE55A5E98E6D8AC3E760780EF5E2 /* MBLMockUtils.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5AE0E15B0865BCFC0D1B0AB913E04043 /* MBLCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B490A15EF33E626D39F6446407ED61B9 /* MBLCategoryLoader.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B01BAB3FD0DAB5C782BF4B8E087E43B /* MBLEntityModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F160C4428FBCC3B870F6B4338827F57 /* MBLEntityModule+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5B195DCCD325820371AE96FF4F33AE18 /* MBLTemperatureV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 76D3C5C522E631CD62211B6A10A59906 /* MBLTemperatureV1.m */; }; - 5B26278E4C33DA300DCA4AE70B95063A /* FastCoding-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 216CA4A8C0A271848E6893ADE6FC1FB9 /* FastCoding-macOS-dummy.m */; }; - 5B2E921DD0E405D0BF40C58D06A83BB9 /* Pods-Starter-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 894D6BDD300D1CB977B5359F8DEC8F8F /* Pods-Starter-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B72266A2871D0406B48C1EEBF9A7E32 /* FastCoding-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 140A6FD0A1728237B3A0F5B8A592FE01 /* FastCoding-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5B993B94839060087A7D4B99AEB163A1 /* MBLModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A175A4B71EE30DDD2D566A73DBEC1B85 /* MBLModule.m */; }; - 5BA14C990FBECA5929BDC7B694B4E43D /* Bolts.m in Sources */ = {isa = PBXBuildFile; fileRef = 7A332C200F72820570A10F894CE18588 /* Bolts.m */; }; - 5BE6C971C0E9B66ABE04DC70A5F0036C /* MBLTestDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E70541502FE1B4EEC651594FB6737C1 /* MBLTestDebug.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5BEFD8B9724C73DE833A8C43276FF88C /* MBLSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED9B9C87C7D1F4D61A9B578A3CB486D /* MBLSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5BF9A4127F95BBE51B8A8440484162EF /* MBLRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDF8C838AC5CDC445B42F979FBDAC51 /* MBLRegister.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5C3FC37C4CA1B3A4975C3ED04CAB6317 /* MBLDataProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = EAAB5B28E78532344EDA35CAEB74A6D8 /* MBLDataProcessor.m */; }; - 5C833B20F78BDA3B11FE21AFE1BC0535 /* MBLBarometer.h in Headers */ = {isa = PBXBuildFile; fileRef = EF09D6F1F9512C264519E29311940625 /* MBLBarometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5C8A4F50425A80ADFACED5CAD54933BC /* MBLConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = B73063C453BC313606EEF0C5A59ED58D /* MBLConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5C95BE3CFF254DE82C183CC3717489F7 /* MBLGPIO+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E309FA5671BF963CA0BB99B55E5F6FD /* MBLGPIO+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5CBD4754410EA108E9FEE0CC4A049739 /* MBLDataSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 9305641039886B57EA88E02E7D780CCD /* MBLDataSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5CE99307D564CB9D8B073D4A984E04FB /* MBLBluetoothCentralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 643206EAE8399B4005F420D6E8BA9FC5 /* MBLBluetoothCentralMock.m */; }; - 5D4432DE55CF98543FA4380D8AB5EE8B /* MBLTemperature.h in Headers */ = {isa = PBXBuildFile; fileRef = A90CBC9125428FB3F9EA77F260B54EAB /* MBLTemperature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5DD5691B954ECE1B7F9328BA368E9493 /* MBLAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = C4FE8BC8F7BFCBEAF055DBFCFEC485A0 /* MBLAnalytics.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5DDF87542F489E6C28A726F6CDD79BAE /* MBLAccelerometerOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A245E852C9DB3427462FC00076A2E163 /* MBLAccelerometerOrientationEvent.m */; }; - 5DFB708AAEC15DD1D1F33E9DC40FA7E6 /* MBLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6947AB6F38CB196184CF68AA77E2AB /* MBLFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5E5A4D64B9373F2E0DA4BF9623B074E1 /* MBLData.m in Sources */ = {isa = PBXBuildFile; fileRef = 568592B0D644EB12F7886E0BC67E6EF3 /* MBLData.m */; }; - 5EF258B7F0BB00EAB04790116B8EEB09 /* MBLCorrectedFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A281F1299DAC68B29A2FFDD77F54AD6E /* MBLCorrectedFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5EF72128C1015FB28DC442DE3EF9A7BE /* MBLAccelerometerBoschOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 903BBAC1CBE28E72767F13680C7D7260 /* MBLAccelerometerBoschOrientationEvent.m */; }; - 5F0D87525F96A4C913496C6F10B29782 /* MBLAmbientLight+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 47EB7E96479ED8478F088E850DCCB33C /* MBLAmbientLight+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5F361933A91CC7487B0FEB1D877F9353 /* mma8452q.h in Headers */ = {isa = PBXBuildFile; fileRef = C6175132B1A5F37DFD658D10C3711CE7 /* mma8452q.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5F474BB6555A38A1599FF5885678B8B1 /* MBLAmbientLightLTR329.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF5F7E8303E99B87637CDC4567F15E3 /* MBLAmbientLightLTR329.m */; }; - 5FB18230C2A8997351ADD4EDD76EFED8 /* MBLTimerEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = FF0D8C305426C63A66AC1F20DB041CC1 /* MBLTimerEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FBF24B890629E6DBD16B084E70C8691 /* MBLMagnetometerBMM150+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B76EF451B2C9BD1FC4B6483ECB68C1 /* MBLMagnetometerBMM150+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 5FCFA11B7CA31C21756A7187E809B2A6 /* MBLNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 10452424C154C0C85FEFD3422604FFFD /* MBLNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 5FDE9A59F76C827C0DE796B8E10335E9 /* MBLAccelerometerBoschFlatFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 23D4B75048CEA0D5AB05EAB2BD22D828 /* MBLAccelerometerBoschFlatFormat.m */; }; - 5FEA641C5134BF419967CB60C691AE35 /* MBLAccelerometerBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 33D764F5B99B1EC4BE551C6C7B35BCC7 /* MBLAccelerometerBMI160.m */; }; - 6034F2B5AFE2214155CC1E20FA7D89D8 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 27D538183C93B57AD8A146CA64198676 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 60E31BA8F2CC5A7A40452C67561EA554 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 23916678C67AC667410DAAECAFDBFA2F /* MBLAccelerometerBoschDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 60E56EE6A6D747B80461F0C43FBCC311 /* MBLAccelerometerShakeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 89C6814E8BAF16FCCDF8F0FC61F3269E /* MBLAccelerometerShakeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 61353C96639CE1D106F470B94DE768CE /* MBLPhotometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B1E68856F19F80FD47414AA57EFEE18 /* MBLPhotometer.m */; }; - 6148A4AFAA0F4ACE3E37FEC8DAD6C202 /* MBLData.m in Sources */ = {isa = PBXBuildFile; fileRef = 568592B0D644EB12F7886E0BC67E6EF3 /* MBLData.m */; }; - 616715322FD145FF2E8A455F253A935D /* MBLGPIOPin.m in Sources */ = {isa = PBXBuildFile; fileRef = 196D9D18E35492ADFBF51545803C2917 /* MBLGPIOPin.m */; }; - 616EEB961D9D3E0A318E453AA72B42A5 /* MBLTriggeredRead.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C5DFD9D0B808866C0C22532B0D36CB /* MBLTriggeredRead.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 618EB24DA4C00A2C12308C7660982E96 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C0572D9E03034C6B04220BC00D04F3A /* Foundation.framework */; }; - 619AC5402628D47BA4B4EE810F9F4E1E /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 27D538183C93B57AD8A146CA64198676 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 61C688EE7D2DCE7B8A0CA7DD60A103C0 /* MBLCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 29A06566DFD36AD873A449282791F5BA /* MBLCommand.m */; }; - 61CB1C5E8BB05D56DB63FA64449F7581 /* MBLAccelerometerTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = B98186A44DA501640C7E89E7F811C3D3 /* MBLAccelerometerTapEvent.m */; }; - 61CC761CBB3107E94C1CC7FEB1110451 /* MBLAccelerometerBoschOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BC3658C58BC69AAA5EF88DA0D89F8C1F /* MBLAccelerometerBoschOrientationEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 61D45D596D7710BA9B4C6280ED10FB22 /* MBLSensorFusion.m in Sources */ = {isa = PBXBuildFile; fileRef = 47980C0F2A6A1229368779FA3439FFD8 /* MBLSensorFusion.m */; }; - 61FBDA686B2674236F00C55054CD322B /* BFTask+Exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E76E9526511D8A62A483D3CD1939B81 /* BFTask+Exceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 628E19833E0F6E4B36A3142268FA00E3 /* MBLSPIData.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CFA9BC089864F62BB20CEAA33C1823 /* MBLSPIData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 62BF7DE0580C15D4D4628A1835E96163 /* MBLGyro.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F46732D0D5A9679D3057E5D13869F9 /* MBLGyro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 63002B60D13F850109F2A7EC7DCACF21 /* MBLLoggingV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AA1285865F5EFEA7063678C325141C /* MBLLoggingV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 63019887C967B34870ABD77DF28DF5B1 /* MBLMechanicalSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C69BBA6C8D57F081647489D73293AA /* MBLMechanicalSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 637996777DE2D8D921DFBD1211B58FC1 /* BFTask.m in Sources */ = {isa = PBXBuildFile; fileRef = 7363ED845F28AB97287B35E39CCDC238 /* BFTask.m */; }; - 638B85A008A44C3B2E657477F86D620E /* MBLBluetoothCentralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 643206EAE8399B4005F420D6E8BA9FC5 /* MBLBluetoothCentralMock.m */; }; - 63AEE0922A218535A759F08B26A2AFCD /* MBLConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EAD9DEE69ECAFAEAFE644683B2694CD /* MBLConstants.m */; }; - 63F7DD9E98C07EDC232CFF92C7948511 /* MBLDataSample.h in Headers */ = {isa = PBXBuildFile; fileRef = A43DC64101E0EE568BE151B06C3D40D0 /* MBLDataSample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 641C5F1BD0FD20B4F55B62DC4B68F415 /* MBLTimerEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E75374D4E9DAB6C46F4B835D0D3F4A8F /* MBLTimerEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 641DBB3B3C2C488229CA7A3169C061D8 /* MBLBarometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D16E20C3099CCE7C274562CB5EA29EF9 /* MBLBarometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6476023BACB45E144851A68EA378AF64 /* MBLOrientationData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D165D933792FAC7CD7E487418BA0372 /* MBLOrientationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 64AB206CD732F9EEA82E66B7A887AEB8 /* MBLExternalThermistor1.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C51D0FDECC9EF2A48A0AA5B4642A42 /* MBLExternalThermistor1.m */; }; - 6534CA8165287486C69E7E07F9261806 /* MBLI2CData.m in Sources */ = {isa = PBXBuildFile; fileRef = 002DBE59B80D267B7D1174CAFA7287D5 /* MBLI2CData.m */; }; - 6537371BD78E9965D04ED028C667037B /* MBLFirmwareBuild.m in Sources */ = {isa = PBXBuildFile; fileRef = D68E84770A265909E54F38978E25756E /* MBLFirmwareBuild.m */; }; - 658B447B89666A03F896AD45C6AE3BC7 /* MBLPhotometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CAE92F1F49B9AECE922BB817092AD0D /* MBLPhotometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 65E59B3D0CF5314B971913A850D80610 /* MBLConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EAD9DEE69ECAFAEAFE644683B2694CD /* MBLConstants.m */; }; - 660462BF772BCE50D2F40397F0A9F7ED /* MBLHygrometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 877A0281064E5ABD387EB419547FF2EC /* MBLHygrometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 666503AE322AAE008E013C110853B97F /* MBLGyro.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F46732D0D5A9679D3057E5D13869F9 /* MBLGyro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 66D388936A8BFD38E14D31339A2475B3 /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = DBA14B83EB16970888BC823DCB27D0DE /* MBLAccelerometerBoschLowOrHighGEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6714DFB35EF4E35D6ABC2EBD83BA3497 /* MBLANCS.m in Sources */ = {isa = PBXBuildFile; fileRef = BF8652479C009FF088D5D6709EB7CC2F /* MBLANCS.m */; }; - 6722A06F5DC3CAF3D6DD69A2F61F1F77 /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F14222E245444E2244484CB57521B /* BFTask+Exceptions.m */; }; - 676CCBC563615181B300D7EC447E3333 /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = B70F33756D167A4FA310EF2A63F4E43C /* MBLAccelerometerMMA8452QRMSFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 677E48B2A7C7A90579D6A5598BE8BB94 /* MBLMetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = A66B7CD4ADF832A51D1279005F5F16D2 /* MBLMetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6822B1DF407E9B3C59736ED8524A477F /* MBLDeviceLookup.m in Sources */ = {isa = PBXBuildFile; fileRef = 86E1D090FC147E56789D44771ED27CC8 /* MBLDeviceLookup.m */; }; - 684D981E4DBC60AA3887DD2216075E96 /* MBLAccelerometerBoschFlatData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EDA4D0170274F95965943E2192C6DC68 /* MBLAccelerometerBoschFlatData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 686A14B7DDF4CA581BD0A078A0DB0830 /* MBLEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = B4CFEFE8770D9AD0341E24BD427A3AB6 /* MBLEvent.m */; }; - 68896861D99A6B79623978187F83CDBE /* MBLRGBData.m in Sources */ = {isa = PBXBuildFile; fileRef = 56EA971154A82E2F2D963F1F73C9DE35 /* MBLRGBData.m */; }; - 68D795AEB4FBD42C84BA347F13878D3B /* MBLSettings.m in Sources */ = {isa = PBXBuildFile; fileRef = 23C7F2C4631BE97E6D0C65409A5C18AA /* MBLSettings.m */; }; - 691370EE2C37126422FCED945E76D81E /* MBLQuaternionData.h in Headers */ = {isa = PBXBuildFile; fileRef = F9779743BB0779445345CE025777D106 /* MBLQuaternionData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 69F21FCCF6BB605626F1E8543AABD2FA /* MBLPhotometerTCS3472Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF58587D0E4D84D2A2CAD8A2E5B3F43 /* MBLPhotometerTCS3472Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6A1231B507E6F46BA01993E8DC887780 /* MBLMagnetometerBMM150+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 86B76EF451B2C9BD1FC4B6483ECB68C1 /* MBLMagnetometerBMM150+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6A433764CC7616DF19EBD1EC61E0FC06 /* MBLAccelerometerBoschRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 54E13DFD9F8B34FA4B720005DC6E6BAD /* MBLAccelerometerBoschRMSFormat.m */; }; - 6A73B7310F2098D08F29D7FF9E8C0CB9 /* MBLCorrectedFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = FBBC21F0A88BF36DA520DA6B9873B4FF /* MBLCorrectedFormat.m */; }; - 6A8A19F3950C61B15DEEE3A673DCC105 /* MBLDataSample.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AB01530A4D412313CD65CD892515E4F /* MBLDataSample.m */; }; - 6ABDC2ED898035D4F6C8A419CA18C0EF /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3507E4FF13655A7B8DC112BD3212D44E /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6AD4325293BBFA5AC934DA49B74DF825 /* MBLAccelerometerPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AA9FC2A2394A1BBF5EB1B9FADD41B5C0 /* MBLAccelerometerPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6AFBC16F43C2334589C51703F37F2A95 /* MBLDependentData.h in Headers */ = {isa = PBXBuildFile; fileRef = C1C99B28231BEF46531726251543F95D /* MBLDependentData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6B24FB384CF3BC441355661BC1D3320A /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EDEAAB2A23439AA26605427965FF6482 /* MBLBarometerBoschPeriodicAltitudeEvent.m */; }; - 6B3367F7BC41652DD987A10550070F41 /* MBLAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = F04C1384B21B5E727D6A34D5475BB9EB /* MBLAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B44F0B214BEC3ABBFB5DA086EDC3729 /* MBLAccelerometerBoschFlatData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EDA4D0170274F95965943E2192C6DC68 /* MBLAccelerometerBoschFlatData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6B468095418C746751DADA47C26FCF50 /* MetaWear-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 76F8C887105E275BC127772DDBBDC260 /* MetaWear-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6B4DDA22139A6A43F65F9204015B388B /* MBLLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = DEE0335A76FAAF539900AA6D34E2F76F /* MBLLogging.m */; }; - 6B66B425EC0E39CE2F8A58B2922828C3 /* MBLAccelerometerShakeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D46242C19F48BEE2D15792861D2EFDF /* MBLAccelerometerShakeEvent.m */; }; - 6B703076C3D7B88C9368A8DC8A7862C7 /* MBLTestDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E70541502FE1B4EEC651594FB6737C1 /* MBLTestDebug.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6B7B03CDD95A2DF8E5D0BF7865A00C44 /* MBLQuaternionFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD2093D0150C17663D53AF0D2BD6825 /* MBLQuaternionFormat.m */; }; - 6BCA4F65EF8D43C0412D130CAA4A6780 /* MBLI2CData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3ED4C20784864624CA77166567B77F /* MBLI2CData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6BF096396E204FFBBC2023A9C6C82EAC /* MBLAccelerometerBMI160StepEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AC5FCD84CB9C3A65FFB4D7339F725E58 /* MBLAccelerometerBMI160StepEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6C87674A4063AE1ADB0B8432561A041D /* MBLSPIData.m in Sources */ = {isa = PBXBuildFile; fileRef = D20073129429570646FABC385B7A5A9B /* MBLSPIData.m */; }; - 6CD8DB7C2826074BDD9C8310129005AF /* MBLGyroBMI160Format.m in Sources */ = {isa = PBXBuildFile; fileRef = D9C252AFF8BB0956C98DE543968E2066 /* MBLGyroBMI160Format.m */; }; - 6D0637F3867F912A84677B049A6F1C27 /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 17E20328641E5D9CA09CBBE5F5468A0B /* MBLMagnetometerBMM150.m */; }; - 6D09EC46FBF867F81A769BD3B4D43E7C /* MBLNeopixelStrand+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C978BF2D9FF8F00A034662BBCEC1FE53 /* MBLNeopixelStrand+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6D12DD756B0A860263F24832F288A1C5 /* MBLPhotometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B750D3000BEF3E657F93E7C2C11DDB5 /* MBLPhotometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 6D167C9E1925F5C5D43A2B6F5BC10BB8 /* MBLAccelerometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F27F47FC1321AD27483B719A0C9CADA /* MBLAccelerometerBosch+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6D8C00DE53E684C6E33892D24D3346C7 /* MBLAccelerometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = EAACFD7B01AD5B5FCDCC03A40F40FF14 /* MBLAccelerometerBosch.m */; }; - 6DECAC4F338BCECF644A37167230B879 /* MBLAccelerometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F27F47FC1321AD27483B719A0C9CADA /* MBLAccelerometerBosch+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6E2119DA273C355C81BD3EB34D494418 /* MBLMagnetometerBMM150Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E22884E5F6DA9B9A89D2C29802514C8 /* MBLMagnetometerBMM150Format.m */; }; - 6E69B8D77921C94ED8C90120800EF45C /* MBLGyroBMI160AxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 37D9E3818565F54B062AAA959D79DECD /* MBLGyroBMI160AxisReadyEvent.m */; }; - 6EB5DD63D3E6606F94FA1D9DF580A63B /* MBLBarometerBMP280.m in Sources */ = {isa = PBXBuildFile; fileRef = 9203157C9B5F34C2D630EC2DCAAA7A63 /* MBLBarometerBMP280.m */; }; - 6EC8860CC056561672588FD37DEB4CB1 /* MBLCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 370BDE5254786592F755411B3CEB8C1B /* MBLCommand.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 6ECFDEC701314BAC13754EC5F4C637CE /* MBLAccelerometerShakeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D46242C19F48BEE2D15792861D2EFDF /* MBLAccelerometerShakeEvent.m */; }; - 6F6674479D60AFA4D19E202EAD80FC0B /* MBLBluetoothPeripheral.h in Headers */ = {isa = PBXBuildFile; fileRef = 959AB88023DAC11C162E060851EAF248 /* MBLBluetoothPeripheral.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 70537376BAC4A19209FF6BE04373BE86 /* FastCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2F21AD149A6195BDBBEDDB8CA77DA8 /* FastCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 70B6316231CF711B117C0C8DEC8CAF73 /* MBLDataProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 26FFF7A3BA272EB3749B82156C18E549 /* MBLDataProcessor.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 70EFCFA1FB27C83BF1CE48066F886D95 /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EDEAAB2A23439AA26605427965FF6482 /* MBLBarometerBoschPeriodicAltitudeEvent.m */; }; - 710B6D16ABF975BE8C06033254E0E054 /* MBLDeviceLookup.h in Headers */ = {isa = PBXBuildFile; fileRef = A8A1CFEDCF8D9E2970D011A98BA41516 /* MBLDeviceLookup.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7139F5063C4629A188D980C9E3421265 /* MBLNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 10452424C154C0C85FEFD3422604FFFD /* MBLNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 724355A3E01DB817A0E1C3701AE452C1 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A7E3F764013B97ED812E8D3283DAA255 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 72AC19C212795D650DB0F484C0571704 /* MBLFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 01FEC95AFD637366A6C38E82EFCA1892 /* MBLFormat.m */; }; - 72B486BCCFE03454BE007434698E725C /* MBLGPIO.m in Sources */ = {isa = PBXBuildFile; fileRef = C218101D30CFC198B28DC323D33B8EBB /* MBLGPIO.m */; }; - 72F442BAF80420BC89375D64DD8E8317 /* MBLSerial+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FB311E558EC50722E2C62C1661943B60 /* MBLSerial+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7362AA10ADB91118E93DE15231990E94 /* MBLGyroBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B2E74149B503E1A320D20F5F1BE50BC3 /* MBLGyroBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 744194B10AFB26D3C439DBCF5DA11D88 /* MBLOrientationData.m in Sources */ = {isa = PBXBuildFile; fileRef = 981644CDA9C010F4972FAA55611E3E3B /* MBLOrientationData.m */; }; - 745CCE1AC9AFEA5D6AAB0FA7058F5103 /* MBLGPIOPinChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AD4735DDB0C827E61EAD3079BF9F48 /* MBLGPIOPinChangeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 74E4285A9A34F6C80260C06A4F07ACDD /* MBLEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6509C8C65CA28F032A641699AEFF71CE /* MBLEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 750716CFA12AA1207038FADE1219BF85 /* MBLProximityTSL2671.h in Headers */ = {isa = PBXBuildFile; fileRef = 45BA09FA60F45842A6A076016F5ECE19 /* MBLProximityTSL2671.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7509AD29B8D5D0C2F9C1A57F1D2BC5E1 /* MBLAccelerometerMMA8452Q+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1081563FA3CA893D64CD1D5FB19AA7ED /* MBLAccelerometerMMA8452Q+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 75161E625A86C896EAE1B068D7DBF02F /* MBLAccelerometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = F44C28B27EDCD1478ADEFADF3B1B3362 /* MBLAccelerometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 752A59251A92A1E1F5D7A5FF483CABD6 /* MBLAccelerometerBoschRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 54E13DFD9F8B34FA4B720005DC6E6BAD /* MBLAccelerometerBoschRMSFormat.m */; }; - 75D0B82C5D9B82F9C5F4659ABD73C446 /* MBLPhotometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CAE92F1F49B9AECE922BB817092AD0D /* MBLPhotometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 75D44F69F5D5A4059EC9608EF1ED4276 /* MBLAccelerometerBMI160StepEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DC9439ACEFDC7053DDA4F988438A0743 /* MBLAccelerometerBMI160StepEvent.m */; }; - 76079A2943369454D7765952AA604B87 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EF2EA215EA3A7BCF71F5CABA0454879 /* BFCancellationToken.m */; }; - 7612A78E53B9FFEE3CEF001C19EEF633 /* MBLNeopixel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 414435389F012CBF6D41D5242CF5FDE3 /* MBLNeopixel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 76331E4A5EE1D3F8951A2C17F610167F /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 17E20328641E5D9CA09CBBE5F5468A0B /* MBLMagnetometerBMM150.m */; }; - 76404633A761490CC03A8D554FDE47E5 /* MBLMetaWear.m in Sources */ = {isa = PBXBuildFile; fileRef = BF82953F90A945F59016883056756DE7 /* MBLMetaWear.m */; }; - 7685581190C8F75A049CA3CCCEA82D6A /* MBLGyro+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4561FB74CFACF04C35AB74288309BE32 /* MBLGyro+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 76B775CDF2E8D15CDB35B704314C5D26 /* MBLEntityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DCCCD6B06E374DB287F0B2BA79751C3 /* MBLEntityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 76BB3B8B430E93EAEE55C1A83094462C /* MBLAccelerometerBoschOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BC3658C58BC69AAA5EF88DA0D89F8C1F /* MBLAccelerometerBoschOrientationEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 76CFFFC09EFA58ABDC484D3BAE2C43D4 /* MBLAccelerometerBoschTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFC91FEE47741BE83E3B4DA6ACA3891 /* MBLAccelerometerBoschTapEvent.m */; }; - 76E87739FCEDB3998219966D69CB7660 /* MBLSettings+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 78645BA6A31BDB069A935A83150F934A /* MBLSettings+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7710F1C0C27FAFDA2CE35FD479B8441A /* MBLLED.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B7C1BF89D1729EB27F1B94086AF8E4 /* MBLLED.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 77B2E4BDBDD7BBFF81CB9336CDAAC6BB /* MBLGyroBMI160AxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 37D9E3818565F54B062AAA959D79DECD /* MBLGyroBMI160AxisReadyEvent.m */; }; - 77D6656F98B1C3F45FDE60AA882BD791 /* MBLDeviceInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 174A108EC154260C6B810F2E28AB7C05 /* MBLDeviceInfo.m */; }; - 781C83F8943D76C79ED517A946E224F8 /* MBLBarometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BACD2DA7C2B8550742703BBDAC9D3E9 /* MBLBarometerBosch.m */; }; - 78913813A0934F595F9250D0EE01F52C /* Bolts-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2898667AC2BA44EB8D37A942DF34372F /* Bolts-tvOS-dummy.m */; }; - 7931D4B8D7C4E8125B40E06A50DF69BF /* MBLiBeacon.h in Headers */ = {isa = PBXBuildFile; fileRef = 656F14665616943F45AC63474738055B /* MBLiBeacon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7990FEA346BCE460F0AE07A41F24B78D /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D482429392C19BF45BE60346D6986E /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 79B2531C1D4F24FE5757EC368BEADA07 /* MBLBluetoothCentral.h in Headers */ = {isa = PBXBuildFile; fileRef = 432403714E611FF7BE6154CE961F4250 /* MBLBluetoothCentral.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 79C23E7EBC9BA264875CEC855FD4556B /* MBLBluetoothCentralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = CA61631C3315F36BAAA72204FFFEAC2B /* MBLBluetoothCentralMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7A0CA6A2D0AABC44E317269069D0E6A4 /* BFExecutor.h in Headers */ = {isa = PBXBuildFile; fileRef = 65100B32123F844FC52882C8AD36BA4D /* BFExecutor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7A1A741A821628AF09BC304E698D607C /* MBLMockUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 8F44FE55A5E98E6D8AC3E760780EF5E2 /* MBLMockUtils.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7A538E478B370BF3C50EC4DCAC639201 /* MBLGyro.m in Sources */ = {isa = PBXBuildFile; fileRef = 711867FC17C52947DB12572824DB5C26 /* MBLGyro.m */; }; - 7AC6807BCAC6F8B8124FB2174A019427 /* MBLTriggeredRead.h in Headers */ = {isa = PBXBuildFile; fileRef = 42C5DFD9D0B808866C0C22532B0D36CB /* MBLTriggeredRead.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7B0E90830BCE718BDF61BA08F8083F30 /* MBLAccelerometerBMA255.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BEDBB7E24ED6EAA39173671F4ED72C2 /* MBLAccelerometerBMA255.m */; }; - 7B4F5388E2CB710FFBF51E4A8EE3C71F /* MBLBarometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = 7BCAB87B93748180D874EBBE46884B60 /* MBLBarometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7BEB696154F07C14B59BE390CBD7B008 /* MBLMacAddressFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9046915089B8C866F632E74C372B90F6 /* MBLMacAddressFormat.m */; }; - 7C287CCB4A786EEF55E45CB797B1865A /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = ACE63D2BE2BD0FEFC6773E8A89B7A5F7 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7C3F69EF5C7DB9C2CC44E16D056F2948 /* MBLAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA854A9B3FBED4784EE1CB16D572BD4 /* MBLAnalytics.m */; }; - 7C466BF65CE8273751E0A9A6FD8A274A /* MBLQuaternionFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD2093D0150C17663D53AF0D2BD6825 /* MBLQuaternionFormat.m */; }; - 7CAC678A9BB12DFBAFC7AC00E7A3F0FB /* MBLOnDieTemperature0.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EACF36CC75B1953FD7F7A4F613CC43C /* MBLOnDieTemperature0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7CD21BAEDDF32FE56C86F5C1D0463E03 /* MBLEntityEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B00644538655FE4FD0C408206C17228D /* MBLEntityEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7D105FE9BCC556C79B6BDABED77B48E9 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C0572D9E03034C6B04220BC00D04F3A /* Foundation.framework */; }; - 7D4B5F50474051F58C8F57231BBD6413 /* MBLGyroBMI160AxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 37D9E3818565F54B062AAA959D79DECD /* MBLGyroBMI160AxisReadyEvent.m */; }; - 7D684A5BD3F27FAFBA0978F9361B030B /* MBLRMSAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 863E9035951E1AF3B90CAA3ADF4DACA4 /* MBLRMSAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E3B24C295EBC2BBC8E20BC5CEACC884 /* MBLAccelerometerBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A057B248B30330E56EE400E14A8C4D3 /* MBLAccelerometerBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7E46B7C888331B764B03EB41BE9560C5 /* MBLAccelerometerBMI160StepEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DC9439ACEFDC7053DDA4F988438A0743 /* MBLAccelerometerBMI160StepEvent.m */; }; - 7E88E30404778BD3575FFE353C746EBD /* MBLDataSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 9305641039886B57EA88E02E7D780CCD /* MBLDataSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7EBDB665D62C77B5F35E7D8BF496C01B /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D5B7CB99D2B0CDC0A260E478493EF8D /* MBLAccelerometerMMA8452QRMSFormat.m */; }; - 7ED311EDC521A5F8033337049AB450E4 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = F86E6E388C2EF806B61222B3D681D043 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7EECBC4494387CC394932DFC60B56E4A /* BFTask+MBLPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 72F465BA476651D387919A8222A795CE /* BFTask+MBLPrivate.m */; }; - 7F3F96036571B169DD330F2819614A9D /* MBLFirmwareBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 55E7A40F99505A0B7B1F6E140808CFE7 /* MBLFirmwareBuild.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7F498DC051FC71F730DC1DF43927234E /* MBLEulerAngleData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0BFED5A2B9A105DCF96490C518361A50 /* MBLEulerAngleData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7F548E1DD10D34E7B9C54824C36C8622 /* MBLAccelerometerFreeFallEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 05B9CA1F026CEB6CA68B3E741811AC90 /* MBLAccelerometerFreeFallEvent.m */; }; - 7F5F0CE8A0D1123248D19D86CDB6A19B /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 73232EE235678E12A8D3D2A1E3D6C1D4 /* MBLHygrometerBME280PeriodicHumidityEvent.m */; }; - 7F85542508D468690270DCE331C17C50 /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = B115D36606B4AADD761217DB4C2A9A05 /* MBLHygrometerBME280PeriodicHumidityEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7FA4C3879DF434D97C649AD5750FE5E0 /* MBLGyro.m in Sources */ = {isa = PBXBuildFile; fileRef = 711867FC17C52947DB12572824DB5C26 /* MBLGyro.m */; }; - 7FADB3AECFC87EEB07F713D87D1E1F90 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 9D9CF207753D00EA14C7FF077C2A7B77 /* MBLAccelerometerBoschAxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 7FDAD07F3E465374E5A1B2D7CF7544C9 /* MBLAccelerometerBMA255MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 23AA82CBCF671572A6EDE8C4D2B334FE /* MBLAccelerometerBMA255MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7FE66DABB00124A400D0EBB803CE27CF /* Pods-Starter-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B5215E2014BAD178596E1165E37CC7FB /* Pods-Starter-tvOS-dummy.m */; }; - 807F39F82E60C42A10A7B78DC0A49173 /* MBLHygrometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB7B3F9D3FF6BC24D8C4A48E6924102 /* MBLHygrometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 80D7EFBA7C79F7141CFCF7BB77870EF0 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 062038508A0820C10A3AFACC41299093 /* MBLAccelerometerBMI160MotionEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 80DD485BA0C888E0414707DFF64DBDD3 /* MBLGPIO.m in Sources */ = {isa = PBXBuildFile; fileRef = C218101D30CFC198B28DC323D33B8EBB /* MBLGPIO.m */; }; - 80DFA8D6F50AA7ED2C50487D5693D7F7 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D482429392C19BF45BE60346D6986E /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8165706D31A9C1A561768413B6004282 /* MBLFirmwareBuild.m in Sources */ = {isa = PBXBuildFile; fileRef = D68E84770A265909E54F38978E25756E /* MBLFirmwareBuild.m */; }; - 81B16F889AC0341AE172A609F9824FCA /* MBLAccelerometerMMA8452QFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C009289D9A902BB50149D3B9C4F04D4B /* MBLAccelerometerMMA8452QFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 81E961F4E1A93B592EB73609496F4CD2 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C0572D9E03034C6B04220BC00D04F3A /* Foundation.framework */; }; - 820FBC94190F9628468C86728F1090D8 /* MBLPhotometerTCS3472.m in Sources */ = {isa = PBXBuildFile; fileRef = 39D447E44BF7D2891CCCC9A36CEBAA97 /* MBLPhotometerTCS3472.m */; }; - 8233314945DF5B460CABB7B912126EA0 /* MBLAccelerometerBoschFlatData.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D3E04CB05CB608FC44EF00F5EE1102 /* MBLAccelerometerBoschFlatData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8233EF251F69A1DF948277DD9617C2FE /* MBLAmbientLightLTR329.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF5F7E8303E99B87637CDC4567F15E3 /* MBLAmbientLightLTR329.m */; }; - 8291708752D887C0F970AB52AFED4272 /* MBLANCSEventData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B08FF8DBCEA081BFC5499F13D8D1EB48 /* MBLANCSEventData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8385251D1448DBEECFA56D1B356CC706 /* Pods-Starter-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1400A5025F05B757164F1B37F6B10126 /* Pods-Starter-macOS-dummy.m */; }; - 83E996AE3CAE2D33BDAAFE89AF0003CE /* MBLAccelerometerBoschOrientationEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 903BBAC1CBE28E72767F13680C7D7260 /* MBLAccelerometerBoschOrientationEvent.m */; }; - 84175AFEC2D4DB23C1AE17302D496FC6 /* MBLDownloadOnlyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C00DFBCA78DE12AC8636FF801CD7203A /* MBLDownloadOnlyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 841C2F77B40173F35D3C9E1F7201F004 /* MBLGyroBMI160Format.m in Sources */ = {isa = PBXBuildFile; fileRef = D9C252AFF8BB0956C98DE543968E2066 /* MBLGyroBMI160Format.m */; }; - 844F51472F3085BFFBC3BDA913B30ED4 /* MBLFirmwareUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BEC5D637AA502156E39846414268C83B /* MBLFirmwareUpdateManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 84B50E85314757A7D6826340002DD997 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A5F62FE96D6A8B0861EF4045CB3F6036 /* MBLBarometerBoschPeriodicAltitudeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 84C7AE56F1373ED3EB28B9A37CEDB9E8 /* MBLI2C.h in Headers */ = {isa = PBXBuildFile; fileRef = DB0E435AD114EF383A969D5A426FE268 /* MBLI2C.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8505C5427B44C5F8F970B1DD48B2652E /* MBLConductance.m in Sources */ = {isa = PBXBuildFile; fileRef = C014ECE4DBE240C0F225336A0534E7CF /* MBLConductance.m */; }; - 85341EA6CE1E47C1A9600B6060C15594 /* MBLAccelerometerBoschFlatEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EC92678BE93C7CF96A2F914F9952499D /* MBLAccelerometerBoschFlatEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 853FF707B1BEFE4FE8F603B2A5E5C17E /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 6D5B7CB99D2B0CDC0A260E478493EF8D /* MBLAccelerometerMMA8452QRMSFormat.m */; }; - 85D5C77ECC04113159B7AFA347339536 /* MBLData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D6ACD4F53E85B97F12F359D00E79C610 /* MBLData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 85E4AD14B0D5E6B10C9F2EFFA2DB0477 /* MBLRGBData.m in Sources */ = {isa = PBXBuildFile; fileRef = 56EA971154A82E2F2D963F1F73C9DE35 /* MBLRGBData.m */; }; - 8645438749D5D7785D9BB50559645683 /* MBLBarometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = C7D606484687C0BF332DCA330EFEC20B /* MBLBarometerBME280.m */; }; - 869CF2F6DDCC0A2D38EC4DB46F1E71C6 /* MBLData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E006E0231DC90761DDF2F055756ED21 /* MBLData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 86EC5C6B9BA6F9A487708AD304B2346A /* MBLAnalytics.h in Headers */ = {isa = PBXBuildFile; fileRef = C4FE8BC8F7BFCBEAF055DBFCFEC485A0 /* MBLAnalytics.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 87711A85C354CA2E6339B22EDA01BC64 /* MBLAmbientLight.h in Headers */ = {isa = PBXBuildFile; fileRef = 82CE7DAC5F60556447508756C4E8F51D /* MBLAmbientLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 880FB83B15AD09B64C12EFBC1D2FD372 /* MBLRGBData.h in Headers */ = {isa = PBXBuildFile; fileRef = F27ABA1C1B56697C3CBEA5201D1E1EA5 /* MBLRGBData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 88341E0CA9119CAFB62E1FDC91AC5882 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 057A9088769B19509C3B0725D9E91BC3 /* MBLAccelerometerBoschFlatEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8858258AC4DE755A889456524A7DCE95 /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EDEAAB2A23439AA26605427965FF6482 /* MBLBarometerBoschPeriodicAltitudeEvent.m */; }; - 8859D1637B6595D92CA517BD3B1F5EBF /* MBLHygrometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = EBB7B3F9D3FF6BC24D8C4A48E6924102 /* MBLHygrometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 885FEBF41AEA96427FF273AD07F8BD89 /* MBLTemperatureV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D8062A60FDD5F2D81372764F8C172A3 /* MBLTemperatureV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 888A0F927E07717658D1285AF3F5FD5C /* MBLAccelerometerBoschOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BC3658C58BC69AAA5EF88DA0D89F8C1F /* MBLAccelerometerBoschOrientationEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 888F405D5C461AACF1D5502DE9795BA7 /* MBLBluetoothPeripheralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 606EB73B59EF05A3719E7D85B32CE998 /* MBLBluetoothPeripheralMock.m */; }; - 88BFEE1EA3A643988F43F83DD22D1389 /* MBLMockPeripheralFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = 5DC946709FD1C2A947BD1E3A79A18E21 /* MBLMockPeripheralFactory.m */; }; - 88E22E3713ADBA6824130CE6170B1642 /* MBLRegister+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C7C2259F2F02EECE4558B57F94E1E3 /* MBLRegister+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 890B8A444F4356E37B1BB6D312C8D61C /* MBLDispatchQueue.m in Sources */ = {isa = PBXBuildFile; fileRef = 41D4C40BFB8F6904AB91AFDE99FBF1BA /* MBLDispatchQueue.m */; }; - 89105ABA44C514746011AC9897C79471 /* MetaWear-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 10EB41F7758F64A177CEB295D4CB8A07 /* MetaWear-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8913E584C4F6FDF13A2E3AADB0F03CB3 /* MBLI2CData.m in Sources */ = {isa = PBXBuildFile; fileRef = 002DBE59B80D267B7D1174CAFA7287D5 /* MBLI2CData.m */; }; - 891DC0DDF6B7D997B348B6B7B8793159 /* MBLEulerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6017B957E6C2CA4CF3F4D7052EDB2C39 /* MBLEulerFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 891F5AFD549001A47E4589F9EBC77CCC /* MBLBarometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D16E20C3099CCE7C274562CB5EA29EF9 /* MBLBarometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8933BF62884AAF9DC664DD1A0F8CA1F3 /* MBLLoggingV0.m in Sources */ = {isa = PBXBuildFile; fileRef = B751A124D571D4247E943A0FDA522578 /* MBLLoggingV0.m */; }; - 89748C0A277182B3FFC8CCCB7678F184 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = ADA36E2FB695216C6920CF5C44FADC0D /* MBLAccelerometerBoschAxisReadyEvent.m */; }; - 899E281FEBCA5A038DC150AE49AB02F0 /* MBLFirmwareUpdateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D317640CB86BA28327C329AD150CA58E /* MBLFirmwareUpdateInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 89C06A11DB399B4572985D636E1245C8 /* MBLANCSEventData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B08FF8DBCEA081BFC5499F13D8D1EB48 /* MBLANCSEventData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 89DDCEE4355EC8A8C6F1FC5E4161E434 /* MBLDataProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 26FFF7A3BA272EB3749B82156C18E549 /* MBLDataProcessor.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 89E38D90D76AFAE6621D33BB481B2744 /* MBLNumericFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A1A7139C699D05C359780845610FB22 /* MBLNumericFormatter.m */; }; - 89E8EA2AC58847A20994D1675564E569 /* MBLAmbientLight+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 47EB7E96479ED8478F088E850DCCB33C /* MBLAmbientLight+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8A1A106595D4CACC10CA76BA60B7E0A4 /* MBLMagnetometer.h in Headers */ = {isa = PBXBuildFile; fileRef = FFFDB3EE908CC40CC530395C85E3458D /* MBLMagnetometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8A459BE9D777B409FE80AE9417AD8B5D /* MBLGyroBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEE54F150DA612584E712A898EFEFC7 /* MBLGyroBMI160.m */; }; - 8A8BEE551197CFE127CF525E1001DB5B /* MBLAccelerometer.h in Headers */ = {isa = PBXBuildFile; fileRef = D72C4D748AA386035CB162B95E473342 /* MBLAccelerometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8ADF13DB8FEFA931CBDE9792B1AE1753 /* MBLEntityModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 594D339B971E1A22541A55D46D2A0010 /* MBLEntityModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8B47AAE8AECE7D4CD718DCC7AA9C5AAD /* MBLQuaternionData.m in Sources */ = {isa = PBXBuildFile; fileRef = AE1FA155F112AAA570ACA5290C93EC1D /* MBLQuaternionData.m */; }; - 8B90556E1F21BF79FC80D5C14899200E /* MBLNonVolatileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 973C3CCB59EC1DD82ECF015EC4E4CCAA /* MBLNonVolatileState.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8BB04DA6529A2160563389B9E9DB54E5 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 057A9088769B19509C3B0725D9E91BC3 /* MBLAccelerometerBoschFlatEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8BCAD7D138A2F23B0D1E17168A02D8FB /* MBLAccelerometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 227DD8EB5493B11D84B1611388D7B876 /* MBLAccelerometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8C01269496E76D94BAD7C573922318A6 /* MBLTemperature.m in Sources */ = {isa = PBXBuildFile; fileRef = 73DE0D5505D394B9DC4A462D05EFA0E1 /* MBLTemperature.m */; }; - 8C02A058ED021E7D6464F32355D88965 /* MBProgressHUD-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F92DB4AE50B415AD300DAA5BC4767174 /* MBProgressHUD-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8C1C624826ABF1F5F86A03DEFA151B50 /* MBLAccelerometerBoschFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 289EFCFE9074EB09D61042A67F1CB9AC /* MBLAccelerometerBoschFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8C7C44858004769D35CD0932F5951609 /* MBLAccelerometerTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 75AF7D9B0330B805F7A4C347639CF709 /* MBLAccelerometerTapEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8CF8DB57BD3856F63787DEDF89EF0066 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = F86E6E388C2EF806B61222B3D681D043 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8D153374F1EC7D559C7B19FF8B6423A2 /* MBLAccelerometerBoschFlatFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EB490BFEC65DD75C59048669C60EADC0 /* MBLAccelerometerBoschFlatFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8D87922D4912B85065D5CA7ACC589607 /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AE9B27FC17FCC12EC7A9E7C6EACCAA89 /* MBLGyroBMI160PackedDataReadyEvent.m */; }; - 8DD1ED4745C0808A71199609780E54D3 /* MBLExternalThermistor0.h in Headers */ = {isa = PBXBuildFile; fileRef = 56399F53F95874236906C93F8990D7D4 /* MBLExternalThermistor0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8E48980019FFD7DA8DBC3FC6226E983D /* MBLMechanicalSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C69BBA6C8D57F081647489D73293AA /* MBLMechanicalSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8E7453875FEB894D40A673F77C7A8DFD /* MBLBarometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 152E66FF201A94616AFB7BD1F2FF05A6 /* MBLBarometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8E86990ED31B25428377E919CF6511BD /* MBLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6821E56C1E7FF7715251DC8A23A477ED /* MBLLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 8F20AA4E8162C9FE089FF3EE0AF9B515 /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 081D7D7A834CA695B5960AF3CB99F844 /* MBLAccelerometerBoschLowOrHighGEvent.m */; }; - 8F6E8DDDABB609A2D53AA8822676BAC9 /* MBLSerial.h in Headers */ = {isa = PBXBuildFile; fileRef = D0D47EFF60E4C35624057BD74F164FED /* MBLSerial.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 8F7B8DB218C7C4BFBA549C3BE827287B /* BFTask+MBLPrivate.m in Sources */ = {isa = PBXBuildFile; fileRef = 72F465BA476651D387919A8222A795CE /* BFTask+MBLPrivate.m */; }; - 8FAACABC68A6DE4FB7E1B12D19AC2921 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 4F138D366CF5295E4813996DDBB5E8A9 /* MBProgressHUD.m */; }; - 8FBED563BDFF9899E46D7E4F9AA54978 /* MBLEulerFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = A2FD4BE33BC98270E878E0FDD87F2729 /* MBLEulerFormat.m */; }; - 8FE884C3DB5568F45A0C4263F3F65CC9 /* MBLModuleInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CC6647544C92E237C5E58817ABF815 /* MBLModuleInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 90229477C14C2CB81927B7C99DAE670D /* MBLSerial.m in Sources */ = {isa = PBXBuildFile; fileRef = 9404ACA56CB19BDDA6AA900FBDA9A317 /* MBLSerial.m */; }; - 904E62D9F04106B7A8D01ACD39DB906A /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B8D190364D91B2BB0B5EFE96C91EA2 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9083768CD6FE1EC28FE5042A8F6CD7FD /* MBLFirmwareBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 55E7A40F99505A0B7B1F6E140808CFE7 /* MBLFirmwareBuild.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 90972BC643126B71DC931A6D52898B82 /* MBLAccelerometerBoschTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = EF6751A4DC10EFEC4854078BC5450F20 /* MBLAccelerometerBoschTapEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 90EC76EB5B6E414DC46B5793A71AE65B /* MBLGravityFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE6896A63CD5BFB98F4BEFA942A2A08 /* MBLGravityFormat.m */; }; - 911C5F3DFC8E6DEC9F7E822851F19B7C /* MBLFirmwareUpdateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F5403878E25BFCDFDFB2721108518D65 /* MBLFirmwareUpdateInfo.m */; }; - 9127D5CD43DB209E81CA4103EF599473 /* MBLPhotometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B1E68856F19F80FD47414AA57EFEE18 /* MBLPhotometer.m */; }; - 91299C5A7C6D42030DF7CC0132A5EE60 /* Bolts-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 006C897194C2D2C5D9A898FA632EDE11 /* Bolts-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9139187598353BCB66A4601BFFF4B133 /* MBLFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 01FEC95AFD637366A6C38E82EFCA1892 /* MBLFormat.m */; }; - 914708D2230805C01EB67559B464A6EE /* MBLGyroData.m in Sources */ = {isa = PBXBuildFile; fileRef = A13D336140C6DEDD777F645BE4DF3B7D /* MBLGyroData.m */; }; - 91644C657F33AA0BAC2AF8C8DC67E859 /* BFTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 96B8D190364D91B2BB0B5EFE96C91EA2 /* BFTask.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 919676BEF85738E3F7E053478B1111D5 /* Bolts.h in Headers */ = {isa = PBXBuildFile; fileRef = CBC1499FF61B9E6574CE31364FA9D2B1 /* Bolts.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91C465D2DFF02E0316CE74BA644AEFEF /* MBLMagnetometerBMM150.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941B5A6AA94E0B5B46B122C660F520B /* MBLMagnetometerBMM150.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 91F908A62FA2EDB2C5CA228B3F658364 /* MBLAccelerometerBMA255+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5089205E311AC48EC0142FEB779F9337 /* MBLAccelerometerBMA255+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 92278D28B85517AA856652A72D0EDF86 /* MBLMagnetometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = 14B6A31958CC8C516388975A773C8697 /* MBLMagnetometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9256D46411C0C23723479C74273A7FC5 /* MBLAccelerometerBoschRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = DC37BD9E46482A494DC7492294708EAF /* MBLAccelerometerBoschRMSFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 92A1A0833388744FB506A3AA99AE488C /* MBLOrientationData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D165D933792FAC7CD7E487418BA0372 /* MBLOrientationData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 92D20CEEA10B427FFCF44B98931E29AB /* MBLBarometerBMP280.m in Sources */ = {isa = PBXBuildFile; fileRef = 9203157C9B5F34C2D630EC2DCAAA7A63 /* MBLBarometerBMP280.m */; }; - 92D8163A15DCA3886748A5461FD95A10 /* MBLAccelerometerMMA8452Q.m in Sources */ = {isa = PBXBuildFile; fileRef = BBDCEC312737CE56EBE4236DCA8BA750 /* MBLAccelerometerMMA8452Q.m */; }; - 936EA7ED273395DA20F4C7F8ACE2F94C /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 057A9088769B19509C3B0725D9E91BC3 /* MBLAccelerometerBoschFlatEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9388985FE58BD12E708C7BF3C6113D33 /* MBLPhotometerTCS3472.h in Headers */ = {isa = PBXBuildFile; fileRef = F718090CB9057236EB1DFB034F70974C /* MBLPhotometerTCS3472.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9396F6A8A9632933F8FB229923A44C12 /* MBLPhotometerTCS3472Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C89D7E66B301BD38A7BEF9EFDE1766 /* MBLPhotometerTCS3472Format.m */; }; - 93D2DCA99D8EE7E38079242DFC0C53CA /* MBLFirmwareUpdateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F5403878E25BFCDFDFB2721108518D65 /* MBLFirmwareUpdateInfo.m */; }; - 940E056B928EB976EF16DDAE573B8FD9 /* MBLHapticBuzzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B28ABD0EEC5DEB324BECFFE15D7923 /* MBLHapticBuzzer.m */; }; - 943687131D8073AF9ADB952F06D6142B /* MBLAnalytics.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA854A9B3FBED4784EE1CB16D572BD4 /* MBLAnalytics.m */; }; - 94433C82B25173EA50478480623A6FB0 /* MBLMacro.m in Sources */ = {isa = PBXBuildFile; fileRef = 610A24A199D5AD64DBB7279794C620F5 /* MBLMacro.m */; }; - 948B18124C826C46B31A2943CC8E68DA /* MBLGyroBMI160Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 77690A4A4C5A42B5BC6EFC98D6900C6E /* MBLGyroBMI160Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9494D3322D450C849A5713CD3620719C /* MBLQuaternionData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B29669E68D153C6F0836018F0E43715 /* MBLQuaternionData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 94ADC9F0B8840254116D5138CDEE3C1D /* MBLCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 29A06566DFD36AD873A449282791F5BA /* MBLCommand.m */; }; - 94D6B2FB6C9D84FAFD970514C6AFBB44 /* MBLGPIOPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B73C063AF59387AEB21A691DC36720D /* MBLGPIOPin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 94E232F660AAC4031B3F18E44ABD6C42 /* MBLAccelerometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = EAACFD7B01AD5B5FCDCC03A40F40FF14 /* MBLAccelerometerBosch.m */; }; - 94F13C84ABAA557DA39C59CBC3AD11F8 /* MBLExternalThermistor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A01A4D7F336CD0F0E9091B7CC6B9648 /* MBLExternalThermistor.m */; }; - 95C1818DCB477B88FF21B36DB65B040D /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 546CD238C0E754C135E34A9112607EDB /* CoreData.framework */; }; - 95D8697500A7D6B932E8FCBFDDB2EBB2 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 172FA2D73597B91F0A83B07FB8E84F95 /* MBLAccelerometerMMA8452QOrientationFormat.m */; }; - 95DE0F35FDB875F1B467F30BD3B57212 /* MBLGyroData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C6ED4316FF4C55F5D679E4A3A2E1BCC5 /* MBLGyroData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9677E4ADAEB33D0CE6DE2C33EB1A1D7B /* MBLMetaWearManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 1A1BBDE1DD563096720D8D866FF4DB4F /* MBLMetaWearManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 96BD6CAFCA9DAE9CA7891D612FA502C4 /* MBLEntityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DCCCD6B06E374DB287F0B2BA79751C3 /* MBLEntityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 974BE776EC14EC928F75A130C0471CB4 /* MBLAmbientLight+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 47EB7E96479ED8478F088E850DCCB33C /* MBLAmbientLight+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 979D7C9B881C9EE9D1BE18A2286E3AA1 /* MBLAnonymousEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 108CC179687676A0F35B7BF2F9B51837 /* MBLAnonymousEvent.m */; }; - 97E6F164EAA971F2CB0C5452E4CBAD41 /* MBLLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = DF05DA6CD115AA6EEF289B14B106AD87 /* MBLLogging.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 982368F3586B8E80C225CFEFF7DACEB1 /* MBLiBeacon.m in Sources */ = {isa = PBXBuildFile; fileRef = D1FF06642DBC4FFC0B2B829104D421CD /* MBLiBeacon.m */; }; - 98383BAD0E8193906E8D89DDBC20840C /* mma8452q.h in Headers */ = {isa = PBXBuildFile; fileRef = C6175132B1A5F37DFD658D10C3711CE7 /* mma8452q.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 98AB498CB06BCBA986064EF3B00DDCAE /* MBLMechanicalSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = F22EB274B868FEB86414F9A31C438C82 /* MBLMechanicalSwitch.m */; }; - 98C3BD9CCF0D7E2C34DE4B312DB394CF /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 73232EE235678E12A8D3D2A1E3D6C1D4 /* MBLHygrometerBME280PeriodicHumidityEvent.m */; }; - 99B134A0C68228E9D32510B396DA0F97 /* MBLMagnetometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89D1CC714D0CFD616B98573800172072 /* MBLMagnetometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 99D97CC6EB5948C403B51D58E2B9D129 /* MBLAccelerometerBoschFlatEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DF2D88DE8088065E8B624DDFBE58526E /* MBLAccelerometerBoschFlatEvent.m */; }; - 9A3F748E3FA7B1B2B2973D979E80CD13 /* MBLLoggingV0.h in Headers */ = {isa = PBXBuildFile; fileRef = BE4FB9FDAC472B413A57ED7CF855DEFD /* MBLLoggingV0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9A5034D615CA648F7B784B7E1F45CB1E /* MBLEntityModule.m in Sources */ = {isa = PBXBuildFile; fileRef = D909879784C6FEE4ACCD029C6D5086FC /* MBLEntityModule.m */; }; - 9A611C9B87F72E8FE4279ECB999E5DC7 /* Bolts-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F9B5878353B2CEB823288FD049270F /* Bolts-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9A9B1EF5B6F629B81126B8D8119F240F /* MBLNeopixelStrand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EEE9EB301CC326AF56A548EF8E7ACD9 /* MBLNeopixelStrand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B049FFB75449143FEF816B5D7A7B6DA /* MBLLogger.h in Headers */ = {isa = PBXBuildFile; fileRef = 6821E56C1E7FF7715251DC8A23A477ED /* MBLLogger.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9B0EDE0A419A66C3ED79CEEE9A3760D4 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DE51A6F1F172F26196BE2B7A8654EE5 /* BFExecutor.m */; }; - 9B24F54F86D5592A401D3F2B0FBE45BB /* MBLExternalThermistor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A778268E49E66EBB45C0785412E1303 /* MBLExternalThermistor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9B758184F6C5CF29E6BA196CA0F13116 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853B460AC430BFA9730645F8BE6853D /* BFCancellationTokenSource.m */; }; - 9BB2211AD91F7A9461EBEA72795CF75C /* MBLLED+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C6592206EB75A22347BB84A8FEAC992 /* MBLLED+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9BD3C946A5DAE5B62AAE9D48CF3CA4F5 /* MBLAccelerometerBoschFlatData.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D3E04CB05CB608FC44EF00F5EE1102 /* MBLAccelerometerBoschFlatData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9BE3269DE51CA4C8722687B66F7F1E6C /* MBLGyroBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = DE97623D119021B33454944A2AADDF24 /* MBLGyroBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9C3BBEB221E7E11FBFA64BE0C8A4C884 /* MBLEulerAngleData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FCEE56D4D921A7B44ADB7A0317845B34 /* MBLEulerAngleData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9C4F55470F4ECA4FB50D84DF91D7BBDC /* MBLProximity+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF93A19145E986CE283B7C796C86095 /* MBLProximity+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9CB18EB11A75024E7E85B719B846693C /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F922D5EDD1533F98709ED495FF5D13 /* BFTaskCompletionSource.m */; }; - 9CB61C61C59A6B5DD2A621A00DFE3945 /* MBLAccelerometerMMA8452QFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F41068E6EDA92E05A9EF6BB15369A327 /* MBLAccelerometerMMA8452QFormat.m */; }; - 9CE16107A970CD17F6A4631F3F156C94 /* MBLANCSEventData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E2B5EE129D83B149A06CCA4B37C894D /* MBLANCSEventData.m */; }; - 9CF52EC747E005BBE6D2896CCCB87E43 /* MBLAccelerometerBoschTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = CDFC91FEE47741BE83E3B4DA6ACA3891 /* MBLAccelerometerBoschTapEvent.m */; }; - 9DD1A8D3E74D653E3D54EE1D923B20E7 /* MBLLoggingV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DC83C9C0A5911866D9E26B2D0A42AC0 /* MBLLoggingV1.m */; }; - 9DD55DDD25DE04F99F5847FD12E5189E /* MBLExternalThermistor1.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C51D0FDECC9EF2A48A0AA5B4642A42 /* MBLExternalThermistor1.m */; }; - 9DE18A4C558536E2F56EA3D8E15D55C9 /* MBLGyroData.m in Sources */ = {isa = PBXBuildFile; fileRef = A13D336140C6DEDD777F645BE4DF3B7D /* MBLGyroData.m */; }; - 9E1A815A4EB3001702DF8BA9D3723D67 /* MBLNeopixelStrand.m in Sources */ = {isa = PBXBuildFile; fileRef = CC931B2F13890FA224324A2D657F2483 /* MBLNeopixelStrand.m */; }; - 9E30C8202D4B8A5B788796C9EB552291 /* MBLAccelerometerBMA255+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5089205E311AC48EC0142FEB779F9337 /* MBLAccelerometerBMA255+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9E3E591453C05A4466A3DD9420D83497 /* MBLDataSample.h in Headers */ = {isa = PBXBuildFile; fileRef = A43DC64101E0EE568BE151B06C3D40D0 /* MBLDataSample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9EDEBB8B39774BF25EE2CFE5C749AE37 /* MBLRMSAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F4949F05143440EECC7F57B33495EC /* MBLRMSAccelerometerData.m */; }; - 9EEB628FC654FCD0620511F11C41B0F5 /* MBLEulerAngleData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FCEE56D4D921A7B44ADB7A0317845B34 /* MBLEulerAngleData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9F3A22D4A7F8622F03FC3A80AA7C52FE /* MBLANCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D41A7D85DBDE32F7AA827BE427338BC /* MBLANCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F66B051664D101EFC3C19D2C19B6C30 /* MBLBarometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B7D355831A50F19EE21A3AA550982E0 /* MBLBarometer.m */; }; - 9F77905DB46D2742912514473A0F7CE0 /* MBLTimerEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = FF0D8C305426C63A66AC1F20DB041CC1 /* MBLTimerEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 9F7DA3271C014C7CC315F9F2F0A4AE0D /* MBLLED+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C6592206EB75A22347BB84A8FEAC992 /* MBLLED+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - 9FA8A6D38BBDA58267B76A0FDB19F766 /* MBLFirmwareUpdateInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = F5403878E25BFCDFDFB2721108518D65 /* MBLFirmwareUpdateInfo.m */; }; - A0216C7C2A45F9A445B4A7BB219D38C2 /* MBLNonVolatileState.m in Sources */ = {isa = PBXBuildFile; fileRef = FB003471B152737CADBB87F6B199845C /* MBLNonVolatileState.m */; }; - A056927B46EFAAA78D5700835AB52238 /* MBLAccelerometerBoschFlatData.m in Sources */ = {isa = PBXBuildFile; fileRef = A36208353F9163C3EBFC7FF5211D93EE /* MBLAccelerometerBoschFlatData.m */; }; - A06903AACC3A503BA808BEEB1B635B98 /* MBLAnonymousEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE1B00B5579325E44B4DED36CD9BA05 /* MBLAnonymousEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A0A2455D176E6F2F7AC49B76A40FD5F9 /* MBLEulerAngleData.m in Sources */ = {isa = PBXBuildFile; fileRef = CAA65D05E75DE377B086744D71B8C1FE /* MBLEulerAngleData.m */; }; - A0FF541F7E1DF9018EBE1D3A4C31985E /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 408F8120EB62C2BAA6448622136747A1 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */; }; - A106F35930C112C4933814AFCCB55600 /* BFTask+MBLExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CA08FE632C7A756D3C35099AE7B05519 /* BFTask+MBLExtensions.m */; }; - A114BE58C5004B7ABA46200EEC457D97 /* MBLStringData.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B44476CD58A5D5ED7C806E7C65D47 /* MBLStringData.m */; }; - A13CBDA03FFDE6A867FC76AC952E9FB8 /* MBLMovingAverage.m in Sources */ = {isa = PBXBuildFile; fileRef = 33FCF62EE29EAEB61B0798123DACA455 /* MBLMovingAverage.m */; }; - A164F708D771AB84AC6FB8ED5C431E68 /* MBLDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0839AC074757922706A96E05EB0C5F43 /* MBLDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1936F2E7DBF77ED2A1BAAFD94C3636A /* MBLNeopixelStrand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EEE9EB301CC326AF56A548EF8E7ACD9 /* MBLNeopixelStrand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A1A87B847768540D227EBF96A6DFFA04 /* MBLGyroData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C6ED4316FF4C55F5D679E4A3A2E1BCC5 /* MBLGyroData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A1AFC3934E737186C809345E1DC3B397 /* MBLCommand.m in Sources */ = {isa = PBXBuildFile; fileRef = 29A06566DFD36AD873A449282791F5BA /* MBLCommand.m */; }; - A1E7C96DB4F45380B6F2FE7FD69B705F /* MBLAccelerometerShakeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 89C6814E8BAF16FCCDF8F0FC61F3269E /* MBLAccelerometerShakeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A20D5024C9B3B230EA4DC6FA2417BB91 /* MBLQuaternionFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9AD2093D0150C17663D53AF0D2BD6825 /* MBLQuaternionFormat.m */; }; - A226BC4D7152A7FC24037CBF51F4235F /* MBLEntityEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 69F1D92E6B0195B84FE57CEC17068B37 /* MBLEntityEvent.m */; }; - A3168607026B43F4BDE46481A1F7AD63 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BA9618B3D4982299C4F916FA38BE83A2 /* MBLAccelerometerBoschTapEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A339D453FB88682D0005AFD1730E0F74 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 172FA2D73597B91F0A83B07FB8E84F95 /* MBLAccelerometerMMA8452QOrientationFormat.m */; }; - A35F515894C26F1DB116A3242FDF7DED /* BFTask+MBLExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = CA08FE632C7A756D3C35099AE7B05519 /* BFTask+MBLExtensions.m */; }; - A3CAACEA47C7397BADBBFAE176446FC3 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 9784BDE57BF76980AD5F9EE5A90E6E6B /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A3CF70C01033C846567DE277B2D3811D /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E83CC37D40B85A98BBE1BD141F7CDF8 /* MBLAccelerometerMMA8452QOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A3E9B31A5A9B5A0C1C731312242D96EF /* MBLAccelerometerBoschFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = E64B6F84CEA9ED48728E33BC7316B4EC /* MBLAccelerometerBoschFormat.m */; }; - A3EBA2684281A91183733DC161617757 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A5F62FE96D6A8B0861EF4045CB3F6036 /* MBLBarometerBoschPeriodicAltitudeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A4145F27E9AFFB4C5B3716C84B63545F /* MBLExternalThermistor.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A778268E49E66EBB45C0785412E1303 /* MBLExternalThermistor.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A4381D9BE8BE0F3338C04E3692CB03A6 /* MBLBluetoothPeripheralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 606EB73B59EF05A3719E7D85B32CE998 /* MBLBluetoothPeripheralMock.m */; }; - A4514A1C10FC771A2C34CB2DE8E16575 /* BFExecutor.m in Sources */ = {isa = PBXBuildFile; fileRef = 6DE51A6F1F172F26196BE2B7A8654EE5 /* BFExecutor.m */; }; - A49E3F0877296D69DC8072CFA30DB600 /* MBLOnDieTemperature0.m in Sources */ = {isa = PBXBuildFile; fileRef = 595150EE7F64D8A9B4418FE04A0F711B /* MBLOnDieTemperature0.m */; }; - A53DFA30B4F647C0C832694DA0A5FF9B /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 999B80E344EA0797D0E594D2D30B9316 /* MBLGyroBMI160PackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A5F814D3EB26345FEADF879B613AF930 /* MBLiBeacon.h in Headers */ = {isa = PBXBuildFile; fileRef = 656F14665616943F45AC63474738055B /* MBLiBeacon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A600E3BDBE80E813C5BA227061F5873E /* MBLGyroBMI160DataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C3625913AA8E05E641976754F7D47D /* MBLGyroBMI160DataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A65E1E9DA469B4A9241C26327A232CCA /* MBLHygrometer.m in Sources */ = {isa = PBXBuildFile; fileRef = CA4A1F9105F65278463AB28856E1DD2F /* MBLHygrometer.m */; }; - A6B668AA5A1DDF9E41934F151A575E4E /* MBLAccelerometerBMA255+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 5089205E311AC48EC0142FEB779F9337 /* MBLAccelerometerBMA255+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A731ADAD169347FF7E5B549C1356F151 /* Bolts-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = EF43E02B211DF3B8717BA480E8358951 /* Bolts-iOS-dummy.m */; }; - A74B2A2115C0C7D577C71665CC11DF85 /* MBLGyroBMI160AxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 062D0EF82F87F37B60C685C87159AB1A /* MBLGyroBMI160AxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A779A9F7678461D260E67691F7E11626 /* MBLDeviceLookup.m in Sources */ = {isa = PBXBuildFile; fileRef = 86E1D090FC147E56789D44771ED27CC8 /* MBLDeviceLookup.m */; }; - A83B0E8DC95A52476572183D1F4B13A8 /* MBLANCSEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = 843FE79A8036CA75D2F7C49DE6F61E82 /* MBLANCSEventData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A86A33CC1CAE17D252FC57771F3823B4 /* MBLRGBData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CCF372AA4F3F117F4D4C7E23D0FF1BA4 /* MBLRGBData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A8C2AF9499DDA3DA010D20282D830B8E /* MBLLoggingV0.m in Sources */ = {isa = PBXBuildFile; fileRef = B751A124D571D4247E943A0FDA522578 /* MBLLoggingV0.m */; }; - A8C5378CF817BFD387618E414387B7B4 /* MBLAccelerometerTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = B98186A44DA501640C7E89E7F811C3D3 /* MBLAccelerometerTapEvent.m */; }; - A8C5E25FBDCB4657CB8D62EE63573880 /* MBLModuleMock.h in Headers */ = {isa = PBXBuildFile; fileRef = BF610CD0F7089765CB25257C4241DE88 /* MBLModuleMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - A8DDBFCECE52C63526146CE562B578D0 /* MBLAccelerometerBMA255MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 23AA82CBCF671572A6EDE8C4D2B334FE /* MBLAccelerometerBMA255MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - A97D730D835292AF44A280EA62F1D550 /* MBLRegister.m in Sources */ = {isa = PBXBuildFile; fileRef = BF469711620C344E8237ACB9E37488F5 /* MBLRegister.m */; }; - A9D5CEBAB0B6686335488CCC12554812 /* MBLGPIOPin.h in Headers */ = {isa = PBXBuildFile; fileRef = 8B73C063AF59387AEB21A691DC36720D /* MBLGPIOPin.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AA8DF2D5FF6FFD2E3C8DCCA39C604FD5 /* MBLMetaWearManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 10FD2A19A75CE29E07394D16F34BB579 /* MBLMetaWearManager.m */; }; - AAB7CA1058406A900930DC1396BD5306 /* MBLMechanicalSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = F22EB274B868FEB86414F9A31C438C82 /* MBLMechanicalSwitch.m */; }; - AB44EB4F0F86C31F4D5770DD705B0F60 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853B460AC430BFA9730645F8BE6853D /* BFCancellationTokenSource.m */; }; - AB7FC5FE98B181A45976C673A9145BF7 /* MBLRGBData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = CCF372AA4F3F117F4D4C7E23D0FF1BA4 /* MBLRGBData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - ABB429FA1469B931EB1DA42372FE51A5 /* MBLAccelerometerBoschFlatData.m in Sources */ = {isa = PBXBuildFile; fileRef = A36208353F9163C3EBFC7FF5211D93EE /* MBLAccelerometerBoschFlatData.m */; }; - ABC7F4032121266B66EC37EB78F2FA78 /* MBLANCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D41A7D85DBDE32F7AA827BE427338BC /* MBLANCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABCF640D17CEB549A2A4F763DA076BF3 /* MBLMacAddressFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 379385238BD2CE20DA91AB120E2530B9 /* MBLMacAddressFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - ABFC423CF307FC51464D3740AD896671 /* MBLSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 0ED9B9C87C7D1F4D61A9B578A3CB486D /* MBLSettings.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC03ABC86F3B83459E765B854660DF48 /* MBLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9411060398DF728E2336B402749A6090 /* MBLLogger.m */; }; - AC17038B6F375B824989F37A81EE06E5 /* MBLBarometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B7D355831A50F19EE21A3AA550982E0 /* MBLBarometer.m */; }; - AC1D1160C9F8F3C32EB69A07834A632C /* MBLProximityTSL2671.m in Sources */ = {isa = PBXBuildFile; fileRef = 6A798DDB18A3E28FD00125FCEE626FA1 /* MBLProximityTSL2671.m */; }; - AC9A1F163EE6C87797E8CF3E09BA25B6 /* MBLAccelerometerBMI160MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E89FCF9BB5AFDAC6517362946554ADA3 /* MBLAccelerometerBMI160MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AC9C510D4565F428563AA542D07018E1 /* BFTask+Exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E76E9526511D8A62A483D3CD1939B81 /* BFTask+Exceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ACB30AD68E209A56911A06B638994792 /* MBLExternalThermistor0.m in Sources */ = {isa = PBXBuildFile; fileRef = DE11AC7A6BEA46D43A46B985F7DF59F4 /* MBLExternalThermistor0.m */; }; - AD04F4EA9ED9574CC08B7B88C08E92FC /* MBLAccelerometerBMA255.h in Headers */ = {isa = PBXBuildFile; fileRef = D5F1A4DFD6D0EFB150622ABD0E8F1316 /* MBLAccelerometerBMA255.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD39EFEE8B459E59C8084BAD2564481E /* MBLAccelerometerBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = 5A057B248B30330E56EE400E14A8C4D3 /* MBLAccelerometerBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD5D734F057A6EF1F45C9D7923A8D3D7 /* MBLAccelerometerBoschOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6303D6B2C2E393A3B84CCF481AA0DF /* MBLAccelerometerBoschOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AD7F6D690B253CD23D3F847EFCEDE84C /* MBLGPIOData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B7709B9EB9C483D9E88C039097AC7B6 /* MBLGPIOData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AD878209A80D0E286FECA542FFCFCC5B /* MBLHapticBuzzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EDC16351CD877ED89AE173D8F142AE7 /* MBLHapticBuzzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AD905E423CDDC8EFCD3FE0E87CF3BA38 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 062038508A0820C10A3AFACC41299093 /* MBLAccelerometerBMI160MotionEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - ADDF55FC103B6FF0ED3765FA404ADB2A /* MBLData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E006E0231DC90761DDF2F055756ED21 /* MBLData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE71E02EBE6D162DDAD9E172A7DBB132 /* MBLBarometerBMP280.h in Headers */ = {isa = PBXBuildFile; fileRef = ECFD1E04360455C5052B158960152FE0 /* MBLBarometerBMP280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AE9005CAB99F511D46509F34946AE34E /* MBLGyroBMI160DataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F2C1F6550CAD58FF98B0D93DD130951A /* MBLGyroBMI160DataReadyEvent.m */; }; - AF37709CF2A5783C838BF8F4856E1FF1 /* MBLNumericData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B3466D6BD1DE4F23FECA24B3DFFEFFE4 /* MBLNumericData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AF400D10A1410150C8D288FC33F6B998 /* MBLPhotometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B750D3000BEF3E657F93E7C2C11DDB5 /* MBLPhotometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AF9EBA084B8E23C2CEA3424C8A553F96 /* MBLMagnetometerBMM150Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E22884E5F6DA9B9A89D2C29802514C8 /* MBLMagnetometerBMM150Format.m */; }; - AFA1E07013A835958850CDA64A29809C /* bmi160.h in Headers */ = {isa = PBXBuildFile; fileRef = 533C556DA7434A78A2661C6C9D58B4B3 /* bmi160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFB3092C12C94E7E5A660B6FB4ABBEF7 /* MBLProximityTSL2671.h in Headers */ = {isa = PBXBuildFile; fileRef = 45BA09FA60F45842A6A076016F5ECE19 /* MBLProximityTSL2671.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AFD657807DF9BAD7C78DB694A5C6F5F2 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 23916678C67AC667410DAAECAFDBFA2F /* MBLAccelerometerBoschDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AFDC716A8512BE6115F0AEBD84A51255 /* MBLGyroBMI160AxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 062D0EF82F87F37B60C685C87159AB1A /* MBLGyroBMI160AxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - AFDC78C03FED9399A73F2D6FFDF7AF21 /* MBLI2C.m in Sources */ = {isa = PBXBuildFile; fileRef = 29215526A5413BB1A1A9E46FA68490BA /* MBLI2C.m */; }; - B0326ECBCB247946E1E939D3BFA44F57 /* MBLSerial.m in Sources */ = {isa = PBXBuildFile; fileRef = 9404ACA56CB19BDDA6AA900FBDA9A317 /* MBLSerial.m */; }; - B04B26BFCE542B7290705C8195F05ABE /* MBLSettings+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 78645BA6A31BDB069A935A83150F934A /* MBLSettings+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B0A6C0E28D8F2BCD49E9D47D991A4D84 /* MBLBarometerBMP280.h in Headers */ = {isa = PBXBuildFile; fileRef = ECFD1E04360455C5052B158960152FE0 /* MBLBarometerBMP280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B124594588856D43402477BFC74C0B79 /* MBLAccelerometerBoschFlatEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DF2D88DE8088065E8B624DDFBE58526E /* MBLAccelerometerBoschFlatEvent.m */; }; - B1FCF5829CCD390140F9AC8371A8789D /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A7E3F764013B97ED812E8D3283DAA255 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B24776E3E9C7C1A540CA163170FDCAFC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34E952C0E11A49FB361052072B6AE106 /* QuartzCore.framework */; }; - B2AE3676C015F2B637C510894D25E874 /* MBLDispatchQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E6279DDBA7C4A8EF8080CAB21F48472 /* MBLDispatchQueue.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B2CD020AD473FC97C7D31DE371E6607C /* MBLNeopixelStrand.m in Sources */ = {isa = PBXBuildFile; fileRef = CC931B2F13890FA224324A2D657F2483 /* MBLNeopixelStrand.m */; }; - B30DB0DE574645D8CE24772A98A553A3 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E83CC37D40B85A98BBE1BD141F7CDF8 /* MBLAccelerometerMMA8452QOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B3A2E5A8478CC98585E5EAF25AA87383 /* MBLStringData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3404044E5FB4BFCD394402734D9944 /* MBLStringData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B3D2BAC79EC2E7A48B24FB6E505C7D4A /* MBLTimerEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A16B91106DC84C0FD697BD0C372F9757 /* MBLTimerEvent.m */; }; - B438E7C6D35A7288161474B0C6DBCC6D /* MBLGPIO.h in Headers */ = {isa = PBXBuildFile; fileRef = 36F4A7346858E41F01D1A230D24B25A6 /* MBLGPIO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B45B34A6AF2955C472626386527B6B46 /* MBLDataProcessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 26FFF7A3BA272EB3749B82156C18E549 /* MBLDataProcessor.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B479785E3E175857A205DE5B1921CA63 /* MBLFilter+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 2F55C51DAE936C836EF541084E24B60E /* MBLFilter+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B48A409B6F0F125B05C55AE6A3051C62 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EF2EA215EA3A7BCF71F5CABA0454879 /* BFCancellationToken.m */; }; - B4EE3DD86A60FD8AFE337D1281EECC3B /* MBLTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B91D9E1F10A979FBA03D3D9FB595CE5 /* MBLTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B51B128D7EDF459BFB52B248920E209E /* MBLStringData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1397B8415354E57CA0415FD804EAA630 /* MBLStringData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5A32519D123D709B98B5CD80F0EA959 /* MBLAccelerometerBosch.h in Headers */ = {isa = PBXBuildFile; fileRef = F44C28B27EDCD1478ADEFADF3B1B3362 /* MBLAccelerometerBosch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B5FAF8DF790A5F9F6EFCC6727544B564 /* MBLFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 565651CEC978D90131FF34714B7313F5 /* MBLFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B607C26D154AF87C845EE27F69D3DE56 /* MBLFirmwareBuild.h in Headers */ = {isa = PBXBuildFile; fileRef = 55E7A40F99505A0B7B1F6E140808CFE7 /* MBLFirmwareBuild.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B6137C377D424383F02C254314F23205 /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = DBA14B83EB16970888BC823DCB27D0DE /* MBLAccelerometerBoschLowOrHighGEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B630E197B15230A3F7A699B73A3BCD58 /* FastCoding.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01673900EEBEFA58AA0306E3FDE7950D /* FastCoding.framework */; }; - B632CE947446D6378A8131A2A657DF50 /* MBLHapticBuzzer.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B28ABD0EEC5DEB324BECFFE15D7923 /* MBLHapticBuzzer.m */; }; - B664D6F93BD0508B562FE6DAC7DAF323 /* Bolts.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FF21602304B9BDD767C7D52A9274044 /* Bolts.framework */; }; - B6AC88B8838BDB10B88C5B5F9958272B /* MBLTemperatureV0.m in Sources */ = {isa = PBXBuildFile; fileRef = D8725EB0E021DAD5A94DBA5397C6F845 /* MBLTemperatureV0.m */; }; - B6B7B53BEF785FF31C8158EF9A10B892 /* MBLAccelerometerBoschRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = DC37BD9E46482A494DC7492294708EAF /* MBLAccelerometerBoschRMSFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B6E0E83AF092A58EDF8A6ED1077DA894 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A390610F982814D7D440FF84A47DB46D /* Foundation.framework */; }; - B6EF16CEB707294E1AFD32F00FFEC41F /* BFCancellationTokenRegistration.m in Sources */ = {isa = PBXBuildFile; fileRef = D10DA96DC36AFE7F2E340BC3750A953E /* BFCancellationTokenRegistration.m */; }; - B7066CEEB5BFA418B959D192960AE736 /* MBLGyro+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4561FB74CFACF04C35AB74288309BE32 /* MBLGyro+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B7579BB969AD9278A37F4C2367104AB7 /* MBLAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2D750942D679B66CAEEF61EEB60716 /* MBLAccelerometerData.m */; }; - B7806E036B01ED2C005CD98FC706FA1F /* MBLDependentData.m in Sources */ = {isa = PBXBuildFile; fileRef = 91BAE67E444C7034D747E48A7F4A4F47 /* MBLDependentData.m */; }; - B89F8A2397FA7B1DA90D8A25E43F5921 /* MBLExternalThermistor.m in Sources */ = {isa = PBXBuildFile; fileRef = 5A01A4D7F336CD0F0E9091B7CC6B9648 /* MBLExternalThermistor.m */; }; - B8AB6665A14EBAD6F740A3640E8BE843 /* BFTask+MBLExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = F138F421CCDB2761404A746390697EA8 /* BFTask+MBLExtensions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8B3AA965C1E2F60E8CE6FBE6ACC9847 /* MBLSensorFusion.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7AF3E43EEDBF72C0CA31B6012F63D5 /* MBLSensorFusion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B8D7BB464210CCC43EF44393C3FBBF3A /* MBLSensorFusion.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7AF3E43EEDBF72C0CA31B6012F63D5 /* MBLSensorFusion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B91B241FD4C56EB4D9ACFB94B7F88437 /* MBLAccelerometerBosch+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9F27F47FC1321AD27483B719A0C9CADA /* MBLAccelerometerBosch+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - B993842C222D004095C7E8EB9C4D7122 /* MBLHapticBuzzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EDC16351CD877ED89AE173D8F142AE7 /* MBLHapticBuzzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - B9D69D94015970533F2DCB2224A261CC /* MBLEntityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DCCCD6B06E374DB287F0B2BA79751C3 /* MBLEntityEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BA0C43FFFE32C51A5024D58E37AE043F /* MBLGyro.m in Sources */ = {isa = PBXBuildFile; fileRef = 711867FC17C52947DB12572824DB5C26 /* MBLGyro.m */; }; - BA3AA1016F39C2D75CC8CF5924C931DC /* MBLAccelerometerBMI160StepEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = DC9439ACEFDC7053DDA4F988438A0743 /* MBLAccelerometerBMI160StepEvent.m */; }; - BA42D63F8939B81AC035BD2372D7818F /* MBLModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A175A4B71EE30DDD2D566A73DBEC1B85 /* MBLModule.m */; }; - BA5D2E5E313D50EC2CF0D28DFAF4B06F /* MBLQuaternionData.m in Sources */ = {isa = PBXBuildFile; fileRef = AE1FA155F112AAA570ACA5290C93EC1D /* MBLQuaternionData.m */; }; - BA6459C7CA6367307D82C05627A9D457 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF83E2F0603DA4CBD738A9E84F5072A0 /* Cocoa.framework */; }; - BA72E1EE2B781379C4381DC5BF5DB364 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FE4B12F90174C821CF8462ECFA4E9F5 /* MBLBarometerBoschPeriodicPressureEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BA73D9F6F9548BDC7F5C3D2C3508E243 /* MBLI2CData.h in Headers */ = {isa = PBXBuildFile; fileRef = C32548046B3323EF853B2B5CDF55525C /* MBLI2CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BAE97C81EC71B5A34108398957968514 /* MBLAccelerometerFreeFallEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C33369D8835EEDA9EEB6F1729BB9CE99 /* MBLAccelerometerFreeFallEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BB303467E628F82BC22849CF187C0294 /* MBLFirmwareUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE7E5AA02B63E011DF1DF98336F4BE8 /* MBLFirmwareUpdateManager.m */; }; - BB3E499BD0F8F69A1BFA3FF3A62B848C /* MBLAmbientLight.h in Headers */ = {isa = PBXBuildFile; fileRef = 82CE7DAC5F60556447508756C4E8F51D /* MBLAmbientLight.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BB80B97F2E5E05F64A5955E2BFF02800 /* MBLTemperature+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FC205D22FE98BDB3414F601B31B87F1A /* MBLTemperature+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BBD7E085FC791A7A5BAFA22675A543D4 /* MBLConversion.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B3A7CE6F23ABA370AA9B3A15AB2B67 /* MBLConversion.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BBF1809F639C6BAC81A7E5969D5C248F /* MBLSensorFusion.m in Sources */ = {isa = PBXBuildFile; fileRef = 47980C0F2A6A1229368779FA3439FFD8 /* MBLSensorFusion.m */; }; - BC05C43718D67A08803D7E9A85D375C9 /* MBLMagnetometer.m in Sources */ = {isa = PBXBuildFile; fileRef = C224152C9D28C7A32A827C076760707D /* MBLMagnetometer.m */; }; - BC14F2B12F319F67CF58B02F713C700A /* MBLTestDebug.h in Headers */ = {isa = PBXBuildFile; fileRef = 4E70541502FE1B4EEC651594FB6737C1 /* MBLTestDebug.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BC40F0C5E65CBA51B476EF437C653504 /* MBLAccelerometerPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 305C1893654B1DF8D8533B49A105F27C /* MBLAccelerometerPackedDataReadyEvent.m */; }; - BC4A5DAA606475835FDD28EF794B9DE0 /* MBLRegister+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C7C2259F2F02EECE4558B57F94E1E3 /* MBLRegister+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BC6E0485F61D7F160D8C4325DE6706D8 /* MBLGyroBMI160AxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 062D0EF82F87F37B60C685C87159AB1A /* MBLGyroBMI160AxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BC8252FA55C3D4BA1B8058D4DEDAA5AC /* MBLI2CData.h in Headers */ = {isa = PBXBuildFile; fileRef = C32548046B3323EF853B2B5CDF55525C /* MBLI2CData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD186E0BE22CEC5D18EB36561994FBA4 /* MBLTemperature.h in Headers */ = {isa = PBXBuildFile; fileRef = A90CBC9125428FB3F9EA77F260B54EAB /* MBLTemperature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BD55E4193D097EEBA6AC155B145BA45B /* MBLGPIOData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B7709B9EB9C483D9E88C039097AC7B6 /* MBLGPIOData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BD5B78F196A93BDAB2934D7E7F5F94CD /* MBLNumericData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B3466D6BD1DE4F23FECA24B3DFFEFFE4 /* MBLNumericData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BD610D08819E65E5FABA0EF11130F092 /* MBLEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = B4CFEFE8770D9AD0341E24BD427A3AB6 /* MBLEvent.m */; }; - BD69D3B987F638C452685664917B7FED /* MBLAccelerometerBoschOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FE8178DDBF5ECA3097B097B4826CBA7 /* MBLAccelerometerBoschOrientationFormat.m */; }; - BDC67E9BC42F55D39A6798A481304071 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EB9457C84BA60F953808A69B2CD44D2E /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */; }; - BE1351CE5FEFD5FB4E69236EEF1B9BE7 /* MBLProximity.h in Headers */ = {isa = PBXBuildFile; fileRef = 17235EF49A060133B6160184A954CF3B /* MBLProximity.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE2ADB0DAEF267B7570917427BDFBAC1 /* MBLMagnetometerBMM150.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941B5A6AA94E0B5B46B122C660F520B /* MBLMagnetometerBMM150.h */; settings = {ATTRIBUTES = (Public, ); }; }; - BE3CACDC2610746BD9FB055906295E54 /* MBLMagnetometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 24D72AD39D3634D27DC081E4D87585BA /* MBLMagnetometerData.m */; }; - BF10EB713FE84DBAC7CFB2440D9DCF6C /* MBLMagnetometerBMM150Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 142C53373C506F66B3EC567CC1B46EC9 /* MBLMagnetometerBMM150Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BF477B290E265AEEBFBCC868101CB3AC /* MBLConductanceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE649F56CC2D2EDD1177FA9BF749833 /* MBLConductanceData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - BF9C451A354CDA6FD85327EACA583159 /* MBLAnonymousEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 108CC179687676A0F35B7BF2F9B51837 /* MBLAnonymousEvent.m */; }; - BFDE25953277AB06846272F696F25625 /* MBLAccelerometerBMA255MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A1C20C69C1F11101F8A5AEA7CC3BCFD /* MBLAccelerometerBMA255MotionEvent.m */; }; - BFFF9AF9D619A71B72556ADB917778FE /* MBLEntityEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B00644538655FE4FD0C408206C17228D /* MBLEntityEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C0209F41D7FB4970B1D793816C5D4F17 /* MBLModuleMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B00B1B667709822576FBFD9DDAB1218 /* MBLModuleMock.m */; }; - C0AE0EEF311989BEAD6FA7E20A0903B8 /* MBLModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EFD7C01C3F8EC1E4BA465ACABE8FEA74 /* MBLModule+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C0BE899A770D55152D48FC6A77DC5B37 /* MBLANCS.m in Sources */ = {isa = PBXBuildFile; fileRef = BF8652479C009FF088D5D6709EB7CC2F /* MBLANCS.m */; }; - C0DB58302504B8B0B7E7F1A65EFD54C8 /* MBLConductanceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE649F56CC2D2EDD1177FA9BF749833 /* MBLConductanceData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C0E38D8A72FEB313BB74998D0EADA95F /* MBLBitmaskEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AD91C5A54D69D8FC1A1F1279364850 /* MBLBitmaskEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C13EA6E9D9F2F9D640ED35EE4C837F18 /* MetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = 26436F719298208FEF75335BA19CD0DA /* MetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C1545761DF9F3F6EB87C33EAE695EC12 /* MBLFirmwareUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BEC5D637AA502156E39846414268C83B /* MBLFirmwareUpdateManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C1B7D5738ED8BC0D3F41DB3BD19CA4DF /* MBLEntityModule+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F160C4428FBCC3B870F6B4338827F57 /* MBLEntityModule+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C1C503CE0B9854D7D1C69D195EE530E7 /* MBLEntityModule.m in Sources */ = {isa = PBXBuildFile; fileRef = D909879784C6FEE4ACCD029C6D5086FC /* MBLEntityModule.m */; }; - C1D017A38DE62D2C2F5FA86AF6444CEF /* MBLMetaWear.m in Sources */ = {isa = PBXBuildFile; fileRef = BF82953F90A945F59016883056756DE7 /* MBLMetaWear.m */; }; - C1D705A00FD9CF3E242178C813B6C090 /* MBLBluetoothPeripheralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = CC5A95481671F9338C7026FE94A5DF8A /* MBLBluetoothPeripheralMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C20F1F3A2D68A6D18A5952884DD2141F /* MBLAccelerometerOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C764F83BE624351959E1C8A7026783 /* MBLAccelerometerOrientationEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C236EC37D55B47A562F1387D21B1706A /* MBLAccelerometerBoschTapEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BA9618B3D4982299C4F916FA38BE83A2 /* MBLAccelerometerBoschTapEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C2FD16E45B619B27F7AEF30510711C44 /* MBLAccelerometerAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BD9EE0CE69712E8C1D2AF65EC09F00B3 /* MBLAccelerometerAxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C300A20754F3566C5D5A4C0D6E59DD4E /* MBLLogging.h in Headers */ = {isa = PBXBuildFile; fileRef = DF05DA6CD115AA6EEF289B14B106AD87 /* MBLLogging.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C325089A21B112F5E27FE0D008E89489 /* MBLHygrometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 61152A5CDDEEAAF44A4E3E9AA01F1C5B /* MBLHygrometerBME280.m */; }; - C369CFF5079FD9C3D0F3CDBBB8D0749F /* MBLMagnetometer.h in Headers */ = {isa = PBXBuildFile; fileRef = FFFDB3EE908CC40CC530395C85E3458D /* MBLMagnetometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C3912E6CA8F94791135556E7B0722C3D /* MBLModuleMock.h in Headers */ = {isa = PBXBuildFile; fileRef = BF610CD0F7089765CB25257C4241DE88 /* MBLModuleMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C3C519659E719618F49F8E8B7DFE2D6F /* MBLAccelerometerDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 665A6DBDD2A12E5E75F90AE098EFE51C /* MBLAccelerometerDataReadyEvent.m */; }; - C41155C6FCF0558D35D5A0422E918483 /* MBLDataSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = A8ECBD143ADFBD8D03EDA03D0B54B27C /* MBLDataSwitch.m */; }; - C41508DB88BFF09F1B765A6F4D8D08E9 /* MBLAccelerometerMMA8452Q.m in Sources */ = {isa = PBXBuildFile; fileRef = BBDCEC312737CE56EBE4236DCA8BA750 /* MBLAccelerometerMMA8452Q.m */; }; - C46BFAD782956895DEFECEAF89FCF5E7 /* MBLEntityModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 594D339B971E1A22541A55D46D2A0010 /* MBLEntityModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C494118A68ACC13FE21396084730FDF5 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 207BFB192A72F39904B415B8A2423B7D /* MBLAccelerometerBMA255MotionEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C49FB07F49BB9375411D6633AA705AFF /* MBLANCS.m in Sources */ = {isa = PBXBuildFile; fileRef = BF8652479C009FF088D5D6709EB7CC2F /* MBLANCS.m */; }; - C503E53C337C5F70AFBFE640D8C6BDDD /* MBLOnDieTemperature0.m in Sources */ = {isa = PBXBuildFile; fileRef = 595150EE7F64D8A9B4418FE04A0F711B /* MBLOnDieTemperature0.m */; }; - C57A70AF286B0007FB3510A2FF46E2E9 /* BFCancellationTokenSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 4853B460AC430BFA9730645F8BE6853D /* BFCancellationTokenSource.m */; }; - C60A57F2DE3E85D68AB262A341DA8A08 /* bmi160.h in Headers */ = {isa = PBXBuildFile; fileRef = 533C556DA7434A78A2661C6C9D58B4B3 /* bmi160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C615484537855CDF2260B8FB3CB42C71 /* MBLLED+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C6592206EB75A22347BB84A8FEAC992 /* MBLLED+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C61F8727D0282D333DAFB156F1EA439C /* MBLNonVolatileState.m in Sources */ = {isa = PBXBuildFile; fileRef = FB003471B152737CADBB87F6B199845C /* MBLNonVolatileState.m */; }; - C6226BFA7CA08D6F7602E45A28EFD2CD /* BFTaskCompletionSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 71F922D5EDD1533F98709ED495FF5D13 /* BFTaskCompletionSource.m */; }; - C63B56C90F78236FD77979D01558499D /* MBLConstants+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DB01C6F682F5A01DBF66F2B08662B46 /* MBLConstants+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C64AA9B4276E7F8A7715D75A9FE9EDBA /* MBLAccelerometerMMA8452QFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C009289D9A902BB50149D3B9C4F04D4B /* MBLAccelerometerMMA8452QFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C6721CCD9F32EC0A0CF471D9F5412F93 /* BFCancellationToken.m in Sources */ = {isa = PBXBuildFile; fileRef = 7EF2EA215EA3A7BCF71F5CABA0454879 /* BFCancellationToken.m */; }; - C68E0C854C974F0A2A5042AAAAA22333 /* MBLRMSAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 18F4949F05143440EECC7F57B33495EC /* MBLRMSAccelerometerData.m */; }; - C6AEB2650431E12A89A1AEF5C071F9E4 /* MBLTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF25E6F0B0180F610BFBAEB11C7FF3D /* MBLTimer.m */; }; - C6B517D36BB86459B9C40048A7B3EA7E /* MBLProximity+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF93A19145E986CE283B7C796C86095 /* MBLProximity+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C6D486039788EC4EA96D60A28FCFDB4E /* MBLLoggingV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DC83C9C0A5911866D9E26B2D0A42AC0 /* MBLLoggingV1.m */; }; - C6F231373C2BF634720A26407F90B786 /* MBLNeopixel.h in Headers */ = {isa = PBXBuildFile; fileRef = 8453DB9F88A660F88AB6F94B999E98B6 /* MBLNeopixel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C70A3635F2C699620E57DF0BBEA41C98 /* MBLGyro.h in Headers */ = {isa = PBXBuildFile; fileRef = C1F46732D0D5A9679D3057E5D13869F9 /* MBLGyro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C7C120FE4C5BEDE6A2E6AEF055E34C83 /* MBLPhotometerTCS3472Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF58587D0E4D84D2A2CAD8A2E5B3F43 /* MBLPhotometerTCS3472Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C7D2D1181DA4B8432FD5CF20EE514C9E /* MBLAccelerometerBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CF8DD02BEFD38F8B3A67A5070F0229 /* MBLAccelerometerBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C7EEDA681FB9B4A6279F10DF80357EFC /* MBLGPIOPinChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A6625912CB799A2119DC206BE310F742 /* MBLGPIOPinChangeEvent.m */; }; - C7F0CC0D5641E492D52B8722D9398912 /* MBLCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD0CE2FF96D7D91B4C7D4AFCFE078B9 /* MBLCategoryLoader.m */; }; - C822C340981DDC9484381BB9CEA31D06 /* MBLOnDieTemperature0.h in Headers */ = {isa = PBXBuildFile; fileRef = 7EACF36CC75B1953FD7F7A4F613CC43C /* MBLOnDieTemperature0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C836EC792B1B85074C6F6F47589610A8 /* MBLLED.h in Headers */ = {isa = PBXBuildFile; fileRef = 52B7C1BF89D1729EB27F1B94086AF8E4 /* MBLLED.h */; settings = {ATTRIBUTES = (Public, ); }; }; - C8657598D93E936FC9F971F88860884A /* MBLTemperature+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FC205D22FE98BDB3414F601B31B87F1A /* MBLTemperature+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C8B5790AE8B28362D9FC49ABC8F95BAF /* MBLConductanceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3FE649F56CC2D2EDD1177FA9BF749833 /* MBLConductanceData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C8DC4BACA545060681C43F05E7A24581 /* MBLMagnetometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9196F6CF5B00156F9536837A4F00B8DA /* MBLMagnetometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C8E9275930AF4D30518B3805FAD6EE64 /* MBLLoggingV2.m in Sources */ = {isa = PBXBuildFile; fileRef = E7FCF970780F8D7CD3B2B0E5F719748F /* MBLLoggingV2.m */; }; - C8E9B9B86605B84403A71D265100D235 /* MBLNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = F3085F6D2203E0F1C1703103D86EAE56 /* MBLNumericData.m */; }; - C962CAF81F117F78BF3BEB82DC8B009D /* mma8452q.h in Headers */ = {isa = PBXBuildFile; fileRef = C6175132B1A5F37DFD658D10C3711CE7 /* mma8452q.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C98E664B1FAFDCA7A35D19C1EE7A2139 /* MBLTemperatureV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D8062A60FDD5F2D81372764F8C172A3 /* MBLTemperatureV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C9E097B393FE76E1837A442F4D65DD4E /* MBLAccelerometerBoschRMSFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = DC37BD9E46482A494DC7492294708EAF /* MBLAccelerometerBoschRMSFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - C9F28CE8204C76D245E9C7A7FC2CB024 /* MBLDispatchQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E6279DDBA7C4A8EF8080CAB21F48472 /* MBLDispatchQueue.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CA19215A5CC40C4D1CA8CC05D8347B6F /* MBLGravityFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = C94BC89EEB1C4DD70F8FB940105EDF59 /* MBLGravityFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CA3A7F7157079C0391E1B7CD891DE323 /* MBLAccelerometerBoschFlatFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = EB490BFEC65DD75C59048669C60EADC0 /* MBLAccelerometerBoschFlatFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CAA4338AB95AC776701BAE050934A4A2 /* MBLFirmwareUpdateManager.h in Headers */ = {isa = PBXBuildFile; fileRef = BEC5D637AA502156E39846414268C83B /* MBLFirmwareUpdateManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CAA93BD78B66DB0E294922994A99C468 /* BFCancellationToken.h in Headers */ = {isa = PBXBuildFile; fileRef = 27D538183C93B57AD8A146CA64198676 /* BFCancellationToken.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CAD03DB1275D3C04D5AA6BEB32825EA4 /* MBLMetaWearManager+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 54F14BC835BED9B7143848F9E2E659E7 /* MBLMetaWearManager+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CB847B20CD230DAAB4AFBE63453FD7AD /* MBLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6947AB6F38CB196184CF68AA77E2AB /* MBLFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CB84A1E2CD09CAF4CCA11C849CCB02F9 /* MBLGPIOData.m in Sources */ = {isa = PBXBuildFile; fileRef = 22A04A37C49AAF2FBC39F33DF7915A35 /* MBLGPIOData.m */; }; - CBC59352833F83ADC29D8D2EA56B8049 /* MBLHygrometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 95088C502078D0A9B296CB2A3242C699 /* MBLHygrometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CBD36AC84B422086039EE1CB54A323F6 /* MBLHygrometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 61152A5CDDEEAAF44A4E3E9AA01F1C5B /* MBLHygrometerBME280.m */; }; - CBFB3033E309D42A30C0A10D586BAD7A /* MBLPhotometerTCS3472.h in Headers */ = {isa = PBXBuildFile; fileRef = F718090CB9057236EB1DFB034F70974C /* MBLPhotometerTCS3472.h */; settings = {ATTRIBUTES = (Public, ); }; }; - CC0C284EC5A5A547EBB4A4FC3BB74163 /* MBLAnonymousEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 108CC179687676A0F35B7BF2F9B51837 /* MBLAnonymousEvent.m */; }; - CC4282D74C53B1846232288FCB900427 /* MBLGPIO.m in Sources */ = {isa = PBXBuildFile; fileRef = C218101D30CFC198B28DC323D33B8EBB /* MBLGPIO.m */; }; - CC8A7280457C231321449AECF4CC2B90 /* MBLMockPeripheralFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = 998B663E822CF022104FFFFC53613FC0 /* MBLMockPeripheralFactory.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CCBAFF2639668805879F7C32134D91A8 /* MBLMagnetometerBMM150Format.h in Headers */ = {isa = PBXBuildFile; fileRef = 142C53373C506F66B3EC567CC1B46EC9 /* MBLMagnetometerBMM150Format.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CD7A52946934E6EB8223240D42282520 /* MBLMagnetometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 9196F6CF5B00156F9536837A4F00B8DA /* MBLMagnetometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CDA15C1A758B7E1B502FD60734F13C9C /* MBLAccelerometerOrientationEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = C3C764F83BE624351959E1C8A7026783 /* MBLAccelerometerOrientationEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CDD70CC7FFF8D9A62DB30002326FAA59 /* MBLGyroBMI160DataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C3625913AA8E05E641976754F7D47D /* MBLGyroBMI160DataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CE43E333D867C8E2CA1B3C2ED53D9778 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA488221FEA50B6AEC8BBAF8CA4C6EEB /* CoreBluetooth.framework */; }; - CE8AEE4419CD779023EB1389924A21CF /* MBLAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2D750942D679B66CAEEF61EEB60716 /* MBLAccelerometerData.m */; }; - CEA576A54D53E971B00367F2E7058441 /* MBLI2C.m in Sources */ = {isa = PBXBuildFile; fileRef = 29215526A5413BB1A1A9E46FA68490BA /* MBLI2C.m */; }; - CEEFB44E0AB77844053F1079704E5A2E /* MBLOrientationData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8CECC196826DFE764A258D986CDA3D2C /* MBLOrientationData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CF8ABB228CE90F531A5837B38E2EBA6B /* MBLEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D055002FFB17C8EFDD48660E35E6005 /* MBLEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - CFA2264965FD2CC02A3C109763EFE18E /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 408F8120EB62C2BAA6448622136747A1 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */; }; - D009A05D50D483FAB57D536B3E16E280 /* MBLModule.m in Sources */ = {isa = PBXBuildFile; fileRef = A175A4B71EE30DDD2D566A73DBEC1B85 /* MBLModule.m */; }; - D02F5440E7DA227BD0D09E306FF5BB98 /* MBLCommand.h in Headers */ = {isa = PBXBuildFile; fileRef = 370BDE5254786592F755411B3CEB8C1B /* MBLCommand.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D0502A128F833C5A3017BEC64AE8D248 /* MBLRegister.h in Headers */ = {isa = PBXBuildFile; fileRef = 6DDF8C838AC5CDC445B42F979FBDAC51 /* MBLRegister.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D081EF2BC46D6928AE5B081A37850624 /* MBLANCSEventData.h in Headers */ = {isa = PBXBuildFile; fileRef = 843FE79A8036CA75D2F7C49DE6F61E82 /* MBLANCSEventData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D0C04BB31FD831CE75A8B76A42D8090E /* MBLStringData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3404044E5FB4BFCD394402734D9944 /* MBLStringData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D11A2967A77C2EE08156F7CEF4908770 /* MBLDataSwitch.h in Headers */ = {isa = PBXBuildFile; fileRef = 9305641039886B57EA88E02E7D780CCD /* MBLDataSwitch.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D12AD40A0AB3CF6746DCB6B1627306FD /* MBLEulerFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 6017B957E6C2CA4CF3F4D7052EDB2C39 /* MBLEulerFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D13292BD3D3DCCFFDF0B784FE2854299 /* MBLNeopixel.h in Headers */ = {isa = PBXBuildFile; fileRef = 8453DB9F88A660F88AB6F94B999E98B6 /* MBLNeopixel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D16FE5304634AC7E4575CB3086DA4AB2 /* MBLBarometerBMP280.h in Headers */ = {isa = PBXBuildFile; fileRef = ECFD1E04360455C5052B158960152FE0 /* MBLBarometerBMP280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D17959704BD1AE469226EDE0CF70E810 /* MBLModuleInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = B0CC6647544C92E237C5E58817ABF815 /* MBLModuleInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D1CB6BD0DC26A9A74404230D3649DDC4 /* MBLAccelerometerAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F05FB3AC8B8267ADA435588032133517 /* MBLAccelerometerAxisReadyEvent.m */; }; - D241B6AF2AEEFF591507B2C511E3CA9D /* MBLMovingAverage.h in Headers */ = {isa = PBXBuildFile; fileRef = A49860565C04C51B616558EDB6C207A1 /* MBLMovingAverage.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D24BEE41611B74EB8A04EE4B65BF01E5 /* MBLTimerEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = FF0D8C305426C63A66AC1F20DB041CC1 /* MBLTimerEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D2C1D8C9B8C8DF992F51EB7EA312DEFF /* MBLMagnetometerBMM150Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E22884E5F6DA9B9A89D2C29802514C8 /* MBLMagnetometerBMM150Format.m */; }; - D312BCE2CB30D3FC301BE0B82EA5B12D /* MBLTestDebug.m in Sources */ = {isa = PBXBuildFile; fileRef = A7CB624F324B3C20D299DC3EEF4DEBEB /* MBLTestDebug.m */; }; - D36CCEE619D1C12DB36ECED0201D56EE /* MBLAmbientLight.m in Sources */ = {isa = PBXBuildFile; fileRef = 52B98D79F80CCB0DF0D3549529A16F8F /* MBLAmbientLight.m */; }; - D441A4A1FE230080EFD6E29FD86652FF /* MBLRGBData.h in Headers */ = {isa = PBXBuildFile; fileRef = F27ABA1C1B56697C3CBEA5201D1E1EA5 /* MBLRGBData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D4687178DA82579EEDAFF787F599BDEC /* MBLGyroBMI160DataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F2C1F6550CAD58FF98B0D93DD130951A /* MBLGyroBMI160DataReadyEvent.m */; }; - D48AD058F984EFFEDE42725589820691 /* MBLLED.m in Sources */ = {isa = PBXBuildFile; fileRef = FC6957324B1EF69DC57A843B7DF24A0B /* MBLLED.m */; }; - D4BD4B7BE297C09E0FBC0718F59318B8 /* MBLTemperature.h in Headers */ = {isa = PBXBuildFile; fileRef = A90CBC9125428FB3F9EA77F260B54EAB /* MBLTemperature.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D5312F9F3818AC8E134D6C150B6A1C5F /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19B4F38DF1F6E05EAECE968DE93EB673 /* MBLBarometerBoschPeriodicPressureEvent.m */; }; - D53750D2D5F09D6022CC08CD1A52F12C /* MBLMechanicalSwitch.m in Sources */ = {isa = PBXBuildFile; fileRef = F22EB274B868FEB86414F9A31C438C82 /* MBLMechanicalSwitch.m */; }; - D583DCA8DF0ED48B9F40D55954B89BFF /* MBLAccelerometerMMA8452Q.m in Sources */ = {isa = PBXBuildFile; fileRef = BBDCEC312737CE56EBE4236DCA8BA750 /* MBLAccelerometerMMA8452Q.m */; }; - D5AAB81D05C720C4BD4C570C2FC6E44A /* MBLSerial+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FB311E558EC50722E2C62C1661943B60 /* MBLSerial+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D61BAB5624242B932AF6FAD268F87308 /* MBLNeopixelStrand.h in Headers */ = {isa = PBXBuildFile; fileRef = 0EEE9EB301CC326AF56A548EF8E7ACD9 /* MBLNeopixelStrand.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D665C33AD8F7964D0E1B711B65500F0A /* MBLEulerAngleData.m in Sources */ = {isa = PBXBuildFile; fileRef = CAA65D05E75DE377B086744D71B8C1FE /* MBLEulerAngleData.m */; }; - D672865361381868B41263A9057B51AE /* MBLAnonymousEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE1B00B5579325E44B4DED36CD9BA05 /* MBLAnonymousEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D6D48914E583F6E111C68172DA1E0C27 /* BFTask+Exceptions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C1F14222E245444E2244484CB57521B /* BFTask+Exceptions.m */; }; - D72F47506B8F0EA1E2D0C9C199C9AD58 /* MBLAmbientLightLTR329.h in Headers */ = {isa = PBXBuildFile; fileRef = 667FE6FDD9DCB968C5507339B636F7D2 /* MBLAmbientLightLTR329.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D7327683306B5AD240A7B39B86C81E10 /* MBLGyroBMI160DataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 03C3625913AA8E05E641976754F7D47D /* MBLGyroBMI160DataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D7DB892A76FC5D370F1695B5D288C9D7 /* MBLAccelerometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 227DD8EB5493B11D84B1611388D7B876 /* MBLAccelerometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D817F0ACF420CD1784232F36625E1ED9 /* MBLGPIOPinChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A6625912CB799A2119DC206BE310F742 /* MBLGPIOPinChangeEvent.m */; }; - D82D31FD3E2B0BCDC621ECEE903264E3 /* MBLFirmwareUpdateManager.m in Sources */ = {isa = PBXBuildFile; fileRef = BCE7E5AA02B63E011DF1DF98336F4BE8 /* MBLFirmwareUpdateManager.m */; }; - D88ED6E37D1C7A9B0C1BDEBE98BEC3B0 /* MBLEntityModule.m in Sources */ = {isa = PBXBuildFile; fileRef = D909879784C6FEE4ACCD029C6D5086FC /* MBLEntityModule.m */; }; - D90015858A35995F4CBD41A56E6E44E7 /* MBLGravityFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9EE6896A63CD5BFB98F4BEFA942A2A08 /* MBLGravityFormat.m */; }; - D90E7EC83B25E6C27BD2526D68DBA549 /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AE9B27FC17FCC12EC7A9E7C6EACCAA89 /* MBLGyroBMI160PackedDataReadyEvent.m */; }; - D93F6664F59C4913C62523976C15100B /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A474AB6E2E2CA0DA6C14DBEB43951265 /* MBLAccelerometerBoschPackedDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D953A39EB4738EC7847F50ACB2A39BF8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A390610F982814D7D440FF84A47DB46D /* Foundation.framework */; }; - D96011C8432F7EAD1C57F69100B42660 /* BFTask+Exceptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E76E9526511D8A62A483D3CD1939B81 /* BFTask+Exceptions.h */; settings = {ATTRIBUTES = (Public, ); }; }; - D96098104937EE2D886E505620A502DB /* MBLMetaWear+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 268C80524B2B2E30FEBB681C265CA05A /* MBLMetaWear+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D96DE88766DD7588AFD8FE2ADD107EE7 /* MBLSPIData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFADBF1370D8B2EF860CA323969640D /* MBLSPIData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D99B6560FFEC05AD00E3F8BA1DC4780A /* MBLLoggingV1.h in Headers */ = {isa = PBXBuildFile; fileRef = 18AA1285865F5EFEA7063678C325141C /* MBLLoggingV1.h */; settings = {ATTRIBUTES = (Private, ); }; }; - D99F69C2D2C5DF58EE23E817CA9F5720 /* MBLAccelerometerBMI160MotionEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 361ED24982D138D7DE2FB8AB055756C5 /* MBLAccelerometerBMI160MotionEvent.m */; }; - D9C483395C146AEF894A6FD2A63AA733 /* MBLMagnetometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 89D1CC714D0CFD616B98573800172072 /* MBLMagnetometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DA2BDB3ADC5A2183C0E6C33778D4AE0C /* MBLNumericFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 172B2675C3FBB4FF57CCDD5C0451961E /* MBLNumericFormatter.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DA80F68161D6C137BFF12098597448C5 /* MBLGPIOData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1B7709B9EB9C483D9E88C039097AC7B6 /* MBLGPIOData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DAB0359B0B4300A60D1F683822976DFD /* MBLNeopixelStrand+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C978BF2D9FF8F00A034662BBCEC1FE53 /* MBLNeopixelStrand+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DAB21ACA797BDF4883DC0F3A16B48846 /* MBLBluetoothCentralMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 643206EAE8399B4005F420D6E8BA9FC5 /* MBLBluetoothCentralMock.m */; }; - DB4DB345171FAA29D32F5EFBB163F185 /* MBLNonVolatileState.h in Headers */ = {isa = PBXBuildFile; fileRef = 973C3CCB59EC1DD82ECF015EC4E4CCAA /* MBLNonVolatileState.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DB6C9E2FA21B28730CB6D813954A4900 /* MBLRegister+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = A9C7C2259F2F02EECE4558B57F94E1E3 /* MBLRegister+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DC7D8CC13D59411D441652589FEB6B02 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FE4B12F90174C821CF8462ECFA4E9F5 /* MBLBarometerBoschPeriodicPressureEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DCBEA3494D9F6B4AA99C96D52B16AC6E /* Bolts-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 69E8EDA556DC202BAF516AD2B7C1430D /* Bolts-macOS-dummy.m */; }; - DD75C576FD3B64EFD7F11DE674F56211 /* FastCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2F21AD149A6195BDBBEDDB8CA77DA8 /* FastCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DD98F8E8F994FE7FD1C78C4001CA8B5C /* FastCoding-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 48D912392D707BDDED8B8F4DFFB44115 /* FastCoding-iOS-dummy.m */; }; - DD9CB78034D463200F54489293ED7E32 /* MBLEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = B4CFEFE8770D9AD0341E24BD427A3AB6 /* MBLEvent.m */; }; - DDCA5E95770F7C1415E6445AE5D99233 /* MBLBitmaskEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 7F865DC2E67227DAA5EE2F439D5387DA /* MBLBitmaskEvent.m */; }; - DE1DDCF3285986FF026AEE36549D462C /* MBLBitmaskEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AD91C5A54D69D8FC1A1F1279364850 /* MBLBitmaskEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DE8655D2A4663C75EC27AB78D4ABBD5E /* MBLTimer.m in Sources */ = {isa = PBXBuildFile; fileRef = BBF25E6F0B0180F610BFBAEB11C7FF3D /* MBLTimer.m */; }; - DF24FABFF25B380D599388A8BEAB2595 /* FastCoding-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 43EC651AD6884803BBFB322510BBBD27 /* FastCoding-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - DF3E7546B3A7D50E3FF16A55673A5E06 /* MBLGPIOPinChangeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 43AD4735DDB0C827E61EAD3079BF9F48 /* MBLGPIOPinChangeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DF73DD9B22E471A2511F663DE39C7A94 /* MBLNonVolatileState.m in Sources */ = {isa = PBXBuildFile; fileRef = FB003471B152737CADBB87F6B199845C /* MBLNonVolatileState.m */; }; - DF84C672F8A0F23B1D191878C4115916 /* MBLProximity+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BCF93A19145E986CE283B7C796C86095 /* MBLProximity+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DF8A8E75BD99566463373D4734C7387B /* BFTask+MBLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BDEC1B0CD69077F22F35CBFCBF3196BF /* BFTask+MBLPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DFBE5FE5FBE84F40178200B7CAFD9DB2 /* MBLHygrometer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 95088C502078D0A9B296CB2A3242C699 /* MBLHygrometer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - DFCC5290F2661BBD2C0D20045F004A87 /* MBLFirmwareUpdateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D317640CB86BA28327C329AD150CA58E /* MBLFirmwareUpdateInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E01D50C72BBEFEA6BA0DA7BC38E21DF2 /* MBLRMSAccelerometerData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C89BB07023ED287565C2905593ACBB92 /* MBLRMSAccelerometerData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E057BAA6FF215CDA14637F78ABE937E5 /* MBLAccelerometerMMA8452Q.h in Headers */ = {isa = PBXBuildFile; fileRef = C84458D72208FA0A9801EE0C9D88C10E /* MBLAccelerometerMMA8452Q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0A7A5E679D00FCF8525D9C4808FC6D4 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3507E4FF13655A7B8DC112BD3212D44E /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E0B024758CDBD47AF5FF6EF4A8EF7FAF /* MBLAccelerometerShakeEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 89C6814E8BAF16FCCDF8F0FC61F3269E /* MBLAccelerometerShakeEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E0B78EC5508E6E026A9DC6E332D17489 /* MBLData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = D6ACD4F53E85B97F12F359D00E79C610 /* MBLData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E0EFC7801776B88B0397D0F93B46ACCB /* MBLAccelerometerDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 665A6DBDD2A12E5E75F90AE098EFE51C /* MBLAccelerometerDataReadyEvent.m */; }; - E0F35CE5F71C8211DCD07DAB775346DF /* MBLFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6947AB6F38CB196184CF68AA77E2AB /* MBLFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1AB5FC8150EFCF9A86DEE2DB6E5BD33 /* MBLStringData.h in Headers */ = {isa = PBXBuildFile; fileRef = 1397B8415354E57CA0415FD804EAA630 /* MBLStringData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E1BB726533972B28239A5D829E56E687 /* MBLAccelerometerMMA8452QFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = F41068E6EDA92E05A9EF6BB15369A327 /* MBLAccelerometerMMA8452QFormat.m */; }; - E1D1865CC21561036DECB053F4A1AD13 /* MBLStringData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 6C3404044E5FB4BFCD394402734D9944 /* MBLStringData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E23F3BBFCB514305C8F2B08F5A3417E8 /* MBLBarometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BACD2DA7C2B8550742703BBDAC9D3E9 /* MBLBarometerBosch.m */; }; - E25225D3BA7D62E1002421948659CF12 /* MBLNumericData.m in Sources */ = {isa = PBXBuildFile; fileRef = F3085F6D2203E0F1C1703103D86EAE56 /* MBLNumericData.m */; }; - E289AA65409AC4E2F65B78C394955188 /* MBLPhotometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B750D3000BEF3E657F93E7C2C11DDB5 /* MBLPhotometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E2A211F3BC09BE9E40295344C00AC294 /* MBLMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D102AFADD707A32746A67B9AD40758B /* MBLMacro.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E2D50EA16A49DFC0668D1AA71A1F626F /* MBLAccelerometerBoschFlatData.h in Headers */ = {isa = PBXBuildFile; fileRef = 43D3E04CB05CB608FC44EF00F5EE1102 /* MBLAccelerometerBoschFlatData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E2F21F0DA1762D617EDF9AD84EFEA1F1 /* MBLHygrometerBME280.m in Sources */ = {isa = PBXBuildFile; fileRef = 61152A5CDDEEAAF44A4E3E9AA01F1C5B /* MBLHygrometerBME280.m */; }; - E33E5CE42FEB6C2C7093BCF1FC80A0EB /* MBLAccelerometer.m in Sources */ = {isa = PBXBuildFile; fileRef = EA1D0D5468EE4C60F6520CA42C739533 /* MBLAccelerometer.m */; }; - E367FF667315E887A61BB09DB897CD46 /* MBLHygrometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 877A0281064E5ABD387EB419547FF2EC /* MBLHygrometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E39BE20472571822D0C92145B683A14D /* MBLTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B91D9E1F10A979FBA03D3D9FB595CE5 /* MBLTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E3D7CEAA922F9D623026DA678B491540 /* MBLTimer+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = E7206C6D035ED95789E77DFDCD5BAADE /* MBLTimer+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E438B0DE0F98644A76EAEBF606E365F3 /* MBLExternalThermistor0.m in Sources */ = {isa = PBXBuildFile; fileRef = DE11AC7A6BEA46D43A46B985F7DF59F4 /* MBLExternalThermistor0.m */; }; - E44D2B463A0DBDE4973AC008BAF1E02F /* MBLAccelerometerBoschFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = E64B6F84CEA9ED48728E33BC7316B4EC /* MBLAccelerometerBoschFormat.m */; }; - E44D688993FB9782F9B6FBCD19554723 /* MBLAccelerometerDataReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 5F4530EAE9B7DD9CFBFC2D0514B7E8A5 /* MBLAccelerometerDataReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E46BC5FCF1A88355F2DF4CF0BF5105ED /* MBLBluetoothPeripheral.h in Headers */ = {isa = PBXBuildFile; fileRef = 959AB88023DAC11C162E060851EAF248 /* MBLBluetoothPeripheral.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E4AA73FB5D5DA0AFE17C316732B9C284 /* MBLSPIData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = BEFADBF1370D8B2EF860CA323969640D /* MBLSPIData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E4CAB5C597052EA735335C12D195EEA5 /* MBLAccelerometerBoschFlatData.m in Sources */ = {isa = PBXBuildFile; fileRef = A36208353F9163C3EBFC7FF5211D93EE /* MBLAccelerometerBoschFlatData.m */; }; - E51FB14BF724DA7144C47DB5F55AF9C8 /* BFCancellationTokenRegistration.h in Headers */ = {isa = PBXBuildFile; fileRef = F86E6E388C2EF806B61222B3D681D043 /* BFCancellationTokenRegistration.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E5759AD5C31FA3164867702627E69B9A /* MBLConductanceData.m in Sources */ = {isa = PBXBuildFile; fileRef = FBE75E185B5C873EDD2E213F6BABCFEB /* MBLConductanceData.m */; }; - E591714DE14861ACB5D3890FADC058E9 /* MBLTemperature.m in Sources */ = {isa = PBXBuildFile; fileRef = 73DE0D5505D394B9DC4A462D05EFA0E1 /* MBLTemperature.m */; }; - E5BB7F00FE5408BE046C11CB91B0A9A0 /* MBLMagnetometer.h in Headers */ = {isa = PBXBuildFile; fileRef = FFFDB3EE908CC40CC530395C85E3458D /* MBLMagnetometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E5CBD0E5C5F62F35AA4E84AD2EC29158 /* MBLAnonymousEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 640013670E530E919FB4A9E04E8E67EC /* MBLAnonymousEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E5CD2F2298035F76FD0F984136B90B4D /* MBLBluetoothPeripheralMock.h in Headers */ = {isa = PBXBuildFile; fileRef = CC5A95481671F9338C7026FE94A5DF8A /* MBLBluetoothPeripheralMock.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E64C271956A9EAB243E28460099FF443 /* MBLAccelerometerAxisReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F05FB3AC8B8267ADA435588032133517 /* MBLAccelerometerAxisReadyEvent.m */; }; - E651F2D6AD9C134500AC1683DED3F7F5 /* MBLAccelerometerTapEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 75AF7D9B0330B805F7A4C347639CF709 /* MBLAccelerometerTapEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E66B16B8FB06D8EDCC5233D874121D4E /* MBLAnonymousEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 4EE1B00B5579325E44B4DED36CD9BA05 /* MBLAnonymousEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E752FF738A3E0D2A8C69057EE4C37B3F /* MBLStringData.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B44476CD58A5D5ED7C806E7C65D47 /* MBLStringData.m */; }; - E78FECBD5793124F2014FA535B3D20A6 /* MBLLoggingV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 8DC83C9C0A5911866D9E26B2D0A42AC0 /* MBLLoggingV1.m */; }; - E79CD3F5C276A015B2D66620D045DF94 /* FastCoder.h in Headers */ = {isa = PBXBuildFile; fileRef = AF2F21AD149A6195BDBBEDDB8CA77DA8 /* FastCoder.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E7C28F3235C5181C59DF843386970E6E /* MBLModuleMock.m in Sources */ = {isa = PBXBuildFile; fileRef = 3B00B1B667709822576FBFD9DDAB1218 /* MBLModuleMock.m */; }; - E7CB4303ED58F21EAC00A8DBF5F2B52F /* MBLAccelerometerTapEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = B98186A44DA501640C7E89E7F811C3D3 /* MBLAccelerometerTapEvent.m */; }; - E8148DE25911050ABDBBC51A2FEEDE7B /* MBLAmbientLightLTR329.m in Sources */ = {isa = PBXBuildFile; fileRef = BEF5F7E8303E99B87637CDC4567F15E3 /* MBLAmbientLightLTR329.m */; }; - E873FA1AA76442F02994D434EEEEBB5B /* MBLAccelerometerMMA8452Q.h in Headers */ = {isa = PBXBuildFile; fileRef = C84458D72208FA0A9801EE0C9D88C10E /* MBLAccelerometerMMA8452Q.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E92F391B3E3F0C944F3E06AD155000AD /* MBLAnonymousEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 640013670E530E919FB4A9E04E8E67EC /* MBLAnonymousEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - E97B9B89AAE299E4E3996F41D4F8F6DE /* MBLBarometerBME280.h in Headers */ = {isa = PBXBuildFile; fileRef = 152E66FF201A94616AFB7BD1F2FF05A6 /* MBLBarometerBME280.h */; settings = {ATTRIBUTES = (Public, ); }; }; - E9932869E328D226FBEC62F3EB13278F /* MBLAccelerometerBoschRMSFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 54E13DFD9F8B34FA4B720005DC6E6BAD /* MBLAccelerometerBoschRMSFormat.m */; }; - E9958129438979A28AAB83F974CF41A2 /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19B4F38DF1F6E05EAECE968DE93EB673 /* MBLBarometerBoschPeriodicPressureEvent.m */; }; - E9DA32838467DF1A67577DCFF2E3736D /* MBLHygrometer.h in Headers */ = {isa = PBXBuildFile; fileRef = 877A0281064E5ABD387EB419547FF2EC /* MBLHygrometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EA4BC31E17AF4A0804E743C07CAF9D34 /* MBLGyro+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 4561FB74CFACF04C35AB74288309BE32 /* MBLGyro+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EA859F03271AE4076A4D22E5E5F85511 /* MBLSensorFusion+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A26B9116DB8E62C6D25B45482B11FBE /* MBLSensorFusion+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EA92286ADF334516D492FAF31A9DB616 /* MBProgressHUD-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 09AA1DECFDE20D870189DFB04ED30A79 /* MBProgressHUD-iOS-dummy.m */; }; - EAC3AF564BA84125D2B20D02BEE7260D /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 71D482429392C19BF45BE60346D6986E /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EB88D4E1542D24A2313B9C0CBE69D1F7 /* MBLFirmwareUpdateInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = D317640CB86BA28327C329AD150CA58E /* MBLFirmwareUpdateInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EB9F0FBB263C1288AE1B9FF041AB4AED /* MBLNeopixel+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 414435389F012CBF6D41D5242CF5FDE3 /* MBLNeopixel+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EBCAEFE40C726B410D95835DF849B603 /* MBLNeopixelStrand+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = C978BF2D9FF8F00A034662BBCEC1FE53 /* MBLNeopixelStrand+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EC7DD62F6C9B5A55940FCBCC2F2916B4 /* MBLCategoryLoader.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AD0CE2FF96D7D91B4C7D4AFCFE078B9 /* MBLCategoryLoader.m */; }; - ECAB74EADABA243A4AF9CE1BA15CB52B /* MBLMetaWear.m in Sources */ = {isa = PBXBuildFile; fileRef = BF82953F90A945F59016883056756DE7 /* MBLMetaWear.m */; }; - ECDE4151B3ED878A4B820A2F8075189C /* MBLMagnetometer.m in Sources */ = {isa = PBXBuildFile; fileRef = C224152C9D28C7A32A827C076760707D /* MBLMagnetometer.m */; }; - ED7B26AFFA2AC89FAC57203B615466FA /* MBLModuleInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6F4AD08FB0CDF8AB50BB6195F7858F /* MBLModuleInfo.m */; }; - ED9952489A2AC1EB21D4CEF4D3EC41CA /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E2A68EACC91CAAC95762EC992300966 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EDA6BE3AB1F64461B5E95C9BD0F219C1 /* MBLSPIData.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CFA9BC089864F62BB20CEAA33C1823 /* MBLSPIData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EDD48DD4B9E606B2C8A77353C6EF83F4 /* MBLNumericData.h in Headers */ = {isa = PBXBuildFile; fileRef = 10452424C154C0C85FEFD3422604FFFD /* MBLNumericData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EE042F374C81340BCF4F320DF9878061 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E450B72E674058A5FF52327DD7EC821F /* CoreBluetooth.framework */; }; - EE8E8EF32DD797D90E14EA5A0578F7DB /* MBLHapticBuzzer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2EDC16351CD877ED89AE173D8F142AE7 /* MBLHapticBuzzer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - EEB6D266C95B9B7ADECE3216ADA9066A /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = A7E3F764013B97ED812E8D3283DAA255 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EEB96B7050E7DFD68676FAE8EC4C35CF /* MBLNumericFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 172B2675C3FBB4FF57CCDD5C0451961E /* MBLNumericFormatter.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EF295922EF31CAD8F0E39E25A399C296 /* MBLMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 8D102AFADD707A32746A67B9AD40758B /* MBLMacro.h */; settings = {ATTRIBUTES = (Private, ); }; }; - EF95C644905F52ECCC75AA35F0676F35 /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 081D7D7A834CA695B5960AF3CB99F844 /* MBLAccelerometerBoschLowOrHighGEvent.m */; }; - EFDC1E905A756D1C170915BC2345312B /* MBLMagnetometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 24D72AD39D3634D27DC081E4D87585BA /* MBLMagnetometerData.m */; }; - EFE960277C850FFB2A186B7F020CD92A /* MBLGyroBMI160.m in Sources */ = {isa = PBXBuildFile; fileRef = 5FEE54F150DA612584E712A898EFEFC7 /* MBLGyroBMI160.m */; }; - F0510417BB05E2CAAC00A2A40A4D514F /* MBLData.m in Sources */ = {isa = PBXBuildFile; fileRef = 568592B0D644EB12F7886E0BC67E6EF3 /* MBLData.m */; }; - F099ABE001F6547425857CAAD11C22BC /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = EB9457C84BA60F953808A69B2CD44D2E /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */; }; - F0D0F67B34CA52DDC32AEFC12B4BEBCA /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = AE9B27FC17FCC12EC7A9E7C6EACCAA89 /* MBLGyroBMI160PackedDataReadyEvent.m */; }; - F177A6CECAB76792CDE527CE4F8DFC12 /* MBLSensorFusion+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 7A26B9116DB8E62C6D25B45482B11FBE /* MBLSensorFusion+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F18BF922E4A151B5BB52E4BFF4E3AEC0 /* MBLNumericData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = B3466D6BD1DE4F23FECA24B3DFFEFFE4 /* MBLNumericData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F1A0A2B8FB0603CB5A9433866E39D30A /* MBLAccelerometerBMI160+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 56CF8DD02BEFD38F8B3A67A5070F0229 /* MBLAccelerometerBMI160+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F1B7D282DB145FB22CFEEF928F8501B0 /* MBLAccelerometerBMA255.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BEDBB7E24ED6EAA39173671F4ED72C2 /* MBLAccelerometerBMA255.m */; }; - F1DB718C3349E5846166CE20CF0AB35B /* MBLAccelerometerBMI160StepEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = AC5FCD84CB9C3A65FFB4D7339F725E58 /* MBLAccelerometerBMI160StepEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F20894BC320F16D07B879D775515B15A /* MBLCorrectedFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = A281F1299DAC68B29A2FFDD77F54AD6E /* MBLCorrectedFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F259474802E65E3E752FD8AE6078C62C /* MBLGyroBMI160.h in Headers */ = {isa = PBXBuildFile; fileRef = DE97623D119021B33454944A2AADDF24 /* MBLGyroBMI160.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F2CD2627BBD21B458CE92140FE0448E5 /* MBLConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = B73063C453BC313606EEF0C5A59ED58D /* MBLConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F2D0933A6F6CFFB7CE8348341FFCFBCB /* MBLMacro.m in Sources */ = {isa = PBXBuildFile; fileRef = 610A24A199D5AD64DBB7279794C620F5 /* MBLMacro.m */; }; - F310557D5565A0453EBBFCDE5FA06E78 /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = F69E657022FBB3BFC4F9645E201C9A41 /* MBLAccelerometerBoschPackedDataReadyEvent.m */; }; - F3121E4F44FEF8E9D55D660C64268C0F /* MBLAccelerometerData.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E2D750942D679B66CAEEF61EEB60716 /* MBLAccelerometerData.m */; }; - F31502B29C58F8D741BE5DB294137F9A /* MBLSPIData.h in Headers */ = {isa = PBXBuildFile; fileRef = 36CFA9BC089864F62BB20CEAA33C1823 /* MBLSPIData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F33AD5EC66A906E8894BAF984C8F6EFD /* MBLMagnetometerBMM150.m in Sources */ = {isa = PBXBuildFile; fileRef = 17E20328641E5D9CA09CBBE5F5468A0B /* MBLMagnetometerBMM150.m */; }; - F375002B224DE82B7EA47F75696AF19C /* MBLNumericFormatter.m in Sources */ = {isa = PBXBuildFile; fileRef = 8A1A7139C699D05C359780845610FB22 /* MBLNumericFormatter.m */; }; - F3B4BEF36AF95D61F9ACBC65D5111F5C /* MBLGPIO.h in Headers */ = {isa = PBXBuildFile; fileRef = 36F4A7346858E41F01D1A230D24B25A6 /* MBLGPIO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3E86288D1AF51082A0952597E7E1313 /* MBLPhotometerTCS3472.h in Headers */ = {isa = PBXBuildFile; fileRef = F718090CB9057236EB1DFB034F70974C /* MBLPhotometerTCS3472.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F3F3C7D31D2CDB55BBC399D99E432358 /* MBLDownloadOnlyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2760600C17CE3E9ED9744899937B5799 /* MBLDownloadOnlyEvent.m */; }; - F421C77245B440E0584DA93974F08654 /* MBLMagnetometerBMM150.h in Headers */ = {isa = PBXBuildFile; fileRef = 6941B5A6AA94E0B5B46B122C660F520B /* MBLMagnetometerBMM150.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4960B079474AA55D05BA9A76838F39B /* MBLCategoryLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = B490A15EF33E626D39F6446407ED61B9 /* MBLCategoryLoader.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F4B0E419158EE00D9C048F4A91CA9D3A /* MBLMetaWear.h in Headers */ = {isa = PBXBuildFile; fileRef = A66B7CD4ADF832A51D1279005F5F16D2 /* MBLMetaWear.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4B1EFD7510C82D83F2B8551075D6F9F /* MBLGPIO.h in Headers */ = {isa = PBXBuildFile; fileRef = 36F4A7346858E41F01D1A230D24B25A6 /* MBLGPIO.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F4C11FD2743E3B0FC49C3F870D81AA97 /* MBLMetaWearManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 10FD2A19A75CE29E07394D16F34BB579 /* MBLMetaWearManager.m */; }; - F4E7E8F099B8B41393C3A13150BC86C0 /* MBLPhotometer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5B1E68856F19F80FD47414AA57EFEE18 /* MBLPhotometer.m */; }; - F55449B787240C37E111FB2DBB0C8CA2 /* MBLProximityTSL2671.h in Headers */ = {isa = PBXBuildFile; fileRef = 45BA09FA60F45842A6A076016F5ECE19 /* MBLProximityTSL2671.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F5765763390E99286831F188856B47AD /* MBLBarometerBosch.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BACD2DA7C2B8550742703BBDAC9D3E9 /* MBLBarometerBosch.m */; }; - F5DBB15964C5531AD4237F9A41ACE5EB /* MBLAmbientLight.m in Sources */ = {isa = PBXBuildFile; fileRef = 52B98D79F80CCB0DF0D3549529A16F8F /* MBLAmbientLight.m */; }; - F5F6B2E31F844FA9C20C45939D164542 /* MBLAccelerometerAxisReadyEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = BD9EE0CE69712E8C1D2AF65EC09F00B3 /* MBLAccelerometerAxisReadyEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F60190ED8281DA9EEF4B9B5C0026F6ED /* MBLDeviceInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 0839AC074757922706A96E05EB0C5F43 /* MBLDeviceInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F628B82BBAC10EF0C0B6677D9D765CF8 /* MBLSensorFusion.m in Sources */ = {isa = PBXBuildFile; fileRef = 47980C0F2A6A1229368779FA3439FFD8 /* MBLSensorFusion.m */; }; - F65E1D04CCB66F391DE78AE2BEE903F0 /* MBLFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 01FEC95AFD637366A6C38E82EFCA1892 /* MBLFormat.m */; }; - F682C92A9C1B4A1C17803E6A8C74111C /* MBLDataSample.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AB01530A4D412313CD65CD892515E4F /* MBLDataSample.m */; }; - F687D07D42F6B9151F28274CE3431735 /* MBLI2CData+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = AA3ED4C20784864624CA77166567B77F /* MBLI2CData+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F69269A19213DA89AC3C81F8C3FA22ED /* MBLLoggingV2.h in Headers */ = {isa = PBXBuildFile; fileRef = FF68DD5BE6FD81CB7D400B9F8020E4AF /* MBLLoggingV2.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F6A36E8016E462F06D77A07846C6F219 /* BFTask+MBLPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = BDEC1B0CD69077F22F35CBFCBF3196BF /* BFTask+MBLPrivate.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F6C60E61D7D4FEF0B6F006B4B488D153 /* MBLPhotometerTCS3472Format.m in Sources */ = {isa = PBXBuildFile; fileRef = 56C89D7E66B301BD38A7BEF9EFDE1766 /* MBLPhotometerTCS3472Format.m */; }; - F6FD2475485887A4E71D0CD90451FF29 /* MBLDependentData.h in Headers */ = {isa = PBXBuildFile; fileRef = C1C99B28231BEF46531726251543F95D /* MBLDependentData.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F73D4E9E704F69E27D254F2CF5EDAB2B /* MBLDataSample.h in Headers */ = {isa = PBXBuildFile; fileRef = A43DC64101E0EE568BE151B06C3D40D0 /* MBLDataSample.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F79142D45CA1CDC24F04B35F3F73BCD5 /* MBLConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EAD9DEE69ECAFAEAFE644683B2694CD /* MBLConstants.m */; }; - F7C83B6BBAD175479AB0759CCFFE1384 /* MBLLED.m in Sources */ = {isa = PBXBuildFile; fileRef = FC6957324B1EF69DC57A843B7DF24A0B /* MBLLED.m */; }; - F83C49EF623BE6E8D1EA803A8C685277 /* MBLTemperature.m in Sources */ = {isa = PBXBuildFile; fileRef = 73DE0D5505D394B9DC4A462D05EFA0E1 /* MBLTemperature.m */; }; - F85A0163CA730759AD57FDE7B4E02766 /* MBLTimer.h in Headers */ = {isa = PBXBuildFile; fileRef = 0B91D9E1F10A979FBA03D3D9FB595CE5 /* MBLTimer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F89F4E47EEFB23D3CFFB114DEE475A6A /* MBProgressHUD-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 9C0430E07BCDED5B7CD518B681868CEF /* MBProgressHUD-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F8B35563C037D31EEFB6E052E02D2836 /* MBLLoggingV0.h in Headers */ = {isa = PBXBuildFile; fileRef = BE4FB9FDAC472B413A57ED7CF855DEFD /* MBLLoggingV0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - F8DD67B883144E11180D0BDE15DEE0E3 /* FastCoding-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 42BDD5845FC5E5B3328CA4C38F0C62A6 /* FastCoding-tvOS-dummy.m */; }; - F9377B89B42A0364A115D2C4838A50B8 /* MBLProximity.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DE5DB293EAAAC3B450A32C1015827C3 /* MBLProximity.m */; }; - F94DEBF52F8530CC3323696CB4512B4E /* MBLAccelerometerPackedDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 305C1893654B1DF8D8533B49A105F27C /* MBLAccelerometerPackedDataReadyEvent.m */; }; - F9AA4F1ADD3FB9DCAEC8673A3726D10B /* MBLModule.h in Headers */ = {isa = PBXBuildFile; fileRef = B9DE4E899E4844655FC917D8D457823C /* MBLModule.h */; settings = {ATTRIBUTES = (Public, ); }; }; - F9BEDB426E426BF3F0482C18D37E6600 /* MBLModuleInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = EC6F4AD08FB0CDF8AB50BB6195F7858F /* MBLModuleInfo.m */; }; - F9E35E58B17CCECB2AB549D7EDF39881 /* MBLANCSEventData.m in Sources */ = {isa = PBXBuildFile; fileRef = 2E2B5EE129D83B149A06CCA4B37C894D /* MBLANCSEventData.m */; }; - FA00EF4DD7DBDE1DF356A9CB22405E85 /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 19B4F38DF1F6E05EAECE968DE93EB673 /* MBLBarometerBoschPeriodicPressureEvent.m */; }; - FA0F4508C96D32E0D165B5D3838B0C1F /* MBLAccelerometerBMI160MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E89FCF9BB5AFDAC6517362946554ADA3 /* MBLAccelerometerBMI160MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA16CF834177CDE89E66CA8CA528CD80 /* MBLSPIData.m in Sources */ = {isa = PBXBuildFile; fileRef = D20073129429570646FABC385B7A5A9B /* MBLSPIData.m */; }; - FA1CFCFF5B8D62DA42E136C36989AC51 /* MBLAccelerometerData.h in Headers */ = {isa = PBXBuildFile; fileRef = F04C1384B21B5E727D6A34D5475BB9EB /* MBLAccelerometerData.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FA525FA8A5A2361D4B0431C22C1BA23C /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E83CC37D40B85A98BBE1BD141F7CDF8 /* MBLAccelerometerMMA8452QOrientationFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FA5F2867463949901F7BFD548478E19E /* MBLAccelerometerBMI160MotionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = E89FCF9BB5AFDAC6517362946554ADA3 /* MBLAccelerometerBMI160MotionEvent.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FAF82FBA7B3AE956CC28059B5479E47F /* MBLAccelerometerDataReadyEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = 665A6DBDD2A12E5E75F90AE098EFE51C /* MBLAccelerometerDataReadyEvent.m */; }; - FB3D4B55F8DCFD751BBB23743D3D5E45 /* MBLAccelerometerBoschOrientationFormat.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FE8178DDBF5ECA3097B097B4826CBA7 /* MBLAccelerometerBoschOrientationFormat.m */; }; - FB63476BD21F17CBC8B4BB231BB8B253 /* MBLMacAddressFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 379385238BD2CE20DA91AB120E2530B9 /* MBLMacAddressFormat.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FB64F35B3687214FD23E129F8A2DC7F7 /* MBLConversion.m in Sources */ = {isa = PBXBuildFile; fileRef = 281F942BD483B5AA0F5F85DD304B6613 /* MBLConversion.m */; }; - FBB7A5411A92CED59B10B5DEC552FEFE /* MBLGPIOPin+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = EE024F5D66D6ACBD750318E522672E62 /* MBLGPIOPin+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FC03C140A49BEED81CEFEE41708C5FA9 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9FC2805FA64DA152193079D7EC8BAAE /* CoreData.framework */; }; - FC10BA1111A09A0D5FB6B8B9D8054EF3 /* MBLSerial+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = FB311E558EC50722E2C62C1661943B60 /* MBLSerial+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FC3505C0AD37D2284D7D355A59608FB4 /* MBLStringData.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B44476CD58A5D5ED7C806E7C65D47 /* MBLStringData.m */; }; - FD189D285021697DD54CA109B97E0125 /* MBLExternalThermistor0.h in Headers */ = {isa = PBXBuildFile; fileRef = 56399F53F95874236906C93F8990D7D4 /* MBLExternalThermistor0.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FD96611DC5024A5BA022A51CE76D1282 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 7FE4B12F90174C821CF8462ECFA4E9F5 /* MBLBarometerBoschPeriodicPressureEvent.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FDE3B20EF4DE1A6C8B317B93012E7CE1 /* MBLAccelerometerMMA8452Q+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 1081563FA3CA893D64CD1D5FB19AA7ED /* MBLAccelerometerMMA8452Q+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FDFDECCDB222A235F13F184634AE4D71 /* MBLGPIOPinChangeEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A6625912CB799A2119DC206BE310F742 /* MBLGPIOPinChangeEvent.m */; }; - FE3B35889ECC237B1841AB30986490B4 /* MetaWear-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 90C9B7E48E79010F255AE5D6ED3F90CA /* MetaWear-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FE4DE314A897BB36CC094A946A5DA1CD /* MBLGPIO+Private.h in Headers */ = {isa = PBXBuildFile; fileRef = 0E309FA5671BF963CA0BB99B55E5F6FD /* MBLGPIO+Private.h */; settings = {ATTRIBUTES = (Private, ); }; }; - FE530DE2E9AA57382B98E715518FF04A /* MBLDataProcessor.m in Sources */ = {isa = PBXBuildFile; fileRef = EAAB5B28E78532344EDA35CAEB74A6D8 /* MBLDataProcessor.m */; }; - FE8C13A4B26155F3FAF8DF2969A4CAF4 /* MBLNeopixel.m in Sources */ = {isa = PBXBuildFile; fileRef = D35056D85FD1D73A2248A8740AD67A57 /* MBLNeopixel.m */; }; - FE957E0727A1EE05A66488F0B390222C /* MBLAccelerometer.h in Headers */ = {isa = PBXBuildFile; fileRef = D72C4D748AA386035CB162B95E473342 /* MBLAccelerometer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FEB96753E0D5E0D325E2A96303F52532 /* MBLConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = B73063C453BC313606EEF0C5A59ED58D /* MBLConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FEDD3D65ABA05570E54BAE324331BF21 /* BFCancellationTokenSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 3507E4FF13655A7B8DC112BD3212D44E /* BFCancellationTokenSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FF2A42DBF63CD6A6AAC4DAFC4AE74C2F /* MBLTimerEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = A16B91106DC84C0FD697BD0C372F9757 /* MBLTimerEvent.m */; }; - FF596E19E30DB5125A2912D901FA9438 /* BFTaskCompletionSource.h in Headers */ = {isa = PBXBuildFile; fileRef = 9784BDE57BF76980AD5F9EE5A90E6E6B /* BFTaskCompletionSource.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFB093FE97394ABAD8F7ACB588686F2B /* MBLANCS.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D41A7D85DBDE32F7AA827BE427338BC /* MBLANCS.h */; settings = {ATTRIBUTES = (Public, ); }; }; - FFF1C2AE5758C0D478EA4547BE5708D8 /* MBLLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = 9411060398DF728E2336B402749A6090 /* MBLLogger.m */; }; - FFFCC62ED4403DE3053C62E5368A73D6 /* Pods-Starter-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B7EFABA5A2A4A75BC5FD3EB52D601491 /* Pods-Starter-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 00AA40F26D612F771F2D41BEC07A7823 /* moduleinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45194A165F19A3023ECCEB2CA456742D /* moduleinfo.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 012314C94A0FF3DB0384FC0195652471 /* Bolts-Swift-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = CF932E28DA876FBB08463D0B2D76F4F4 /* Bolts-Swift-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 01F47C0378E434E2BEA38F0C76A3B84E /* ibeacon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C7C7BA43DBD7C6F34ECF21C7D894199 /* ibeacon.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0204CA96A8401DD93D9D19D1176C39CE /* dataprocessor_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29D0DD783A789BE3E269ACE77815B0AD /* dataprocessor_config.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 02B9CB54C3C7B2A022F33728BDA8E446 /* MetaWear+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFE631152B1B89B7AC6B37CFF8E00E84 /* MetaWear+Async.swift */; }; + 034F09D6D06D1D88731054B110D11E46 /* sensor_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A80341133AC9664CE1D6A3DA6B60866 /* sensor_fusion.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 03AB6B72B97116D5374F40592A4A3B7C /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB9B16C0D7EF98BBEB8AB328589B1A03 /* settings.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 03C624A9AF2AA6989DFED8AFDFDED1F2 /* MetaBootFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A289BA07E505F658D8CE9EEA1D6F1BB /* MetaBootFinder.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 03FC206D57B151C395D81C77C62EBCC1 /* MetaWear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14B78E47F66C7BB1E6DA20CD54A85A4B /* MetaWear.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 051BB894CCF08D223FEEDB3DC118E921 /* responseheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A0BB1A52FA6EAD970C666D3F598E781 /* responseheader.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 05CCD262D39E111E53164DA1E236C954 /* TaskCompletionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE221359457B938A7422752010173946 /* TaskCompletionSource.swift */; }; + 0651E57BFB12F301C7D0D4C87ED7051C /* barometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 693352717EF35F2AEF792660257CC4F1 /* barometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 08F2BD3E77B81276FC0BD2654F75BA1D /* macro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DFB479038A1252E6C92F93E71FD0C0A /* macro.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 09E1DF17D9B1FB5242CB00D468314C7E /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00DFF052541C3386369F9784EB8627D0 /* memory.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0A92A75E1F330C5F90449CF0A992F751 /* MetaWear-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = B291B9AC61070731F448C9AA7833A048 /* MetaWear-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 0AF5CFDE46039F06B54ADD854A0A22F1 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDDF786AFD200556B2AA1E5D7B543E9C /* timer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0CD9A408A38DB07CD03B5057FDEE1F93 /* ambientlight_ltr329.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C04390A32ED6007EB4F966E63E0FBDE5 /* ambientlight_ltr329.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0DCC1A33EB453E9E3857277F50C30D53 /* CBUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B6D30663A4F7C3465C8AC65DF0B96B2 /* CBUUID.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0E2FDF4F00A9CEE558A9F30CB6932392 /* MetaWearScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AAD507FDC13FB08A8D3FD8751B225D1 /* MetaWearScanner.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0E96B336DCE446511F82F03ADB00FD14 /* anonymous_datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F81A117E17C144C09A8A90E6CA8302B3 /* anonymous_datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 0FD23591DCB102F251D85DAB299469F8 /* conductance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D26646F8AEC4B507432302E9A08D48C0 /* conductance.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 10CA49691E011DC9340451D068C7DAFF /* neopixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D58198726650027243B7558C21A0FCEC /* neopixel.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 10F1FF609A52EB8BB9C14417698CC429 /* anonymous_datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F81A117E17C144C09A8A90E6CA8302B3 /* anonymous_datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1107234C5F163B99252F243B1F5628B1 /* LogDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 661656E42C39752CA90CCAE32C39B7FF /* LogDelegate.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 11097C36437278F1507C48D5D4A41458 /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05EB1C5C06110053BF5906B362C355AB /* utils.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1170238395A8FB6544985CE6EA313BC6 /* ScannerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD95C3625CEBFBEF1B885D005A07C417 /* ScannerModel.swift */; }; + 13E906FFA9FF76393ACC4005988D87C9 /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5443759FFFF9BF343BFF667A06E6EE51 /* Bridging.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 14D9733934BB3A089D231D0A6EEF544A /* dfu_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 903124EC640B5C982AE5E7D906FFAAB4 /* dfu_utility.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 154871F75D068545E3118830DC621593 /* MetaWearData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F0D01A3B7B92C9EBFA0EFB1881AFF23 /* MetaWearData.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1855EB32E386F17FC0B35545157AEDB7 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4FB4E705B69B6F8C5C09102B11CEE6F /* task.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 18B714E1FF569E44BBF144FA68FE6466 /* threadpool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85A6184B78942AC84F08C0339440A99E /* threadpool.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 18E98C3C3265B0B2F137D8D87311B192 /* threadpool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85A6184B78942AC84F08C0339440A99E /* threadpool.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 19845EA25D5A4AB1162E4C305445F148 /* sensor_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A80341133AC9664CE1D6A3DA6B60866 /* sensor_fusion.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1B162E7D2B85F7F94F2A9DC5ECFA3D31 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D525B0CEEA87DB0DF03D2BEE816E83AC /* CoreGraphics.framework */; }; + 1BDB17D8445A86BAC3856886A766E617 /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB9B16C0D7EF98BBEB8AB328589B1A03 /* settings.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1C4A8AF667BCB1C0420D40771F040E1F /* datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4581E0D330D5693825305B8E0BC52675 /* datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1D169C4F8C8B4895B8AF7C9031CC3D85 /* cbindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D3F703C6314F69094A2C9602240191 /* cbindings.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1D7609BBBFD59A23B4B82D03F5CAC49A /* Pods-Starter-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F385036DA00AF006CFC0253FDB03CE12 /* Pods-Starter-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 1EB2062FFB9DD960719FDDFAA831A26E /* CBUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B6D30663A4F7C3465C8AC65DF0B96B2 /* CBUUID.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 1F44842175C66F2DB12B81AB3254E442 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B03D0D9D3B4E71ADC714860AE38A3E7 /* CoreGraphics.framework */; }; + 2085605EEDD6E9675B8C390091E51B5D /* MblMwEvent+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194CA0268C374020A0C47FCC1334B978 /* MblMwEvent+Async.swift */; }; + 22B49CEE4409E1CE01AE3583E5F294CD /* dfu_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 903124EC640B5C982AE5E7D906FFAAB4 /* dfu_utility.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 243D9C6E69C43AE953D651BBC12D2E32 /* gyro_bmi160.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B904A6AE7F408F32FF118E2851DF47B4 /* gyro_bmi160.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 247D566A02CD02A693E29EF813DB47AD /* MetaWear+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFE631152B1B89B7AC6B37CFF8E00E84 /* MetaWear+Async.swift */; }; + 24A159AF7A28BB5DCBC0092807B0B03E /* serialpassthrough.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED9057C240FB0E1B1C51B1D479331FA8 /* serialpassthrough.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 24B4606535FEB6EC4D219338BF388ED6 /* dfu_utility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 903124EC640B5C982AE5E7D906FFAAB4 /* dfu_utility.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 251F11BDE6742EBACBF6486D99550034 /* ScannerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD95C3625CEBFBEF1B885D005A07C417 /* ScannerModel.swift */; }; + 2671E54E7AEE5CF3373FDA1B86CB561F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BD2C5138C17A6A856B62D379A4C12D1 /* Foundation.framework */; }; + 28284DE59A477A53FCB24FAFC5F04671 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = E276DFEEBCD2D36D1990F0819B165019 /* Task.swift */; }; + 289F8D4CE9C2B250BCAEEEB5AB470AF6 /* MblMwDataSignal+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C7E75F6DCD178EDC970498C1F2C72C /* MblMwDataSignal+Async.swift */; }; + 2A0584DB80D0415029506E71593D9AFD /* cbindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D3F703C6314F69094A2C9602240191 /* cbindings.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 2B542D8D8FC2635341941C27DA18A526 /* MetaWear+LED.swift in Sources */ = {isa = PBXBuildFile; fileRef = C636B15978D834652B0A158570ED541B /* MetaWear+LED.swift */; }; + 2B961611FCCBC8763F2F6D6E5E0D0116 /* switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4ED30AEE8A78DA3FCC439D6DBBFFE55 /* switch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 2D038B9C3B370C2A38017299D43962D9 /* Bolts-Swift-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C89FB5EF23EF0483479BC1113DD58E /* Bolts-Swift-macOS-dummy.m */; }; + 2D13530877F3E3C2BD981AEE64902DBC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 490648870DA13732747D243777EC5FC7 /* QuartzCore.framework */; }; + 2D1EE656694E195748608F858413504E /* MetaWearData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F0D01A3B7B92C9EBFA0EFB1881AFF23 /* MetaWearData.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 2E36271E6AAA86B51D49DF7717B2F6D2 /* Task+WhenAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 466D90E01C3417843BB962C73149971D /* Task+WhenAll.swift */; }; + 2E40164EA751CA3F67666A14CDEF4EF3 /* gyro_bmi160.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B904A6AE7F408F32FF118E2851DF47B4 /* gyro_bmi160.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 2EB360BCCDB4AF738ED5B103EBF7A19F /* MblMwDataSignal+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C7E75F6DCD178EDC970498C1F2C72C /* MblMwDataSignal+Async.swift */; }; + 2F3DEBBE370C678EFB97A8414061B17B /* accelerometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 501E03DB9586288A2EDD09ADB1926F9B /* accelerometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3048C93D0D73996E4D54A09B6AD9686D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A896293036ACBC627931964FC081F7A /* Foundation.framework */; }; + 31840425CE7BEDA4C9B1DCAFAC592F81 /* String+VersionCompare.swift in Sources */ = {isa = PBXBuildFile; fileRef = F25852C48E7333ED543B72384B05EF4F /* String+VersionCompare.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 33E4E4C4E95DEC1AB430466D0F930FB0 /* MblMwGattChar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40929D407612A74D13A8821778981AD3 /* MblMwGattChar.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 348119EFF54B003E6F216DE34593DD6C /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BD2C5138C17A6A856B62D379A4C12D1 /* Foundation.framework */; }; + 34BA9F35FCF51D81D8FE5F6ABC16FC92 /* haptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6819E4164206BD9EC52CB720FD418E2E /* haptic.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 34F22C6369E0189D359A56370AD047A4 /* MetaWearScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AAD507FDC13FB08A8D3FD8751B225D1 /* MetaWearScanner.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3658E8637546C4407D2D8E453734E60B /* Pods-Starter-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DFC029E49475091E3F7EA515EFA051C4 /* Pods-Starter-iOS-dummy.m */; }; + 36AAC9BA6756E7C56BE17C15BBEBB2B9 /* sensor_fusion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4A80341133AC9664CE1D6A3DA6B60866 /* sensor_fusion.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 392CD274B6617281FADB1CE19FACA318 /* led.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C3DFB5E0AC5A7457A95A380D5713014 /* led.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3A320188B8D201A2E0E1AF0F977EDC58 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BD2C5138C17A6A856B62D379A4C12D1 /* Foundation.framework */; }; + 3A6A56AC96145E8B51C12EAF00461244 /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 72203EB33CBF8CE1303572C3FCA9D3C0 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 3ACFC78174B60F610877D301FE8B3602 /* anonymous_datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F81A117E17C144C09A8A90E6CA8302B3 /* anonymous_datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3B52BEE544254223D8B4DBED4D82FCCA /* humidity_bme280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9950899B774D06421D049FDF2DCC0BFC /* humidity_bme280.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3D7AA76F5A7E2316692C10C89C727D2E /* accelerometer_mma8452q.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF4406FCF209E179BD2AC06B93CA8E4E /* accelerometer_mma8452q.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3DEBCDBB09738A6346299C4A5C852B0A /* MBProgressHUD-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = C9BF920E8322617E10019F6945D4B8AD /* MBProgressHUD-tvOS-dummy.m */; }; + 3E4901177DA2885BCC1DFDAE3D796F53 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 889D1B5AFB407A80A8671BDC614F35D9 /* MBProgressHUD.m */; }; + 3EC76AEEDA9CD3FE92B8C210CD5358E4 /* MblMwGattChar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40929D407612A74D13A8821778981AD3 /* MblMwGattChar.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 3FA634E744D6010D86493EAD0B7671A9 /* ibeacon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C7C7BA43DBD7C6F34ECF21C7D894199 /* ibeacon.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 400D163D4D8A186D843F9B78258B4630 /* switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4ED30AEE8A78DA3FCC439D6DBBFFE55 /* switch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4057BC89C7592D7F20A58DF7572A1C74 /* switch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B4ED30AEE8A78DA3FCC439D6DBBFFE55 /* switch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4179E2055AE7C9C81533E6C9F26732C6 /* metawearboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 918206079028D3E3B84F1977D91F4F52 /* metawearboard.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 42AB3882D73051A60B4E31E4905E61B6 /* responseheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A0BB1A52FA6EAD970C666D3F598E781 /* responseheader.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 43695E4581D60DF316442099D179CC0E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A896293036ACBC627931964FC081F7A /* Foundation.framework */; }; + 439B2A08739129FE38B9DE710BB9F02A /* async_creator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7DD014C32A513BD77C3DEB87CAEAE7F8 /* async_creator.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 440DB983EB1327D48044ED94E49C4BC5 /* conductance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D26646F8AEC4B507432302E9A08D48C0 /* conductance.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 445A972E0EFED2BED4952E917C4896AC /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B1217B5C1A00167FAB2A9BAAEA43DF9 /* CoreBluetooth.framework */; }; + 44A5D6118DFF5DAEFC3B557DF257B32A /* Task+ContinueWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = A646D30D3CB45C6A3A53BD186EB0FCC3 /* Task+ContinueWith.swift */; }; + 44B09C0FB98A2341319C4019C0FAAF17 /* macro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DFB479038A1252E6C92F93E71FD0C0A /* macro.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 45BA96A5201B099C19EC431457EDAD7D /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABDA1ECA531B3EC4A6BD92954C4799A4 /* event.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 483ADC7D8D5EE822B84172AD411EE23B /* MetaWear-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E7EE95CCAA9DF84E72BFFE29E793292A /* MetaWear-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 49DE6A9DAFB4D84F3B2DC9DF56EF79F1 /* Executor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF1EAA70E67E69AA77BB00DA24042DA /* Executor.swift */; }; + 4A0876D17A183B94AB67952FD87FC957 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BBC05A8A0FD4FF2E64ED47558DD4C67 /* debug.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4BAC134A349E0F21ADEB527C1C717FB0 /* haptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6819E4164206BD9EC52CB720FD418E2E /* haptic.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4BFFFCE73BCEF0C0D796E13B5B96907E /* serialpassthrough.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED9057C240FB0E1B1C51B1D479331FA8 /* serialpassthrough.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 4EA58A2CB9C716A151E69E25B3B15A4B /* dfu_operations_details.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3107BA3555E6C344C5FB4D46E325E475 /* dfu_operations_details.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5001765206FE2F194E6FBEBBDEC5C8D6 /* BoltsSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE58934D390C197F236A2AFFB189AABB /* BoltsSwift.framework */; }; + 50CC4A4839ABF463158B0601D23DA08A /* dfu_operations_details.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3107BA3555E6C344C5FB4D46E325E475 /* dfu_operations_details.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 510A1E5020AE426C651FF7E9211EF13E /* Bolts-Swift-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 72FD6E65E5AE23F4883599B68F32D769 /* Bolts-Swift-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 51285A539BD82969A7175C2D250747DE /* file_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED1CF3D8AC000446F9D372D51117195 /* file_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 53DA7FD054A77393E41C2B72297B59A7 /* MetaWear+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = DFE631152B1B89B7AC6B37CFF8E00E84 /* MetaWear+Async.swift */; }; + 552CD4D1CC87A83892FC02A18670238A /* led.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C3DFB5E0AC5A7457A95A380D5713014 /* led.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5583AD9C6F3ED35CCF868C8F8DFA5798 /* dfu_operations_details.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3107BA3555E6C344C5FB4D46E325E475 /* dfu_operations_details.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 558E398E75C0CFDB6DDAB6D25DB62328 /* Task+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BC9C341CCDE7885327FA6E387D48F1 /* Task+Delay.swift */; }; + 5647322C1F12138CA499F3047A51E06D /* MetaWearScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AAD507FDC13FB08A8D3FD8751B225D1 /* MetaWearScanner.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 578FF1EE1C615C93ABA8786DB7D014B0 /* async_creator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7DD014C32A513BD77C3DEB87CAEAE7F8 /* async_creator.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 57DF8EFA040AA1660BD1454A1F69B844 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 23DC9A1994E72BE8BB7FE6D45EACE46B /* version.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 580AF1955287A6FECCB09B452B790E44 /* magnetometer_bmm150.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E118D5F1C09D22C0DB25BBA0350D5A31 /* magnetometer_bmm150.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 58B1650AB76469C6BDF9810CD0C8A227 /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00DFF052541C3386369F9784EB8627D0 /* memory.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 58C8FC4F9EA4A5C525EE6F9410CF060D /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB9B16C0D7EF98BBEB8AB328589B1A03 /* settings.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 599DF4151C07E6AFD0C01B22BDC368AE /* Task+WhenAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 466D90E01C3417843BB962C73149971D /* Task+WhenAll.swift */; }; + 5DD87388D4349D8784CF40E22B33756A /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDDF786AFD200556B2AA1E5D7B543E9C /* timer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5DD9788396623FC1FAD106AEAEF3F7F7 /* gpio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0869A2B29A2A21CABF62ADF6DDB71E03 /* gpio.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5DF085815D183D5BE6F1EB009E71CE95 /* gpio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0869A2B29A2A21CABF62ADF6DDB71E03 /* gpio.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 5F89D00D3D868B747539CCEAFC94E07F /* BoltsSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE58934D390C197F236A2AFFB189AABB /* BoltsSwift.framework */; }; + 5FD51292ADAFB0976520B15166F3D595 /* DeviceInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051182652C17095A392B873BCDD487E9 /* DeviceInformation.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 609CD2C2810F1E529B25BE4A4927AB88 /* metawearboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 918206079028D3E3B84F1977D91F4F52 /* metawearboard.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 618EB24DA4C00A2C12308C7660982E96 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A896293036ACBC627931964FC081F7A /* Foundation.framework */; }; + 62DE7BFBF349E63640D447072FC2CFCD /* accelerometer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB868C271ADD0D99C1C4A385A1A48623 /* accelerometer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 63BB63558E4ADC1FC689D74F246CB406 /* Bolts-Swift-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 4FDCD6B8716ECDE9BC8B5806BF6F3F72 /* Bolts-Swift-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 645A4D1E939175D19701DE18C2216FDC /* ibeacon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2C7C7BA43DBD7C6F34ECF21C7D894199 /* ibeacon.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 65EAF8EACE041FB1666F8DD7C0711FAB /* dfu_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B16148986D393527A65ACDE1BC87B1EE /* dfu_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 67611705539950453B74BF7938761B9C /* Executor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF1EAA70E67E69AA77BB00DA24042DA /* Executor.swift */; }; + 6977812480B1886DDC3B3A44533981C7 /* Pods-Starter-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8D3E2113D269B645DA84C64DE31DEEE4 /* Pods-Starter-tvOS-dummy.m */; }; + 697D3DDDE8BF47767420A4925E36841B /* LogDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 661656E42C39752CA90CCAE32C39B7FF /* LogDelegate.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6998BC571F24061C702AF96C32C908DC /* miniz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 792EE243E0047B63DEB31D969D6A7A21 /* miniz.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6AE63282F26D28DDE38D7E4B4FA9E160 /* accelerometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 501E03DB9586288A2EDD09ADB1926F9B /* accelerometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6B48387430277C5DFAEC35298FDADA59 /* dfu_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B16148986D393527A65ACDE1BC87B1EE /* dfu_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6BDF2ECB5B6038E122197201D2BA5DD3 /* BoltsSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE58934D390C197F236A2AFFB189AABB /* BoltsSwift.framework */; }; + 6C8644E1469B8A0E8DB50151DD4938A8 /* miniz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 792EE243E0047B63DEB31D969D6A7A21 /* miniz.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6DE5C190E083A170512267E1E3EEBEBF /* accelerometer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB868C271ADD0D99C1C4A385A1A48623 /* accelerometer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 6F2DBEBDD09DCEBF77377E56A8F17AF1 /* datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4581E0D330D5693825305B8E0BC52675 /* datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 706D99627D7A9951C56B9D4348B6843C /* TaskCompletionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE221359457B938A7422752010173946 /* TaskCompletionSource.swift */; }; + 70F04BDD0BF8A3B0327457AC50804FE8 /* datainterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1763084867DB07A9AC0D5EB2BADA59B /* datainterpreter.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 734057868E620DDBF54FDE3C3F9F4907 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 23DC9A1994E72BE8BB7FE6D45EACE46B /* version.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 735DBDB30E1AA8AF512426813204CD0B /* metawearboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 918206079028D3E3B84F1977D91F4F52 /* metawearboard.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 736F140699145F4F5FA7DD9CA5F273DC /* colordetector_tcs34725.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF465F76A28B3143515C18F384C09073 /* colordetector_tcs34725.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 75575244EA2B673776253BF0D3B5759B /* multichanneltemperature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE9D19354AA80B8266A7A54A31DCECE /* multichanneltemperature.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 7903930B1251742CE4686E195B6689D8 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A896293036ACBC627931964FC081F7A /* Foundation.framework */; }; + 79582899033ABBFA0444FF828A603D90 /* dataprocessor_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29D0DD783A789BE3E269ACE77815B0AD /* dataprocessor_config.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 7BA67E822D9A5B96A3F2804BD52E786B /* serialpassthrough.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ED9057C240FB0E1B1C51B1D479331FA8 /* serialpassthrough.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 7C287CCB4A786EEF55E45CB797B1865A /* MBProgressHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 72203EB33CBF8CE1303572C3FCA9D3C0 /* MBProgressHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 7DC07F76B8133E5B18D94E90084D4905 /* Task+WhenAll.swift in Sources */ = {isa = PBXBuildFile; fileRef = 466D90E01C3417843BB962C73149971D /* Task+WhenAll.swift */; }; + 7F19C10F02F40A1F3600319FA762953C /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABDA1ECA531B3EC4A6BD92954C4799A4 /* event.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 80187C20199FBB70BED85C68277F6CC0 /* Task+WhenAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF344F7213D6BE97247B7AB9E5D59D9A /* Task+WhenAny.swift */; }; + 8165EECAAA8F4978A41A735AE0DB1560 /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A3BBAD43EAB96D4142D7666B9928922 /* logging.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 84AF0DAFE2FECBAF83A804323488EA8E /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC5707BBBC2BC238D1495B36C720B2D3 /* Errors.swift */; }; + 850ADD47A49F935A96E5E9F0F056FCF9 /* datainterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1763084867DB07A9AC0D5EB2BADA59B /* datainterpreter.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 853E46F5BE217A7626282484577A47A9 /* cbindings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52D3F703C6314F69094A2C9602240191 /* cbindings.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8552A6D816660802EEDCD983EE73B272 /* dfu_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B16148986D393527A65ACDE1BC87B1EE /* dfu_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 86F3208256FBF2A2B3490655E60F661F /* file_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED1CF3D8AC000446F9D372D51117195 /* file_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 890BB982B0B51456DE2CB27E0A0FE773 /* accelerometer_mma8452q.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF4406FCF209E179BD2AC06B93CA8E4E /* accelerometer_mma8452q.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 89698CDC89515B7CDABEC412E2A59E37 /* MblMwDataSignal+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22C7E75F6DCD178EDC970498C1F2C72C /* MblMwDataSignal+Async.swift */; }; + 8C02A058ED021E7D6464F32355D88965 /* MBProgressHUD-tvOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 0D548B9327762A53B9680304A82A03AF /* MBProgressHUD-tvOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 8C8AD17CA7484FC06B4BCE5EDEEE6719 /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A3BBAD43EAB96D4142D7666B9928922 /* logging.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8CD942945446A79765BBF3E74BC38E9C /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 404137FCCF98E34A29359A6BDB0F565D /* Cocoa.framework */; }; + 8CDBCE46BEE7ABD1E58EEAE1B19EA8C7 /* Bolts-Swift-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F28477938A3FD6AD9C4FF819C27E498C /* Bolts-Swift-iOS-dummy.m */; }; + 8D87DE99183BAF387BE553BAD32528E6 /* MetaBootFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A289BA07E505F658D8CE9EEA1D6F1BB /* MetaBootFinder.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8DAB5528699FB3F50611211F42EBD241 /* event.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABDA1ECA531B3EC4A6BD92954C4799A4 /* event.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8E24184B3FE1955E7E5BE11F93FACA1D /* Bolts-Swift-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B2E0CE87C737A797061F1F2C282192D /* Bolts-Swift-tvOS-dummy.m */; }; + 8E9E64490EBB4B97DB43CA421D6171BB /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05EB1C5C06110053BF5906B362C355AB /* utils.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8F1A18D2EACE3FA9AA264C9F35D9530C /* dataprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 58EF4EC9CB055DE315985DF4AEA02181 /* dataprocessor.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 8FAACABC68A6DE4FB7E1B12D19AC2921 /* MBProgressHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 889D1B5AFB407A80A8671BDC614F35D9 /* MBProgressHUD.m */; }; + 91E2C6108129FAFB91F47CF0E5CEC3EA /* magnetometer_bmm150.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E118D5F1C09D22C0DB25BBA0350D5A31 /* magnetometer_bmm150.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9326B17393A4E384D19E32D360B10830 /* threadpool.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 85A6184B78942AC84F08C0339440A99E /* threadpool.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 93BADEC83FFE2EF2945C0772355CA1D4 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4FB4E705B69B6F8C5C09102B11CEE6F /* task.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 93E6D78493BFD7F37A996F60546204C6 /* datainterpreter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A1763084867DB07A9AC0D5EB2BADA59B /* datainterpreter.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9424FE520BBCC08BC988583370B6C804 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 404137FCCF98E34A29359A6BDB0F565D /* Cocoa.framework */; }; + 94CF0946977C2B3747D9731E58AF766C /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BBC05A8A0FD4FF2E64ED47558DD4C67 /* debug.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 969AC01917B4EE478CE286F13E2290B0 /* proximity_tsl2671.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 876A2BB8D0772DC29DEA9A493B6B6AF1 /* proximity_tsl2671.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 97397FFE16EE3B02C0753B3D3AF89500 /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = E276DFEEBCD2D36D1990F0819B165019 /* Task.swift */; }; + 977B1CEED3BA8C9DF9D50B141BF3DE34 /* proximity_tsl2671.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 876A2BB8D0772DC29DEA9A493B6B6AF1 /* proximity_tsl2671.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9943D61C6104A9F571DCCC462A408BF9 /* FirmwareServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29931D8DBBB32F6EF417131198573486 /* FirmwareServer.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9A90C6CFA64219E2A19250AFD48CEFAE /* Task+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BC9C341CCDE7885327FA6E387D48F1 /* Task+Delay.swift */; }; + 9AA0EDF2EE9E628B14BD44D9AB4EC17D /* file_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED1CF3D8AC000446F9D372D51117195 /* file_operations.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9AB14ACE30AE5AB1149309687C276BB3 /* DeviceInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051182652C17095A392B873BCDD487E9 /* DeviceInformation.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + 9F4A06B50FD6B3C96387B2672ECBE931 /* humidity_bme280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9950899B774D06421D049FDF2DCC0BFC /* humidity_bme280.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A04FE8BA5EF1C31B1A2CC9E15881A5C9 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A4FB4E705B69B6F8C5C09102B11CEE6F /* task.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A098975A1F1B9BFBD4937FC42C8FC587 /* FirmwareBuild.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590EE580A6D609C522FBB7D2D83F1F3 /* FirmwareBuild.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A0A589753D6E30B528687EEDF919CCFB /* Executor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4FF1EAA70E67E69AA77BB00DA24042DA /* Executor.swift */; }; + A581011B05D55BC22AA20D140B50614B /* dataprocessor_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 29D0DD783A789BE3E269ACE77815B0AD /* dataprocessor_config.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A643441F5B717F4CBDD3E9949AC347B1 /* MetaWear+LED.swift in Sources */ = {isa = PBXBuildFile; fileRef = C636B15978D834652B0A158570ED541B /* MetaWear+LED.swift */; }; + A6B5330932DF153D7DB8F798652D2A3A /* multichanneltemperature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE9D19354AA80B8266A7A54A31DCECE /* multichanneltemperature.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A6BD42E9D017575E641733091CF164BD /* FirmwareServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29931D8DBBB32F6EF417131198573486 /* FirmwareServer.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A6D5CF4196559DED4EECFF20766C2D1C /* Pods-Starter-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1E42D790DFDFC3D341BF614BA451431E /* Pods-Starter-macOS-dummy.m */; }; + A772A12C904AA875F7C7BF091FFD7F5C /* CBUUID.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B6D30663A4F7C3465C8AC65DF0B96B2 /* CBUUID.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + A7C6528BE6DCD25F2DB961037F8509E3 /* MetaWear-macOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = F21AECA22893849D2E7A51A57AEEC4DF /* MetaWear-macOS-dummy.m */; }; + ACB063C3999BBBD91B976C904C2EFC27 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B72BB304A3A3772DBAF8AB933B83D1D6 /* CoreBluetooth.framework */; }; + AF408C4D0187D267F500841DC16A1D39 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BBC05A8A0FD4FF2E64ED47558DD4C67 /* debug.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B0A11F7D4845244337B599B93A0BECEF /* datasignal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4581E0D330D5693825305B8E0BC52675 /* datasignal.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B0EBEFE3F9239D7E66CB3D0CDF6D7B5F /* humidity_bme280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9950899B774D06421D049FDF2DCC0BFC /* humidity_bme280.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B20686A480E9EEA1425DDDF4D9BD0EA7 /* Task+ContinueWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = A646D30D3CB45C6A3A53BD186EB0FCC3 /* Task+ContinueWith.swift */; }; + B24776E3E9C7C1A540CA163170FDCAFC /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A47DCC5A27918EB38C8FAFB748D5830 /* QuartzCore.framework */; }; + B2B4994D2A912B440FD9395CA127CE22 /* String+VersionCompare.swift in Sources */ = {isa = PBXBuildFile; fileRef = F25852C48E7333ED543B72384B05EF4F /* String+VersionCompare.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B2E7890422398BBF438AD0FD67CCEBD2 /* accelerometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 501E03DB9586288A2EDD09ADB1926F9B /* accelerometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B2F9F8CC026C6E5C6FB83D0A0A2CA554 /* neopixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D58198726650027243B7558C21A0FCEC /* neopixel.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B33B31BC4484B4E47F8E0D5B15AF5890 /* MetaWear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14B78E47F66C7BB1E6DA20CD54A85A4B /* MetaWear.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + B5EA71ADAFE551E022B241A2D207B801 /* macro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3DFB479038A1252E6C92F93E71FD0C0A /* macro.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BA24BA3DD363B4DDF5EC6760EEE8D192 /* Task+Delay.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BC9C341CCDE7885327FA6E387D48F1 /* Task+Delay.swift */; }; + BB4ADDF0BAA546FFBF2A5A7F0EB41CE6 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BD2C5138C17A6A856B62D379A4C12D1 /* Foundation.framework */; }; + BBC043D6417E9997F3BD99B629C10E7E /* moduleinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45194A165F19A3023ECCEB2CA456742D /* moduleinfo.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BC2177DC7CE451AD18F2F815A421FBA5 /* FirmwareBuild.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590EE580A6D609C522FBB7D2D83F1F3 /* FirmwareBuild.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BD614830945C55AE9BFE7D80CD0688E1 /* MetaWear.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14B78E47F66C7BB1E6DA20CD54A85A4B /* MetaWear.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + BE87B6B4E7B04556419CE4A1637DEEF4 /* logging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A3BBAD43EAB96D4142D7666B9928922 /* logging.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C20D68005BC723DF51F8BD098FC7341B /* colordetector_tcs34725.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF465F76A28B3143515C18F384C09073 /* colordetector_tcs34725.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C38F2EFF094FB5B713B3FCA1AA14210C /* multichanneltemperature.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FAE9D19354AA80B8266A7A54A31DCECE /* multichanneltemperature.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C42ABAEA4DDAE4FC5776AFAC72562A4A /* conductance.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D26646F8AEC4B507432302E9A08D48C0 /* conductance.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C4C7F2E6D7CF2E59D67833C69AF4687D /* proximity_tsl2671.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 876A2BB8D0772DC29DEA9A493B6B6AF1 /* proximity_tsl2671.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C5AA0A090625FD38CF6669891F19CB87 /* MetaWear-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3F077D08170C67CC57E1655D199AD171 /* MetaWear-iOS-dummy.m */; }; + C5E0390ACB19ED47D3158CFADEC5049C /* utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 05EB1C5C06110053BF5906B362C355AB /* utils.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + C99810D894A80459FA43D10572E8C7C4 /* MetaWear-tvOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = B0CEFA6311423CCFBE7E6E78A29E99A7 /* MetaWear-tvOS-dummy.m */; }; + C9D3CDD56F0072FF03F931477E04E747 /* barometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 693352717EF35F2AEF792660257CC4F1 /* barometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CA31B2A51919A8900FBDA26FDF2FCA94 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 404137FCCF98E34A29359A6BDB0F565D /* Cocoa.framework */; }; + CA55EB2E81D9AF9B17195DA40F21B63C /* MetaBootFinder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A289BA07E505F658D8CE9EEA1D6F1BB /* MetaBootFinder.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CAE9B81CB587A0032DE0A55C30A2AF14 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC5707BBBC2BC238D1495B36C720B2D3 /* Errors.swift */; }; + CB7AD1C65CAE5EB0D6BC5F9A59DF20E5 /* ambientlight_ltr329.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C04390A32ED6007EB4F966E63E0FBDE5 /* ambientlight_ltr329.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CBF6FA683DC3FB7EE181AACA61F362B1 /* magnetometer_bmm150.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E118D5F1C09D22C0DB25BBA0350D5A31 /* magnetometer_bmm150.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CBFDBC15440AF785AFEDE9D14C15FB66 /* CoreBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A14DC32A908B09C6352731786829F092 /* CoreBluetooth.framework */; }; + CC97B980CECD0DFDD6CA9F40EE6E1D90 /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EDDF786AFD200556B2AA1E5D7B543E9C /* timer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + CF1BFB8B634FA88CB548C39D5F4D3F29 /* ScannerModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AD95C3625CEBFBEF1B885D005A07C417 /* ScannerModel.swift */; }; + CF7AC7E85FE787C026884E217CA154C2 /* async_creator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7DD014C32A513BD77C3DEB87CAEAE7F8 /* async_creator.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D00F87C833657660EABBFEA9765491EC /* colordetector_tcs34725.cpp in Sources */ = {isa = PBXBuildFile; fileRef = FF465F76A28B3143515C18F384C09073 /* colordetector_tcs34725.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D603BE82C43C0FF0BC43441451A457A4 /* responseheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3A0BB1A52FA6EAD970C666D3F598E781 /* responseheader.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D689BEA44381F262508018EE49A34986 /* Pods-Starter-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = D0C0C87FBEB87C78124F42D72921C4CA /* Pods-Starter-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + D7AFEEF71D449A6A91FAE7FC5DE597BD /* DeviceInformation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 051182652C17095A392B873BCDD487E9 /* DeviceInformation.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D86C11DF52CE5A9936E235E11C6FFADA /* accelerometer_mma8452q.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CF4406FCF209E179BD2AC06B93CA8E4E /* accelerometer_mma8452q.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + D9615341D1910D462CA6B8B8B2C216F4 /* gyro_bmi160.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B904A6AE7F408F32FF118E2851DF47B4 /* gyro_bmi160.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DA28FF858EC3EC0B7ED1CB10E8CC15B4 /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5443759FFFF9BF343BFF667A06E6EE51 /* Bridging.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DA3F350B744C33BD5A8E27AF1C6818D0 /* accelerometer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CB868C271ADD0D99C1C4A385A1A48623 /* accelerometer.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DAB2FD05EC76E13DEF4365F2E16D3FB5 /* MetaWearData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F0D01A3B7B92C9EBFA0EFB1881AFF23 /* MetaWearData.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DBA354F38D644CBA7897DF739AC0037C /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 23DC9A1994E72BE8BB7FE6D45EACE46B /* version.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + DC68ACE0D1E3FA0E3BAEE02F20E1D24F /* Task+WhenAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF344F7213D6BE97247B7AB9E5D59D9A /* Task+WhenAny.swift */; }; + DE7824D77FB9632F8824A57856FC75C2 /* Pods-Starter-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = F7106C1FC45DB0E0D978847B3902219D /* Pods-Starter-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E0BB6956AC8E8F75E4F16C246270196C /* dataprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 58EF4EC9CB055DE315985DF4AEA02181 /* dataprocessor.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E199B911B549D28B33AEBB855EAD88A4 /* gpio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0869A2B29A2A21CABF62ADF6DDB71E03 /* gpio.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E1AF0CD0888066D186AEA5922BA41AC2 /* LogDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 661656E42C39752CA90CCAE32C39B7FF /* LogDelegate.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E1BB0FEDD8C2C6D4D42257650B16DE83 /* Bridging.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5443759FFFF9BF343BFF667A06E6EE51 /* Bridging.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E1F42966FE79DCF7B0767BAD06B11EEF /* MetaWear-macOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 3A2CB2D775ED4EBD22C0A2BF365A589E /* MetaWear-macOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E3E018DD4CB7B9AAB17D73F2FA44DE0C /* Task.swift in Sources */ = {isa = PBXBuildFile; fileRef = E276DFEEBCD2D36D1990F0819B165019 /* Task.swift */; }; + E6D83A900D33C19CB6F175F6BB565A8E /* MblMwGattChar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40929D407612A74D13A8821778981AD3 /* MblMwGattChar.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E74C9B76049166213496FD948BC010DC /* FirmwareServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29931D8DBBB32F6EF417131198573486 /* FirmwareServer.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + E8C82D9C9AAC63281F3D32CC47361A81 /* MblMwEvent+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194CA0268C374020A0C47FCC1334B978 /* MblMwEvent+Async.swift */; }; + E8E0E10105BCB4FD3CCAB875D2681EFC /* FirmwareBuild.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8590EE580A6D609C522FBB7D2D83F1F3 /* FirmwareBuild.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + EA92286ADF334516D492FAF31A9DB616 /* MBProgressHUD-iOS-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 310029E0CCDD8A3A5148606444F1B1C4 /* MBProgressHUD-iOS-dummy.m */; }; + EB225BEDE5CB70EC7A03AB6C991BE0EC /* TaskCompletionSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE221359457B938A7422752010173946 /* TaskCompletionSource.swift */; }; + EB2FA25E219327C62D3640B26C9215A6 /* Task+ContinueWith.swift in Sources */ = {isa = PBXBuildFile; fileRef = A646D30D3CB45C6A3A53BD186EB0FCC3 /* Task+ContinueWith.swift */; }; + EB4F1D2BAA763F9AE33BEADC8033B194 /* led.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8C3DFB5E0AC5A7457A95A380D5713014 /* led.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + ECE41EEB88CB5FDCCAFC87D4873569A5 /* dataprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 58EF4EC9CB055DE315985DF4AEA02181 /* dataprocessor.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + EF17C7D424539599B55417410D131AC4 /* Task+WhenAny.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF344F7213D6BE97247B7AB9E5D59D9A /* Task+WhenAny.swift */; }; + F381EB33BD22CEACC717B291DA23CC2C /* ambientlight_ltr329.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C04390A32ED6007EB4F966E63E0FBDE5 /* ambientlight_ltr329.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F443F12CF4DE9F0EB92D037B53A219B7 /* MblMwEvent+Async.swift in Sources */ = {isa = PBXBuildFile; fileRef = 194CA0268C374020A0C47FCC1334B978 /* MblMwEvent+Async.swift */; }; + F7C5E4909F714AF06A2BB5D44CA7CC3E /* String+VersionCompare.swift in Sources */ = {isa = PBXBuildFile; fileRef = F25852C48E7333ED543B72384B05EF4F /* String+VersionCompare.swift */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + F89F4E47EEFB23D3CFFB114DEE475A6A /* MBProgressHUD-iOS-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 53FF9084A87E27C3A1F64D429748CC3B /* MBProgressHUD-iOS-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F8E9358B45053FEA1707208937B23C29 /* Errors.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC5707BBBC2BC238D1495B36C720B2D3 /* Errors.swift */; }; + F94EDF3F14B1DEAD3CCCE720499480F3 /* moduleinfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45194A165F19A3023ECCEB2CA456742D /* moduleinfo.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FA00D5671B5AFAB439624A9339DBEAD1 /* neopixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D58198726650027243B7558C21A0FCEC /* neopixel.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FA1DC63B536E91ADBA8F6D353B2B17A0 /* barometer_bosch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 693352717EF35F2AEF792660257CC4F1 /* barometer_bosch.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FA48B882ED106742C2D3592835BACD46 /* haptic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6819E4164206BD9EC52CB720FD418E2E /* haptic.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FACFB54045A99F069AAC8AA100923EB1 /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00DFF052541C3386369F9784EB8627D0 /* memory.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; + FAF33737CD78054A95E0B3D429DB34E9 /* MetaWear+LED.swift in Sources */ = {isa = PBXBuildFile; fileRef = C636B15978D834652B0A158570ED541B /* MetaWear+LED.swift */; }; + FF49E187067EDA057B5433EE485033DE /* miniz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 792EE243E0047B63DEB31D969D6A7A21 /* miniz.cpp */; settings = {COMPILER_FLAGS = "-Wno-documentation -Wno-comma"; }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ - 11CF2E218E46CCAE3ED723F070D70E9A /* PBXContainerItemProxy */ = { + 20BCC5CD831A1178AF1AEA4DED636CB0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = BD341F49E18D3D060A36A71E9278D5D7; - remoteInfo = "Bolts-iOS"; + remoteGlobalIDString = ED329C7FA29461934C2966993F55877D; + remoteInfo = "Bolts-Swift-macOS"; }; - 12220984601945CEE697C45D9EAB8F44 /* PBXContainerItemProxy */ = { + 25953C50C67F2120A5CCE5B4CF329862 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 4D9B457DC2D0A7DCADF739A8E0788C7A; - remoteInfo = "MetaWear-iOS"; - }; - 15192CB15A0486C73F22871285CA3DF4 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 2492E2BFC7176958B328266A5BC1A534; - remoteInfo = "Bolts-tvOS"; - }; - 15DE208E55D905FBB697C8E5CE51C491 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 721899F715C3ED9FF1C98348F4817567; - remoteInfo = "MBProgressHUD-iOS"; - }; - 1F614E8BE29E2F20407091AFBAAB2759 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = B7B1C49CEEA710F4A292314D60602E07; - remoteInfo = "Bolts-macOS"; + remoteGlobalIDString = 74D5A08CA458D0D62FA8EA0C7F810D3F; + remoteInfo = "Bolts-Swift-iOS"; }; - 2C951976B5111F24A03DA143E91BDF34 /* PBXContainerItemProxy */ = { + 25F451D83A5AB85B1B507B1D894A4C48 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E773E4C5ADD2729A88E77D8B9999761A; - remoteInfo = "FastCoding-iOS"; + remoteGlobalIDString = 93860DEA49AB0A3DE8BED027017FADD3; + remoteInfo = "Bolts-Swift-tvOS"; }; - 41B87E394DEC2D3AA980C8F03DDCAC89 /* PBXContainerItemProxy */ = { + 27B96F228D16505ECF30CBF131674B7D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 054F5C0D34A7FBCCDAD12A03CB8F61E1; - remoteInfo = "MetaWear-macOS"; + remoteGlobalIDString = FBCDB923BFEC9B087B78F572C6D26ABF; + remoteInfo = "MetaWear-iOS"; }; - 4351D094A8278F7979D5DF4BEE779429 /* PBXContainerItemProxy */ = { + 4DC3390C22A6FDA950A29AAC617F38BA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = FC67B740EA48FAF3B42E481045B53E2E; + remoteGlobalIDString = 1CF10E2AEEEB932120CC7181BD88C40C; remoteInfo = "MetaWear-tvOS"; }; - 7451BC2302D15A8B3DC48253A0630A54 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = BD341F49E18D3D060A36A71E9278D5D7; - remoteInfo = "Bolts-iOS"; - }; - 8679EB38165A6A3B0084A9366AC9FE0C /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = 6E496AE0DE14DA07A9CB5BF71633B177; - remoteInfo = "MBProgressHUD-tvOS"; - }; - 8B1181AF001FC92FFBE16D3961259C5D /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; - proxyType = 1; - remoteGlobalIDString = B7B1C49CEEA710F4A292314D60602E07; - remoteInfo = "Bolts-macOS"; - }; - 919850CFA2FF4DB26F603C71ED7CED54 /* PBXContainerItemProxy */ = { + 6A637E83CF60501123A8E9982117310E /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 78F9A65EF036F83C80909A18E9CDC417; - remoteInfo = "FastCoding-tvOS"; + remoteGlobalIDString = ED329C7FA29461934C2966993F55877D; + remoteInfo = "Bolts-Swift-macOS"; }; - 9527CF5C32663FA6D81A2BCC0EB604EA /* PBXContainerItemProxy */ = { + AE05E38E4133704EF9CF730903F1A251 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 2492E2BFC7176958B328266A5BC1A534; - remoteInfo = "Bolts-tvOS"; + remoteGlobalIDString = 74D5A08CA458D0D62FA8EA0C7F810D3F; + remoteInfo = "Bolts-Swift-iOS"; }; - 9879D8AA2FF47C33D9F82C6FC27D4D49 /* PBXContainerItemProxy */ = { + C01AFDBA21FA5E01034E7A17D9ECF0A0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 3413DD54A59A17F67D7D63397D806BD5; - remoteInfo = "FastCoding-macOS"; + remoteGlobalIDString = 93860DEA49AB0A3DE8BED027017FADD3; + remoteInfo = "Bolts-Swift-tvOS"; }; - B6E9A924C1769F970E75935AA2D32450 /* PBXContainerItemProxy */ = { + E0BDF4E7F134F9C18DFF938AC589CCBA /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 78F9A65EF036F83C80909A18E9CDC417; - remoteInfo = "FastCoding-tvOS"; + remoteGlobalIDString = E1A2C54E075045370CF68755E67F5C6F; + remoteInfo = "MetaWear-macOS"; }; - E0753342082B342D4FF6AE08D10D08B2 /* PBXContainerItemProxy */ = { + EFEB1E88BB5E991854C217479D45C420 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = E773E4C5ADD2729A88E77D8B9999761A; - remoteInfo = "FastCoding-iOS"; + remoteGlobalIDString = 721899F715C3ED9FF1C98348F4817567; + remoteInfo = "MBProgressHUD-iOS"; }; - F90F1B26FAD126A08914A4F8E46ECEC1 /* PBXContainerItemProxy */ = { + FFA7E639D9E1943C2C9CE29F2973CEC0 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = D41D8CD98F00B204E9800998ECF8427E /* Project object */; proxyType = 1; - remoteGlobalIDString = 3413DD54A59A17F67D7D63397D806BD5; - remoteInfo = "FastCoding-macOS"; + remoteGlobalIDString = 6E496AE0DE14DA07A9CB5BF71633B177; + remoteInfo = "MBProgressHUD-tvOS"; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 002DBE59B80D267B7D1174CAFA7287D5 /* MBLI2CData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLI2CData.m; sourceTree = ""; }; - 006C897194C2D2C5D9A898FA632EDE11 /* Bolts-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-iOS-umbrella.h"; sourceTree = ""; }; - 01673900EEBEFA58AA0306E3FDE7950D /* FastCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FastCoding.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 01FEC95AFD637366A6C38E82EFCA1892 /* MBLFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFormat.m; sourceTree = ""; }; - 03C3625913AA8E05E641976754F7D47D /* MBLGyroBMI160DataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160DataReadyEvent.h; sourceTree = ""; }; - 03C69BBA6C8D57F081647489D73293AA /* MBLMechanicalSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMechanicalSwitch.h; sourceTree = ""; }; - 057A9088769B19509C3B0725D9E91BC3 /* MBLAccelerometerBoschFlatEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschFlatEvent+Private.h"; sourceTree = ""; }; - 05B9CA1F026CEB6CA68B3E741811AC90 /* MBLAccelerometerFreeFallEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerFreeFallEvent.m; sourceTree = ""; }; - 05D0CDF4C71EF40611B714E487DEABF0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 062038508A0820C10A3AFACC41299093 /* MBLAccelerometerBMI160MotionEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMI160MotionEvent+Private.h"; sourceTree = ""; }; - 062D0EF82F87F37B60C685C87159AB1A /* MBLGyroBMI160AxisReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160AxisReadyEvent.h; sourceTree = ""; }; - 06D67AF6BC1F66232FB78A8FA0A5E904 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Bolts.framework; path = "Bolts-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 077F12708F74EC4300C82B7092926B2F /* Bolts-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "Bolts-tvOS.modulemap"; path = "../Bolts-tvOS/Bolts-tvOS.modulemap"; sourceTree = ""; }; - 07AD91C5A54D69D8FC1A1F1279364850 /* MBLBitmaskEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBitmaskEvent.h; sourceTree = ""; }; - 081D7D7A834CA695B5960AF3CB99F844 /* MBLAccelerometerBoschLowOrHighGEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschLowOrHighGEvent.m; sourceTree = ""; }; - 0839AC074757922706A96E05EB0C5F43 /* MBLDeviceInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDeviceInfo.h; sourceTree = ""; }; - 092C07496FB9BDB608711C9FD3FC05BC /* MBLConductance.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLConductance.h; sourceTree = ""; }; - 09AA1DECFDE20D870189DFB04ED30A79 /* MBProgressHUD-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-iOS-dummy.m"; sourceTree = ""; }; - 0B91D9E1F10A979FBA03D3D9FB595CE5 /* MBLTimer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTimer.h; sourceTree = ""; }; - 0BFED5A2B9A105DCF96490C518361A50 /* MBLEulerAngleData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEulerAngleData.h; sourceTree = ""; }; - 0E309FA5671BF963CA0BB99B55E5F6FD /* MBLGPIO+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGPIO+Private.h"; sourceTree = ""; }; - 0ED9B9C87C7D1F4D61A9B578A3CB486D /* MBLSettings.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSettings.h; sourceTree = ""; }; - 0EEE9EB301CC326AF56A548EF8E7ACD9 /* MBLNeopixelStrand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNeopixelStrand.h; sourceTree = ""; }; - 0F160C4428FBCC3B870F6B4338827F57 /* MBLEntityModule+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEntityModule+Private.h"; sourceTree = ""; }; - 10452424C154C0C85FEFD3422604FFFD /* MBLNumericData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNumericData.h; sourceTree = ""; }; - 1081563FA3CA893D64CD1D5FB19AA7ED /* MBLAccelerometerMMA8452Q+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerMMA8452Q+Private.h"; sourceTree = ""; }; - 108CC179687676A0F35B7BF2F9B51837 /* MBLAnonymousEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAnonymousEvent.m; sourceTree = ""; }; - 10EB41F7758F64A177CEB295D4CB8A07 /* MetaWear-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-tvOS-umbrella.h"; path = "../MetaWear-tvOS/MetaWear-tvOS-umbrella.h"; sourceTree = ""; }; - 10FD2A19A75CE29E07394D16F34BB579 /* MBLMetaWearManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMetaWearManager.m; sourceTree = ""; }; - 1397B8415354E57CA0415FD804EAA630 /* MBLStringData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLStringData.h; sourceTree = ""; }; - 1400A5025F05B757164F1B37F6B10126 /* Pods-Starter-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Starter-macOS-dummy.m"; sourceTree = ""; }; - 140A6FD0A1728237B3A0F5B8A592FE01 /* FastCoding-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding-macOS-umbrella.h"; path = "../FastCoding-macOS/FastCoding-macOS-umbrella.h"; sourceTree = ""; }; - 142C53373C506F66B3EC567CC1B46EC9 /* MBLMagnetometerBMM150Format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerBMM150Format.h; sourceTree = ""; }; - 14B6A31958CC8C516388975A773C8697 /* MBLMagnetometerData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerData.h; sourceTree = ""; }; - 152E66FF201A94616AFB7BD1F2FF05A6 /* MBLBarometerBME280.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBME280.h; sourceTree = ""; }; - 17235EF49A060133B6160184A954CF3B /* MBLProximity.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLProximity.h; sourceTree = ""; }; - 172B2675C3FBB4FF57CCDD5C0451961E /* MBLNumericFormatter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNumericFormatter.h; sourceTree = ""; }; - 172FA2D73597B91F0A83B07FB8E84F95 /* MBLAccelerometerMMA8452QOrientationFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerMMA8452QOrientationFormat.m; sourceTree = ""; }; - 174A108EC154260C6B810F2E28AB7C05 /* MBLDeviceInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDeviceInfo.m; sourceTree = ""; }; - 17E20328641E5D9CA09CBBE5F5468A0B /* MBLMagnetometerBMM150.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150.m; sourceTree = ""; }; - 18AA1285865F5EFEA7063678C325141C /* MBLLoggingV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLoggingV1.h; sourceTree = ""; }; - 18F4949F05143440EECC7F57B33495EC /* MBLRMSAccelerometerData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLRMSAccelerometerData.m; sourceTree = ""; }; - 196D9D18E35492ADFBF51545803C2917 /* MBLGPIOPin.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIOPin.m; sourceTree = ""; }; - 19B4F38DF1F6E05EAECE968DE93EB673 /* MBLBarometerBoschPeriodicPressureEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBoschPeriodicPressureEvent.m; sourceTree = ""; }; - 19E1E8CEA308C7ED9F28151A953C1AD6 /* MBLAccelerometerBoschDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschDataReadyEvent.m; sourceTree = ""; }; - 1A1BBDE1DD563096720D8D866FF4DB4F /* MBLMetaWearManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMetaWearManager.h; sourceTree = ""; }; - 1B7709B9EB9C483D9E88C039097AC7B6 /* MBLGPIOData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIOData.h; sourceTree = ""; }; - 1C0572D9E03034C6B04220BC00D04F3A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - 1CAB43AFA14E6743D3CD8FF5966D300C /* Pods-Starter-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Starter-macOS-acknowledgements.plist"; sourceTree = ""; }; - 1DDD97C3A93E68B36B0E06C919325676 /* Pods-Starter-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-iOS-frameworks.sh"; sourceTree = ""; }; - 1E607E00E745BA5868FC8C3BE81F2CDA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 1F3E02924944EC129D9F55288F3C097B /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Bolts.framework; path = "Bolts-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 207BFB192A72F39904B415B8A2423B7D /* MBLAccelerometerBMA255MotionEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMA255MotionEvent+Private.h"; sourceTree = ""; }; - 21179FBE2B09479626B5CEEEF9C6EA7A /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 215731CFCD0FCFDD822DED5785C4FEAA /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; - 216CA4A8C0A271848E6893ADE6FC1FB9 /* FastCoding-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FastCoding-macOS-dummy.m"; path = "../FastCoding-macOS/FastCoding-macOS-dummy.m"; sourceTree = ""; }; - 227DD8EB5493B11D84B1611388D7B876 /* MBLAccelerometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometer+Private.h"; sourceTree = ""; }; - 22A04A37C49AAF2FBC39F33DF7915A35 /* MBLGPIOData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIOData.m; sourceTree = ""; }; - 23916678C67AC667410DAAECAFDBFA2F /* MBLAccelerometerBoschDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschDataReadyEvent.h; sourceTree = ""; }; - 23AA82CBCF671572A6EDE8C4D2B334FE /* MBLAccelerometerBMA255MotionEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMA255MotionEvent.h; sourceTree = ""; }; - 23C7F2C4631BE97E6D0C65409A5C18AA /* MBLSettings.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLSettings.m; sourceTree = ""; }; - 23D4B75048CEA0D5AB05EAB2BD22D828 /* MBLAccelerometerBoschFlatFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFlatFormat.m; sourceTree = ""; }; - 24D72AD39D3634D27DC081E4D87585BA /* MBLMagnetometerData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerData.m; sourceTree = ""; }; - 26436F719298208FEF75335BA19CD0DA /* MetaWear.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MetaWear.h; sourceTree = ""; }; - 268C80524B2B2E30FEBB681C265CA05A /* MBLMetaWear+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMetaWear+Private.h"; sourceTree = ""; }; - 26CEBBC64B3CD581EDBDD36BEA97A66F /* Pods-Starter-tvOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-tvOS-resources.sh"; sourceTree = ""; }; - 26FFF7A3BA272EB3749B82156C18E549 /* MBLDataProcessor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDataProcessor.h; sourceTree = ""; }; - 2760600C17CE3E9ED9744899937B5799 /* MBLDownloadOnlyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDownloadOnlyEvent.m; sourceTree = ""; }; - 27D538183C93B57AD8A146CA64198676 /* BFCancellationToken.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationToken.h; path = Bolts/Common/BFCancellationToken.h; sourceTree = ""; }; - 281F942BD483B5AA0F5F85DD304B6613 /* MBLConversion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConversion.m; sourceTree = ""; }; - 2898667AC2BA44EB8D37A942DF34372F /* Bolts-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-tvOS-dummy.m"; path = "../Bolts-tvOS/Bolts-tvOS-dummy.m"; sourceTree = ""; }; - 289EFCFE9074EB09D61042A67F1CB9AC /* MBLAccelerometerBoschFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFormat.h; sourceTree = ""; }; - 29215526A5413BB1A1A9E46FA68490BA /* MBLI2C.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLI2C.m; sourceTree = ""; }; - 29A06566DFD36AD873A449282791F5BA /* MBLCommand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLCommand.m; sourceTree = ""; }; - 2AD0CE2FF96D7D91B4C7D4AFCFE078B9 /* MBLCategoryLoader.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLCategoryLoader.m; sourceTree = ""; }; - 2B29669E68D153C6F0836018F0E43715 /* MBLQuaternionData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLQuaternionData+Private.h"; sourceTree = ""; }; - 2B41BD2516D0E1067E35C0C6FDDD503E /* MetaWear-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "MetaWear-macOS.modulemap"; path = "../MetaWear-macOS/MetaWear-macOS.modulemap"; sourceTree = ""; }; - 2BACD2DA7C2B8550742703BBDAC9D3E9 /* MBLBarometerBosch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBosch.m; sourceTree = ""; }; - 2C1F14222E245444E2244484CB57521B /* BFTask+Exceptions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "BFTask+Exceptions.m"; path = "Bolts/Common/BFTask+Exceptions.m"; sourceTree = ""; }; - 2C36465A5F194D2A078B19C566482E5F /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 2D165D933792FAC7CD7E487418BA0372 /* MBLOrientationData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLOrientationData.h; sourceTree = ""; }; - 2E006E0231DC90761DDF2F055756ED21 /* MBLData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLData.h; sourceTree = ""; }; - 2E2B5EE129D83B149A06CCA4B37C894D /* MBLANCSEventData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLANCSEventData.m; sourceTree = ""; }; - 2E83CC37D40B85A98BBE1BD141F7CDF8 /* MBLAccelerometerMMA8452QOrientationFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerMMA8452QOrientationFormat.h; sourceTree = ""; }; - 2EDC16351CD877ED89AE173D8F142AE7 /* MBLHapticBuzzer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLHapticBuzzer.h; sourceTree = ""; }; - 2F55C51DAE936C836EF541084E24B60E /* MBLFilter+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLFilter+Private.h"; sourceTree = ""; }; - 2FF21602304B9BDD767C7D52A9274044 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bolts.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 305C1893654B1DF8D8533B49A105F27C /* MBLAccelerometerPackedDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerPackedDataReadyEvent.m; sourceTree = ""; }; - 33D764F5B99B1EC4BE551C6C7B35BCC7 /* MBLAccelerometerBMI160.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMI160.m; sourceTree = ""; }; - 33FCF62EE29EAEB61B0798123DACA455 /* MBLMovingAverage.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMovingAverage.m; sourceTree = ""; }; - 34E952C0E11A49FB361052072B6AE106 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; - 3507E4FF13655A7B8DC112BD3212D44E /* BFCancellationTokenSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenSource.h; path = Bolts/Common/BFCancellationTokenSource.h; sourceTree = ""; }; - 361ED24982D138D7DE2FB8AB055756C5 /* MBLAccelerometerBMI160MotionEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMI160MotionEvent.m; sourceTree = ""; }; - 36CFA9BC089864F62BB20CEAA33C1823 /* MBLSPIData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSPIData.h; sourceTree = ""; }; - 36F4A7346858E41F01D1A230D24B25A6 /* MBLGPIO.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIO.h; sourceTree = ""; }; - 370BDE5254786592F755411B3CEB8C1B /* MBLCommand.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLCommand.h; sourceTree = ""; }; - 379385238BD2CE20DA91AB120E2530B9 /* MBLMacAddressFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMacAddressFormat.h; sourceTree = ""; }; - 37D9E3818565F54B062AAA959D79DECD /* MBLGyroBMI160AxisReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160AxisReadyEvent.m; sourceTree = ""; }; - 399DB060F7BC7DA67868EB5F087FF658 /* Pods-Starter-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-macOS.debug.xcconfig"; sourceTree = ""; }; - 39D447E44BF7D2891CCCC9A36CEBAA97 /* MBLPhotometerTCS3472.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLPhotometerTCS3472.m; sourceTree = ""; }; - 3A778268E49E66EBB45C0785412E1303 /* MBLExternalThermistor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLExternalThermistor.h; sourceTree = ""; }; - 3B00B1B667709822576FBFD9DDAB1218 /* MBLModuleMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLModuleMock.m; sourceTree = ""; }; - 3D3B1079CB81F95D3D37E4E8FC2FBFF9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 3E2A68EACC91CAAC95762EC992300966 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h; sourceTree = ""; }; - 3E6279DDBA7C4A8EF8080CAB21F48472 /* MBLDispatchQueue.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDispatchQueue.h; sourceTree = ""; }; - 3ECE22CD2A3739824E6A6A6A9BD7DD4D /* Pods_Starter_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Starter_macOS.framework; path = "Pods-Starter-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 3FE649F56CC2D2EDD1177FA9BF749833 /* MBLConductanceData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLConductanceData.h; sourceTree = ""; }; - 408F8120EB62C2BAA6448622136747A1 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m; sourceTree = ""; }; - 414435389F012CBF6D41D5242CF5FDE3 /* MBLNeopixel+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLNeopixel+Private.h"; sourceTree = ""; }; - 41D4C40BFB8F6904AB91AFDE99FBF1BA /* MBLDispatchQueue.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDispatchQueue.m; sourceTree = ""; }; - 42BDD5845FC5E5B3328CA4C38F0C62A6 /* FastCoding-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "FastCoding-tvOS-dummy.m"; path = "../FastCoding-tvOS/FastCoding-tvOS-dummy.m"; sourceTree = ""; }; - 42C5DFD9D0B808866C0C22532B0D36CB /* MBLTriggeredRead.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTriggeredRead.h; sourceTree = ""; }; - 432403714E611FF7BE6154CE961F4250 /* MBLBluetoothCentral.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothCentral.h; sourceTree = ""; }; - 43AD4735DDB0C827E61EAD3079BF9F48 /* MBLGPIOPinChangeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIOPinChangeEvent.h; sourceTree = ""; }; - 43D3E04CB05CB608FC44EF00F5EE1102 /* MBLAccelerometerBoschFlatData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFlatData.h; sourceTree = ""; }; - 43EC651AD6884803BBFB322510BBBD27 /* FastCoding-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding-tvOS-umbrella.h"; path = "../FastCoding-tvOS/FastCoding-tvOS-umbrella.h"; sourceTree = ""; }; - 4521EBEC23752425A390EBF45A68D602 /* MetaWear-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWear-tvOS-dummy.m"; path = "../MetaWear-tvOS/MetaWear-tvOS-dummy.m"; sourceTree = ""; }; - 4561FB74CFACF04C35AB74288309BE32 /* MBLGyro+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGyro+Private.h"; sourceTree = ""; }; - 45BA09FA60F45842A6A076016F5ECE19 /* MBLProximityTSL2671.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLProximityTSL2671.h; sourceTree = ""; }; - 4646EED1655B7225F08B814330EC1A7C /* MBLAccelerometerData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerData+Private.h"; sourceTree = ""; }; - 46F9B5878353B2CEB823288FD049270F /* Bolts-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-tvOS-umbrella.h"; path = "../Bolts-tvOS/Bolts-tvOS-umbrella.h"; sourceTree = ""; }; - 47980C0F2A6A1229368779FA3439FFD8 /* MBLSensorFusion.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLSensorFusion.m; sourceTree = ""; }; - 47EB7E96479ED8478F088E850DCCB33C /* MBLAmbientLight+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAmbientLight+Private.h"; sourceTree = ""; }; - 4853B460AC430BFA9730645F8BE6853D /* BFCancellationTokenSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenSource.m; path = Bolts/Common/BFCancellationTokenSource.m; sourceTree = ""; }; - 48D912392D707BDDED8B8F4DFFB44115 /* FastCoding-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "FastCoding-iOS-dummy.m"; sourceTree = ""; }; - 4A1C20C69C1F11101F8A5AEA7CC3BCFD /* MBLAccelerometerBMA255MotionEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMA255MotionEvent.m; sourceTree = ""; }; - 4BF58587D0E4D84D2A2CAD8A2E5B3F43 /* MBLPhotometerTCS3472Format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLPhotometerTCS3472Format.h; sourceTree = ""; }; - 4CBA7A8D3F3F5E56E70FB807A8BCE453 /* MBProgressHUD-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MBProgressHUD-iOS.xcconfig"; sourceTree = ""; }; - 4E70541502FE1B4EEC651594FB6737C1 /* MBLTestDebug.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTestDebug.h; sourceTree = ""; }; - 4EAD9DEE69ECAFAEAFE644683B2694CD /* MBLConstants.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConstants.m; sourceTree = ""; }; - 4EC2943E836CD606400565A7AF876E42 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-macOS/Info.plist"; sourceTree = ""; }; - 4EE1B00B5579325E44B4DED36CD9BA05 /* MBLAnonymousEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAnonymousEvent.h; sourceTree = ""; }; - 4F138D366CF5295E4813996DDBB5E8A9 /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; - 4F5712A92A2039700975BCEC60516F2A /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; - 504242EFAD31C868C2B5F8AC3471669D /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MetaWear.framework; path = "MetaWear-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 5089205E311AC48EC0142FEB779F9337 /* MBLAccelerometerBMA255+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMA255+Private.h"; sourceTree = ""; }; - 52B7C1BF89D1729EB27F1B94086AF8E4 /* MBLLED.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLED.h; sourceTree = ""; }; - 52B98D79F80CCB0DF0D3549529A16F8F /* MBLAmbientLight.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAmbientLight.m; sourceTree = ""; }; - 533C556DA7434A78A2661C6C9D58B4B3 /* bmi160.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = bmi160.h; sourceTree = ""; }; - 546CD238C0E754C135E34A9112607EDB /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; - 54C51D0FDECC9EF2A48A0AA5B4642A42 /* MBLExternalThermistor1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLExternalThermistor1.m; sourceTree = ""; }; - 54E13DFD9F8B34FA4B720005DC6E6BAD /* MBLAccelerometerBoschRMSFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschRMSFormat.m; sourceTree = ""; }; - 54F14BC835BED9B7143848F9E2E659E7 /* MBLMetaWearManager+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMetaWearManager+Private.h"; sourceTree = ""; }; - 55E7A40F99505A0B7B1F6E140808CFE7 /* MBLFirmwareBuild.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFirmwareBuild.h; sourceTree = ""; }; - 55FAB9391ACF241B471A12CD95470629 /* MBProgressHUD-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MBProgressHUD-tvOS.xcconfig"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS.xcconfig"; sourceTree = ""; }; - 56399F53F95874236906C93F8990D7D4 /* MBLExternalThermistor0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLExternalThermistor0.h; sourceTree = ""; }; - 565651CEC978D90131FF34714B7313F5 /* MBLFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFormat.h; sourceTree = ""; }; - 568592B0D644EB12F7886E0BC67E6EF3 /* MBLData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLData.m; sourceTree = ""; }; - 56C89D7E66B301BD38A7BEF9EFDE1766 /* MBLPhotometerTCS3472Format.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLPhotometerTCS3472Format.m; sourceTree = ""; }; - 56CF8DD02BEFD38F8B3A67A5070F0229 /* MBLAccelerometerBMI160+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBMI160+Private.h"; sourceTree = ""; }; - 56EA971154A82E2F2D963F1F73C9DE35 /* MBLRGBData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLRGBData.m; sourceTree = ""; }; - 57145DDED2FD1272A4C456956BBE679D /* Pods-Starter-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-macOS.release.xcconfig"; sourceTree = ""; }; - 594D339B971E1A22541A55D46D2A0010 /* MBLEntityModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEntityModule.h; sourceTree = ""; }; - 595150EE7F64D8A9B4418FE04A0F711B /* MBLOnDieTemperature0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLOnDieTemperature0.m; sourceTree = ""; }; - 5A01A4D7F336CD0F0E9091B7CC6B9648 /* MBLExternalThermistor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLExternalThermistor.m; sourceTree = ""; }; - 5A057B248B30330E56EE400E14A8C4D3 /* MBLAccelerometerBMI160.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMI160.h; sourceTree = ""; }; - 5B1E68856F19F80FD47414AA57EFEE18 /* MBLPhotometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLPhotometer.m; sourceTree = ""; }; - 5D41A7D85DBDE32F7AA827BE427338BC /* MBLANCS.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLANCS.h; sourceTree = ""; }; - 5DC946709FD1C2A947BD1E3A79A18E21 /* MBLMockPeripheralFactory.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMockPeripheralFactory.m; sourceTree = ""; }; - 5F28356CD97B4D4F9AC990968B2EB496 /* MetaWear-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "MetaWear-tvOS.modulemap"; path = "../MetaWear-tvOS/MetaWear-tvOS.modulemap"; sourceTree = ""; }; - 5F4530EAE9B7DD9CFBFC2D0514B7E8A5 /* MBLAccelerometerDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerDataReadyEvent.h; sourceTree = ""; }; - 5FEE54F150DA612584E712A898EFEFC7 /* MBLGyroBMI160.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160.m; sourceTree = ""; }; - 6017B957E6C2CA4CF3F4D7052EDB2C39 /* MBLEulerFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEulerFormat.h; sourceTree = ""; }; - 606EB73B59EF05A3719E7D85B32CE998 /* MBLBluetoothPeripheralMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBluetoothPeripheralMock.m; sourceTree = ""; }; - 610A24A199D5AD64DBB7279794C620F5 /* MBLMacro.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMacro.m; sourceTree = ""; }; - 61152A5CDDEEAAF44A4E3E9AA01F1C5B /* MBLHygrometerBME280.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLHygrometerBME280.m; sourceTree = ""; }; - 61BCBD52E7383CADF427953727B943A7 /* MBLGyroData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroData.h; sourceTree = ""; }; - 6259021266C0186D832790E6BADA3B3F /* MBLDataSample+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLDataSample+Private.h"; sourceTree = ""; }; - 640013670E530E919FB4A9E04E8E67EC /* MBLAnonymousEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAnonymousEvent+Private.h"; sourceTree = ""; }; - 643206EAE8399B4005F420D6E8BA9FC5 /* MBLBluetoothCentralMock.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBluetoothCentralMock.m; sourceTree = ""; }; - 650639AB0823B2C98626B8A130A09A8B /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = "MBProgressHUD-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 6509C8C65CA28F032A641699AEFF71CE /* MBLEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEvent.h; sourceTree = ""; }; - 65100B32123F844FC52882C8AD36BA4D /* BFExecutor.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFExecutor.h; path = Bolts/Common/BFExecutor.h; sourceTree = ""; }; - 656F14665616943F45AC63474738055B /* MBLiBeacon.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLiBeacon.h; sourceTree = ""; }; - 6658DCB0C8125070E497B535C99E441D /* MBLTemperatureV0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTemperatureV0.h; sourceTree = ""; }; - 665A6DBDD2A12E5E75F90AE098EFE51C /* MBLAccelerometerDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerDataReadyEvent.m; sourceTree = ""; }; - 667FE6FDD9DCB968C5507339B636F7D2 /* MBLAmbientLightLTR329.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAmbientLightLTR329.h; sourceTree = ""; }; - 67D893CCA5B27FC3A243227DEA8245B4 /* Pods-Starter-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Starter-iOS-acknowledgements.plist"; sourceTree = ""; }; - 67F6AC2B4EE64E3C482E8A0A3E11B5B3 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../FastCoding-tvOS/Info.plist"; sourceTree = ""; }; - 6821E56C1E7FF7715251DC8A23A477ED /* MBLLogger.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLogger.h; sourceTree = ""; }; - 68DE5C7D386B404E7F358B802F49E21B /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../FastCoding-macOS/Info.plist"; sourceTree = ""; }; - 6941B5A6AA94E0B5B46B122C660F520B /* MBLMagnetometerBMM150.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerBMM150.h; sourceTree = ""; }; - 69E8EDA556DC202BAF516AD2B7C1430D /* Bolts-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-macOS-dummy.m"; path = "../Bolts-macOS/Bolts-macOS-dummy.m"; sourceTree = ""; }; - 69F1D92E6B0195B84FE57CEC17068B37 /* MBLEntityEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEntityEvent.m; sourceTree = ""; }; - 6A09B9551AFC5485496792EA6EA76F4F /* MBProgressHUD-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "MBProgressHUD-iOS.modulemap"; sourceTree = ""; }; - 6A798DDB18A3E28FD00125FCEE626FA1 /* MBLProximityTSL2671.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLProximityTSL2671.m; sourceTree = ""; }; - 6AB0A30D75B2F089043CF05965D6BF48 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MetaWear.framework; path = "MetaWear-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 6AEA3DB7669D552F1CDEB1736406B693 /* Pods-Starter-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Starter-tvOS-acknowledgements.plist"; sourceTree = ""; }; - 6C3404044E5FB4BFCD394402734D9944 /* MBLStringData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLStringData+Private.h"; sourceTree = ""; }; - 6D0B4E08EB6E5B60BF5E9E9684A51F92 /* FastCoding-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "FastCoding-iOS.modulemap"; sourceTree = ""; }; - 6D5B7CB99D2B0CDC0A260E478493EF8D /* MBLAccelerometerMMA8452QRMSFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerMMA8452QRMSFormat.m; sourceTree = ""; }; - 6DB01C6F682F5A01DBF66F2B08662B46 /* MBLConstants+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLConstants+Private.h"; sourceTree = ""; }; - 6DCCCD6B06E374DB287F0B2BA79751C3 /* MBLEntityEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLEntityEvent.h; sourceTree = ""; }; - 6DDF8C838AC5CDC445B42F979FBDAC51 /* MBLRegister.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLRegister.h; sourceTree = ""; }; - 6DE51A6F1F172F26196BE2B7A8654EE5 /* BFExecutor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFExecutor.m; path = Bolts/Common/BFExecutor.m; sourceTree = ""; }; - 6E22884E5F6DA9B9A89D2C29802514C8 /* MBLMagnetometerBMM150Format.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150Format.m; sourceTree = ""; }; - 6E2D750942D679B66CAEEF61EEB60716 /* MBLAccelerometerData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerData.m; sourceTree = ""; }; - 6F1054E76077AB99235D202A108B4CFD /* FastCoding-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "FastCoding-iOS.xcconfig"; sourceTree = ""; }; - 704061BDD1CE1F0A43981744793667D1 /* MetaWear-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWear-macOS-dummy.m"; path = "../MetaWear-macOS/MetaWear-macOS-dummy.m"; sourceTree = ""; }; - 70E64A8656740E9F81CDE4AD4F91A637 /* Pods-Starter-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Starter-tvOS-acknowledgements.markdown"; sourceTree = ""; }; - 711867FC17C52947DB12572824DB5C26 /* MBLGyro.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyro.m; sourceTree = ""; }; - 712EC74376C3B9D41C7513E65B5619E1 /* MetaWear-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-macOS-prefix.pch"; path = "../MetaWear-macOS/MetaWear-macOS-prefix.pch"; sourceTree = ""; }; - 71D482429392C19BF45BE60346D6986E /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschLowOrHighGEvent+Private.h"; sourceTree = ""; }; - 71F3674C7728465F6E2F69D1B3047D78 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MBProgressHUD.framework; path = "MBProgressHUD-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 71F922D5EDD1533F98709ED495FF5D13 /* BFTaskCompletionSource.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTaskCompletionSource.m; path = Bolts/Common/BFTaskCompletionSource.m; sourceTree = ""; }; - 72F465BA476651D387919A8222A795CE /* BFTask+MBLPrivate.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BFTask+MBLPrivate.m"; sourceTree = ""; }; - 73232EE235678E12A8D3D2A1E3D6C1D4 /* MBLHygrometerBME280PeriodicHumidityEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLHygrometerBME280PeriodicHumidityEvent.m; sourceTree = ""; }; - 7363ED845F28AB97287B35E39CCDC238 /* BFTask.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFTask.m; path = Bolts/Common/BFTask.m; sourceTree = ""; }; - 73DE0D5505D394B9DC4A462D05EFA0E1 /* MBLTemperature.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTemperature.m; sourceTree = ""; }; - 75AF7D9B0330B805F7A4C347639CF709 /* MBLAccelerometerTapEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerTapEvent.h; sourceTree = ""; }; - 76D3C5C522E631CD62211B6A10A59906 /* MBLTemperatureV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTemperatureV1.m; sourceTree = ""; }; - 76F8C887105E275BC127772DDBBDC260 /* MetaWear-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-macOS-umbrella.h"; path = "../MetaWear-macOS/MetaWear-macOS-umbrella.h"; sourceTree = ""; }; - 77690A4A4C5A42B5BC6EFC98D6900C6E /* MBLGyroBMI160Format.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160Format.h; sourceTree = ""; }; - 78030F79F4006EBC9A9775B4C18D8A0B /* MBProgressHUD-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "MBProgressHUD-tvOS.modulemap"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; sourceTree = ""; }; - 78645BA6A31BDB069A935A83150F934A /* MBLSettings+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLSettings+Private.h"; sourceTree = ""; }; - 7A26B9116DB8E62C6D25B45482B11FBE /* MBLSensorFusion+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLSensorFusion+Private.h"; sourceTree = ""; }; - 7A332C200F72820570A10F894CE18588 /* Bolts.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = Bolts.m; path = Bolts/Common/Bolts.m; sourceTree = ""; }; - 7AB01530A4D412313CD65CD892515E4F /* MBLDataSample.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDataSample.m; sourceTree = ""; }; - 7AC208DBD093028F1D1CB58E10BE97A7 /* FastCoding-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FastCoding-iOS-umbrella.h"; sourceTree = ""; }; - 7BCAB87B93748180D874EBBE46884B60 /* MBLBarometerBosch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBosch.h; sourceTree = ""; }; - 7C6592206EB75A22347BB84A8FEAC992 /* MBLLED+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLLED+Private.h"; sourceTree = ""; }; - 7CAE92F1F49B9AECE922BB817092AD0D /* MBLPhotometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLPhotometer+Private.h"; sourceTree = ""; }; - 7D46242C19F48BEE2D15792861D2EFDF /* MBLAccelerometerShakeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerShakeEvent.m; sourceTree = ""; }; - 7D7675FCA4D3B0BA8ADFA92394085D93 /* Bolts-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-macOS-umbrella.h"; path = "../Bolts-macOS/Bolts-macOS-umbrella.h"; sourceTree = ""; }; - 7DE5DB293EAAAC3B450A32C1015827C3 /* MBLProximity.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLProximity.m; sourceTree = ""; }; - 7E68EFDC8F33DFEE31DCCD67A3433E41 /* Pods-Starter-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Starter-iOS.modulemap"; sourceTree = ""; }; - 7E76E9526511D8A62A483D3CD1939B81 /* BFTask+Exceptions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "BFTask+Exceptions.h"; path = "Bolts/Common/BFTask+Exceptions.h"; sourceTree = ""; }; - 7EACF36CC75B1953FD7F7A4F613CC43C /* MBLOnDieTemperature0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLOnDieTemperature0.h; sourceTree = ""; }; - 7EF2EA215EA3A7BCF71F5CABA0454879 /* BFCancellationToken.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationToken.m; path = Bolts/Common/BFCancellationToken.m; sourceTree = ""; }; - 7F279045200258D9DDA4C0C786D212CB /* FastCoding-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "FastCoding-macOS.xcconfig"; path = "../FastCoding-macOS/FastCoding-macOS.xcconfig"; sourceTree = ""; }; - 7F865DC2E67227DAA5EE2F439D5387DA /* MBLBitmaskEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBitmaskEvent.m; sourceTree = ""; }; - 7FE4B12F90174C821CF8462ECFA4E9F5 /* MBLBarometerBoschPeriodicPressureEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBoschPeriodicPressureEvent.h; sourceTree = ""; }; - 8054F93E6D42DC6A34994588A10AE395 /* MBLExternalThermistor1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLExternalThermistor1.h; sourceTree = ""; }; - 82CE7DAC5F60556447508756C4E8F51D /* MBLAmbientLight.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAmbientLight.h; sourceTree = ""; }; - 843FE79A8036CA75D2F7C49DE6F61E82 /* MBLANCSEventData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLANCSEventData.h; sourceTree = ""; }; - 8453DB9F88A660F88AB6F94B999E98B6 /* MBLNeopixel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNeopixel.h; sourceTree = ""; }; - 863E9035951E1AF3B90CAA3ADF4DACA4 /* MBLRMSAccelerometerData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLRMSAccelerometerData.h; sourceTree = ""; }; - 86B76EF451B2C9BD1FC4B6483ECB68C1 /* MBLMagnetometerBMM150+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMagnetometerBMM150+Private.h"; sourceTree = ""; }; - 86E1D090FC147E56789D44771ED27CC8 /* MBLDeviceLookup.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDeviceLookup.m; sourceTree = ""; }; - 877A0281064E5ABD387EB419547FF2EC /* MBLHygrometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLHygrometer.h; sourceTree = ""; }; - 88B28ABD0EEC5DEB324BECFFE15D7923 /* MBLHapticBuzzer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLHapticBuzzer.m; sourceTree = ""; }; - 894D6BDD300D1CB977B5359F8DEC8F8F /* Pods-Starter-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Starter-tvOS-umbrella.h"; sourceTree = ""; }; - 89C6814E8BAF16FCCDF8F0FC61F3269E /* MBLAccelerometerShakeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerShakeEvent.h; sourceTree = ""; }; - 89D1CC714D0CFD616B98573800172072 /* MBLMagnetometerData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMagnetometerData+Private.h"; sourceTree = ""; }; - 8A1A7139C699D05C359780845610FB22 /* MBLNumericFormatter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNumericFormatter.m; sourceTree = ""; }; - 8B28F1EEDA9589A5FC21B048F7EF453B /* Pods-Starter-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-macOS-frameworks.sh"; sourceTree = ""; }; - 8B73C063AF59387AEB21A691DC36720D /* MBLGPIOPin.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGPIOPin.h; sourceTree = ""; }; - 8BC53B897A44999CB03BA61BA63679CA /* FastCoding-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "FastCoding-macOS.modulemap"; path = "../FastCoding-macOS/FastCoding-macOS.modulemap"; sourceTree = ""; }; - 8BEDBB7E24ED6EAA39173671F4ED72C2 /* MBLAccelerometerBMA255.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMA255.m; sourceTree = ""; }; - 8C1F1308812099E58753AEE34BA7BB55 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; - 8C87D4B1154726524489C5C7578D42A9 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWear-tvOS/Info.plist"; sourceTree = ""; }; - 8CECC196826DFE764A258D986CDA3D2C /* MBLOrientationData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLOrientationData+Private.h"; sourceTree = ""; }; - 8D055002FFB17C8EFDD48660E35E6005 /* MBLEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEvent+Private.h"; sourceTree = ""; }; - 8D102AFADD707A32746A67B9AD40758B /* MBLMacro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMacro.h; sourceTree = ""; }; - 8D8062A60FDD5F2D81372764F8C172A3 /* MBLTemperatureV1.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTemperatureV1.h; sourceTree = ""; }; - 8DC83C9C0A5911866D9E26B2D0A42AC0 /* MBLLoggingV1.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLoggingV1.m; sourceTree = ""; }; - 8DF053DB4547F302D14EB63AC2D1BCA6 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 8F44FE55A5E98E6D8AC3E760780EF5E2 /* MBLMockUtils.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMockUtils.h; sourceTree = ""; }; - 8FA332BC5B6F138322F4B9673FD69B78 /* Bolts-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-tvOS-prefix.pch"; path = "../Bolts-tvOS/Bolts-tvOS-prefix.pch"; sourceTree = ""; }; - 8FA854A9B3FBED4784EE1CB16D572BD4 /* MBLAnalytics.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAnalytics.m; sourceTree = ""; }; - 903BBAC1CBE28E72767F13680C7D7260 /* MBLAccelerometerBoschOrientationEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschOrientationEvent.m; sourceTree = ""; }; - 9046915089B8C866F632E74C372B90F6 /* MBLMacAddressFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMacAddressFormat.m; sourceTree = ""; }; - 90AFDBD7957D024861737BBC4197DA9F /* MBProgressHUD-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MBProgressHUD-tvOS-dummy.m"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS-dummy.m"; sourceTree = ""; }; - 90C9B7E48E79010F255AE5D6ED3F90CA /* MetaWear-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MetaWear-iOS-umbrella.h"; sourceTree = ""; }; - 9196F6CF5B00156F9536837A4F00B8DA /* MBLMagnetometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLMagnetometer+Private.h"; sourceTree = ""; }; - 919D35A89E71B8F6775DA7BEA072A0B9 /* Bolts-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-macOS.xcconfig"; path = "../Bolts-macOS/Bolts-macOS.xcconfig"; sourceTree = ""; }; - 91BAE67E444C7034D747E48A7F4A4F47 /* MBLDependentData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDependentData.m; sourceTree = ""; }; - 9203157C9B5F34C2D630EC2DCAAA7A63 /* MBLBarometerBMP280.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBMP280.m; sourceTree = ""; }; - 9305641039886B57EA88E02E7D780CCD /* MBLDataSwitch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDataSwitch.h; sourceTree = ""; }; - 93345218814D92BAF1F110638E52FB97 /* FastCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FastCoding.framework; path = "FastCoding-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; - 9404ACA56CB19BDDA6AA900FBDA9A317 /* MBLSerial.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLSerial.m; sourceTree = ""; }; - 9411060398DF728E2336B402749A6090 /* MBLLogger.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLogger.m; sourceTree = ""; }; - 95088C502078D0A9B296CB2A3242C699 /* MBLHygrometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLHygrometer+Private.h"; sourceTree = ""; }; - 959AB88023DAC11C162E060851EAF248 /* MBLBluetoothPeripheral.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothPeripheral.h; sourceTree = ""; }; - 95C08C954E0D8EF805456D25B2423138 /* MetaWear-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWear-tvOS.xcconfig"; path = "../MetaWear-tvOS/MetaWear-tvOS.xcconfig"; sourceTree = ""; }; - 96B8D190364D91B2BB0B5EFE96C91EA2 /* BFTask.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTask.h; path = Bolts/Common/BFTask.h; sourceTree = ""; }; - 973C3CCB59EC1DD82ECF015EC4E4CCAA /* MBLNonVolatileState.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLNonVolatileState.h; sourceTree = ""; }; - 9784BDE57BF76980AD5F9EE5A90E6E6B /* BFTaskCompletionSource.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFTaskCompletionSource.h; path = Bolts/Common/BFTaskCompletionSource.h; sourceTree = ""; }; - 981644CDA9C010F4972FAA55611E3E3B /* MBLOrientationData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLOrientationData.m; sourceTree = ""; }; - 9911EE11BDD37E8BC3F8EB29158E0C76 /* MBLFilter.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFilter.m; sourceTree = ""; }; - 998B663E822CF022104FFFFC53613FC0 /* MBLMockPeripheralFactory.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMockPeripheralFactory.h; sourceTree = ""; }; - 999B80E344EA0797D0E594D2D30B9316 /* MBLGyroBMI160PackedDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160PackedDataReadyEvent.h; sourceTree = ""; }; - 9AD2093D0150C17663D53AF0D2BD6825 /* MBLQuaternionFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLQuaternionFormat.m; sourceTree = ""; }; - 9B750D3000BEF3E657F93E7C2C11DDB5 /* MBLPhotometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLPhotometer.h; sourceTree = ""; }; - 9B7D355831A50F19EE21A3AA550982E0 /* MBLBarometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometer.m; sourceTree = ""; }; - 9B841F492579FFBA76A46D63F1082DD6 /* FastCoding-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "FastCoding-tvOS.xcconfig"; path = "../FastCoding-tvOS/FastCoding-tvOS.xcconfig"; sourceTree = ""; }; - 9C0430E07BCDED5B7CD518B681868CEF /* MBProgressHUD-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-iOS-umbrella.h"; sourceTree = ""; }; - 9D9CF207753D00EA14C7FF077C2A7B77 /* MBLAccelerometerBoschAxisReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschAxisReadyEvent.h; sourceTree = ""; }; - 9E8AEE0DFC7F3B05D2C426B85E9444D0 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - 9EE6896A63CD5BFB98F4BEFA942A2A08 /* MBLGravityFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGravityFormat.m; sourceTree = ""; }; - 9EF4F6FF9581957C094B0E670C2B1AE2 /* MetaWear-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MetaWear-iOS-dummy.m"; sourceTree = ""; }; - 9F27F47FC1321AD27483B719A0C9CADA /* MBLAccelerometerBosch+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBosch+Private.h"; sourceTree = ""; }; - 9F8ED2337CB9E8BB6E170FC8CE9AEADE /* FastCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FastCoding.framework; path = "FastCoding-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - 9FE8178DDBF5ECA3097B097B4826CBA7 /* MBLAccelerometerBoschOrientationFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschOrientationFormat.m; sourceTree = ""; }; - A01A75152EFBAC91B18298FABEEA3047 /* MBLMockUtils.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMockUtils.m; sourceTree = ""; }; - A13D336140C6DEDD777F645BE4DF3B7D /* MBLGyroData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroData.m; sourceTree = ""; }; - A16B91106DC84C0FD697BD0C372F9757 /* MBLTimerEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTimerEvent.m; sourceTree = ""; }; - A175A4B71EE30DDD2D566A73DBEC1B85 /* MBLModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLModule.m; sourceTree = ""; }; - A245E852C9DB3427462FC00076A2E163 /* MBLAccelerometerOrientationEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerOrientationEvent.m; sourceTree = ""; }; - A281F1299DAC68B29A2FFDD77F54AD6E /* MBLCorrectedFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLCorrectedFormat.h; sourceTree = ""; }; - A2FD4BE33BC98270E878E0FDD87F2729 /* MBLEulerFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEulerFormat.m; sourceTree = ""; }; - A36208353F9163C3EBFC7FF5211D93EE /* MBLAccelerometerBoschFlatData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFlatData.m; sourceTree = ""; }; - A390610F982814D7D440FF84A47DB46D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; - A43DC64101E0EE568BE151B06C3D40D0 /* MBLDataSample.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDataSample.h; sourceTree = ""; }; - A474AB6E2E2CA0DA6C14DBEB43951265 /* MBLAccelerometerBoschPackedDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschPackedDataReadyEvent.h; sourceTree = ""; }; - A49860565C04C51B616558EDB6C207A1 /* MBLMovingAverage.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMovingAverage.h; sourceTree = ""; }; - A4BC6A7E7A46D7651FAC64F3FE06EF12 /* Pods-Starter-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Starter-tvOS.modulemap"; sourceTree = ""; }; - A5451082E0834788675C40629C4DE03A /* Pods-Starter-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Starter-iOS-dummy.m"; sourceTree = ""; }; - A5F62FE96D6A8B0861EF4045CB3F6036 /* MBLBarometerBoschPeriodicAltitudeEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBoschPeriodicAltitudeEvent.h; sourceTree = ""; }; - A6625912CB799A2119DC206BE310F742 /* MBLGPIOPinChangeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIOPinChangeEvent.m; sourceTree = ""; }; - A66B7CD4ADF832A51D1279005F5F16D2 /* MBLMetaWear.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMetaWear.h; sourceTree = ""; }; - A6E0A792678C8D8DF05A6CBACE714F75 /* Pods-Starter-macOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-macOS-resources.sh"; sourceTree = ""; }; - A7CB624F324B3C20D299DC3EEF4DEBEB /* MBLTestDebug.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTestDebug.m; sourceTree = ""; }; - A7E3F764013B97ED812E8D3283DAA255 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h; sourceTree = ""; }; - A8A1CFEDCF8D9E2970D011A98BA41516 /* MBLDeviceLookup.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDeviceLookup.h; sourceTree = ""; }; - A8ECBD143ADFBD8D03EDA03D0B54B27C /* MBLDataSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDataSwitch.m; sourceTree = ""; }; - A9000F0FF7A90A6F59B81BFB7F8D0A37 /* Pods-Starter-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-iOS.debug.xcconfig"; sourceTree = ""; }; - A90CBC9125428FB3F9EA77F260B54EAB /* MBLTemperature.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTemperature.h; sourceTree = ""; }; - A9C7C2259F2F02EECE4558B57F94E1E3 /* MBLRegister+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLRegister+Private.h"; sourceTree = ""; }; - AA3ED4C20784864624CA77166567B77F /* MBLI2CData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLI2CData+Private.h"; sourceTree = ""; }; - AA7C05508944F117B8B5C00303909183 /* FastCoding.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = FastCoding.framework; path = "FastCoding-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - AA9FC2A2394A1BBF5EB1B9FADD41B5C0 /* MBLAccelerometerPackedDataReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerPackedDataReadyEvent.h; sourceTree = ""; }; - AABC969343D75710875CBCE2B701D6F2 /* Pods-Starter-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-tvOS-frameworks.sh"; sourceTree = ""; }; - AB2E82704E67C12C59DDBEFC206FE679 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-tvOS/Info.plist"; sourceTree = ""; }; - AB6947AB6F38CB196184CF68AA77E2AB /* MBLFilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFilter.h; sourceTree = ""; }; - AC5FCD84CB9C3A65FFB4D7339F725E58 /* MBLAccelerometerBMI160StepEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMI160StepEvent.h; sourceTree = ""; }; - ACE63D2BE2BD0FEFC6773E8A89B7A5F7 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; - ACFC6C443B09DE923F4D13B49B6529F0 /* MBLQuaternionFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLQuaternionFormat.h; sourceTree = ""; }; - ADA36E2FB695216C6920CF5C44FADC0D /* MBLAccelerometerBoschAxisReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschAxisReadyEvent.m; sourceTree = ""; }; - AE1FA155F112AAA570ACA5290C93EC1D /* MBLQuaternionData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLQuaternionData.m; sourceTree = ""; }; - AE9B27FC17FCC12EC7A9E7C6EACCAA89 /* MBLGyroBMI160PackedDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160PackedDataReadyEvent.m; sourceTree = ""; }; - AF2F21AD149A6195BDBBEDDB8CA77DA8 /* FastCoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = FastCoder.h; path = FastCoder/FastCoder.h; sourceTree = ""; }; - B00644538655FE4FD0C408206C17228D /* MBLEntityEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEntityEvent+Private.h"; sourceTree = ""; }; - B08FF8DBCEA081BFC5499F13D8D1EB48 /* MBLANCSEventData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLANCSEventData+Private.h"; sourceTree = ""; }; - B0943DE823AC3337BB440D4179548D86 /* FastCoding-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding-tvOS-prefix.pch"; path = "../FastCoding-tvOS/FastCoding-tvOS-prefix.pch"; sourceTree = ""; }; - B0CC6647544C92E237C5E58817ABF815 /* MBLModuleInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLModuleInfo.h; sourceTree = ""; }; - B115D36606B4AADD761217DB4C2A9A05 /* MBLHygrometerBME280PeriodicHumidityEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLHygrometerBME280PeriodicHumidityEvent.h; sourceTree = ""; }; - B2E74149B503E1A320D20F5F1BE50BC3 /* MBLGyroBMI160+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGyroBMI160+Private.h"; sourceTree = ""; }; - B3466D6BD1DE4F23FECA24B3DFFEFFE4 /* MBLNumericData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLNumericData+Private.h"; sourceTree = ""; }; - B490A15EF33E626D39F6446407ED61B9 /* MBLCategoryLoader.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLCategoryLoader.h; sourceTree = ""; }; - B4CFEFE8770D9AD0341E24BD427A3AB6 /* MBLEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEvent.m; sourceTree = ""; }; - B5215E2014BAD178596E1165E37CC7FB /* Pods-Starter-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Starter-tvOS-dummy.m"; sourceTree = ""; }; - B70F33756D167A4FA310EF2A63F4E43C /* MBLAccelerometerMMA8452QRMSFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerMMA8452QRMSFormat.h; sourceTree = ""; }; - B73063C453BC313606EEF0C5A59ED58D /* MBLConstants.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLConstants.h; sourceTree = ""; }; - B751A124D571D4247E943A0FDA522578 /* MBLLoggingV0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLoggingV0.m; sourceTree = ""; }; - B7EFABA5A2A4A75BC5FD3EB52D601491 /* Pods-Starter-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Starter-macOS-umbrella.h"; sourceTree = ""; }; - B94539D46159311A844A5CB04B2BC9A3 /* Pods-Starter-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Starter-iOS-umbrella.h"; sourceTree = ""; }; - B98186A44DA501640C7E89E7F811C3D3 /* MBLAccelerometerTapEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerTapEvent.m; sourceTree = ""; }; - B9B8C91638C7B2907CDE68F9ACE11CB8 /* Bolts-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-tvOS.xcconfig"; path = "../Bolts-tvOS/Bolts-tvOS.xcconfig"; sourceTree = ""; }; - B9DE4E899E4844655FC917D8D457823C /* MBLModule.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLModule.h; sourceTree = ""; }; - BA41BCAF8C96FEE6DE4DA988D23716EB /* Bolts-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-iOS-prefix.pch"; sourceTree = ""; }; - BA9618B3D4982299C4F916FA38BE83A2 /* MBLAccelerometerBoschTapEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschTapEvent+Private.h"; sourceTree = ""; }; - BBCBFC44DF32989632F95C6BDF11D6BD /* Pods_Starter_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Starter_iOS.framework; path = "Pods-Starter-iOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - BBDCEC312737CE56EBE4236DCA8BA750 /* MBLAccelerometerMMA8452Q.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerMMA8452Q.m; sourceTree = ""; }; - BBF25E6F0B0180F610BFBAEB11C7FF3D /* MBLTimer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTimer.m; sourceTree = ""; }; - BC3658C58BC69AAA5EF88DA0D89F8C1F /* MBLAccelerometerBoschOrientationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschOrientationEvent.h; sourceTree = ""; }; - BC4FBF214D4B82375533FAFB243220B0 /* MetaWear-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWear-macOS.xcconfig"; path = "../MetaWear-macOS/MetaWear-macOS.xcconfig"; sourceTree = ""; }; - BC7AF3E43EEDBF72C0CA31B6012F63D5 /* MBLSensorFusion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSensorFusion.h; sourceTree = ""; }; - BCE7E5AA02B63E011DF1DF98336F4BE8 /* MBLFirmwareUpdateManager.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFirmwareUpdateManager.m; sourceTree = ""; }; - BCF93A19145E986CE283B7C796C86095 /* MBLProximity+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLProximity+Private.h"; sourceTree = ""; }; - BD9B0AF9B69E976EDB87BBC315D5993E /* FastCoding-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "FastCoding-iOS-prefix.pch"; sourceTree = ""; }; - BD9EE0CE69712E8C1D2AF65EC09F00B3 /* MBLAccelerometerAxisReadyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerAxisReadyEvent.h; sourceTree = ""; }; - BDEC1B0CD69077F22F35CBFCBF3196BF /* BFTask+MBLPrivate.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BFTask+MBLPrivate.h"; sourceTree = ""; }; - BE4FB9FDAC472B413A57ED7CF855DEFD /* MBLLoggingV0.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLoggingV0.h; sourceTree = ""; }; - BEC5D637AA502156E39846414268C83B /* MBLFirmwareUpdateManager.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFirmwareUpdateManager.h; sourceTree = ""; }; - BEF5F7E8303E99B87637CDC4567F15E3 /* MBLAmbientLightLTR329.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAmbientLightLTR329.m; sourceTree = ""; }; - BEFADBF1370D8B2EF860CA323969640D /* MBLSPIData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLSPIData+Private.h"; sourceTree = ""; }; - BF469711620C344E8237ACB9E37488F5 /* MBLRegister.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLRegister.m; sourceTree = ""; }; - BF610CD0F7089765CB25257C4241DE88 /* MBLModuleMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLModuleMock.h; sourceTree = ""; }; - BF82953F90A945F59016883056756DE7 /* MBLMetaWear.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMetaWear.m; sourceTree = ""; }; - BF8652479C009FF088D5D6709EB7CC2F /* MBLANCS.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLANCS.m; sourceTree = ""; }; - C009289D9A902BB50149D3B9C4F04D4B /* MBLAccelerometerMMA8452QFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerMMA8452QFormat.h; sourceTree = ""; }; - C00DFBCA78DE12AC8636FF801CD7203A /* MBLDownloadOnlyEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDownloadOnlyEvent.h; sourceTree = ""; }; - C014ECE4DBE240C0F225336A0534E7CF /* MBLConductance.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConductance.m; sourceTree = ""; }; - C15A25F88A4B4671C72A686736B4B4DC /* Bolts-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Bolts-iOS.modulemap"; sourceTree = ""; }; - C1C99B28231BEF46531726251543F95D /* MBLDependentData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLDependentData.h; sourceTree = ""; }; - C1F46732D0D5A9679D3057E5D13869F9 /* MBLGyro.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyro.h; sourceTree = ""; }; - C218101D30CFC198B28DC323D33B8EBB /* MBLGPIO.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGPIO.m; sourceTree = ""; }; - C224152C9D28C7A32A827C076760707D /* MBLMagnetometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometer.m; sourceTree = ""; }; - C32548046B3323EF853B2B5CDF55525C /* MBLI2CData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLI2CData.h; sourceTree = ""; }; - C33369D8835EEDA9EEB6F1729BB9CE99 /* MBLAccelerometerFreeFallEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerFreeFallEvent.h; sourceTree = ""; }; - C3C764F83BE624351959E1C8A7026783 /* MBLAccelerometerOrientationEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerOrientationEvent.h; sourceTree = ""; }; - C45B9B5A32BBBA27F8C0C5586E69C422 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C4B3A7CE6F23ABA370AA9B3A15AB2B67 /* MBLConversion.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLConversion.h; sourceTree = ""; }; - C4FE8BC8F7BFCBEAF055DBFCFEC485A0 /* MBLAnalytics.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAnalytics.h; sourceTree = ""; }; - C5790C4CDE0B77392619AE3CF7E2C451 /* MetaWear-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MetaWear-iOS-prefix.pch"; sourceTree = ""; }; - C6175132B1A5F37DFD658D10C3711CE7 /* mma8452q.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = mma8452q.h; sourceTree = ""; }; - C6ED4316FF4C55F5D679E4A3A2E1BCC5 /* MBLGyroData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGyroData+Private.h"; sourceTree = ""; }; - C7D606484687C0BF332DCA330EFEC20B /* MBLBarometerBME280.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBME280.m; sourceTree = ""; }; - C84458D72208FA0A9801EE0C9D88C10E /* MBLAccelerometerMMA8452Q.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerMMA8452Q.h; sourceTree = ""; }; - C89BB07023ED287565C2905593ACBB92 /* MBLRMSAccelerometerData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLRMSAccelerometerData+Private.h"; sourceTree = ""; }; - C94BC89EEB1C4DD70F8FB940105EDF59 /* MBLGravityFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGravityFormat.h; sourceTree = ""; }; - C978BF2D9FF8F00A034662BBCEC1FE53 /* MBLNeopixelStrand+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLNeopixelStrand+Private.h"; sourceTree = ""; }; - C9FC2805FA64DA152193079D7EC8BAAE /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreData.framework; sourceTree = DEVELOPER_DIR; }; - CA08FE632C7A756D3C35099AE7B05519 /* BFTask+MBLExtensions.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "BFTask+MBLExtensions.m"; sourceTree = ""; }; - CA4A1F9105F65278463AB28856E1DD2F /* MBLHygrometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLHygrometer.m; sourceTree = ""; }; - CA61631C3315F36BAAA72204FFFEAC2B /* MBLBluetoothCentralMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothCentralMock.h; sourceTree = ""; }; - CAA65D05E75DE377B086744D71B8C1FE /* MBLEulerAngleData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEulerAngleData.m; sourceTree = ""; }; - CB6F3AEB30C3D9BEC5BBD5C00EACADC8 /* Pods-Starter-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-iOS.release.xcconfig"; sourceTree = ""; }; - CBBF032637BF225C950554474601CB43 /* MBProgressHUD-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-iOS-prefix.pch"; sourceTree = ""; }; - CBC1499FF61B9E6574CE31364FA9D2B1 /* Bolts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = Bolts.h; path = Bolts/Common/Bolts.h; sourceTree = ""; }; - CC5A95481671F9338C7026FE94A5DF8A /* MBLBluetoothPeripheralMock.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBluetoothPeripheralMock.h; sourceTree = ""; }; - CC931B2F13890FA224324A2D657F2483 /* MBLNeopixelStrand.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNeopixelStrand.m; sourceTree = ""; }; - CCF372AA4F3F117F4D4C7E23D0FF1BA4 /* MBLRGBData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLRGBData+Private.h"; sourceTree = ""; }; - CDFC91FEE47741BE83E3B4DA6ACA3891 /* MBLAccelerometerBoschTapEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschTapEvent.m; sourceTree = ""; }; - D0D47EFF60E4C35624057BD74F164FED /* MBLSerial.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLSerial.h; sourceTree = ""; }; - D10DA96DC36AFE7F2E340BC3750A953E /* BFCancellationTokenRegistration.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = BFCancellationTokenRegistration.m; path = Bolts/Common/BFCancellationTokenRegistration.m; sourceTree = ""; }; - D16E20C3099CCE7C274562CB5EA29EF9 /* MBLBarometer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLBarometer+Private.h"; sourceTree = ""; }; - D1FF06642DBC4FFC0B2B829104D421CD /* MBLiBeacon.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLiBeacon.m; sourceTree = ""; }; - D20073129429570646FABC385B7A5A9B /* MBLSPIData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLSPIData.m; sourceTree = ""; }; - D317640CB86BA28327C329AD150CA58E /* MBLFirmwareUpdateInfo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLFirmwareUpdateInfo.h; sourceTree = ""; }; - D3201E3A006625BA636D039DAD71147E /* Pods-Starter-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-tvOS.release.xcconfig"; sourceTree = ""; }; - D35056D85FD1D73A2248A8740AD67A57 /* MBLNeopixel.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNeopixel.m; sourceTree = ""; }; - D5F1A4DFD6D0EFB150622ABD0E8F1316 /* MBLAccelerometerBMA255.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMA255.h; sourceTree = ""; }; - D63CD53A65C3D144427680FC8BD9B5B5 /* Pods-Starter-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "Pods-Starter-macOS.modulemap"; sourceTree = ""; }; - D68E84770A265909E54F38978E25756E /* MBLFirmwareBuild.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFirmwareBuild.m; sourceTree = ""; }; - D6ACD4F53E85B97F12F359D00E79C610 /* MBLData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLData+Private.h"; sourceTree = ""; }; - D72C4D748AA386035CB162B95E473342 /* MBLAccelerometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometer.h; sourceTree = ""; }; - D8725EB0E021DAD5A94DBA5397C6F845 /* MBLTemperatureV0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTemperatureV0.m; sourceTree = ""; }; - D909879784C6FEE4ACCD029C6D5086FC /* MBLEntityModule.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLEntityModule.m; sourceTree = ""; }; - D9C252AFF8BB0956C98DE543968E2066 /* MBLGyroBMI160Format.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160Format.m; sourceTree = ""; }; - DA61D4744EC46627267FA744013E0589 /* FastCoder.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = FastCoder.m; path = FastCoder/FastCoder.m; sourceTree = ""; }; - DB0E435AD114EF383A969D5A426FE268 /* MBLI2C.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLI2C.h; sourceTree = ""; }; - DB7023FA3417750FF403024ADE3A9FF7 /* MetaWear-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; path = "MetaWear-iOS.modulemap"; sourceTree = ""; }; - DB9E3B0C0143094BF1E25BD373A05CF9 /* MBLTriggeredRead.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLTriggeredRead.m; sourceTree = ""; }; - DBA14B83EB16970888BC823DCB27D0DE /* MBLAccelerometerBoschLowOrHighGEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschLowOrHighGEvent.h; sourceTree = ""; }; - DC37BD9E46482A494DC7492294708EAF /* MBLAccelerometerBoschRMSFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschRMSFormat.h; sourceTree = ""; }; - DC5B44476CD58A5D5ED7C806E7C65D47 /* MBLStringData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLStringData.m; sourceTree = ""; }; - DC9439ACEFDC7053DDA4F988438A0743 /* MBLAccelerometerBMI160StepEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBMI160StepEvent.m; sourceTree = ""; }; - DE11AC7A6BEA46D43A46B985F7DF59F4 /* MBLExternalThermistor0.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLExternalThermistor0.m; sourceTree = ""; }; - DE97623D119021B33454944A2AADDF24 /* MBLGyroBMI160.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLGyroBMI160.h; sourceTree = ""; }; - DEE0335A76FAAF539900AA6D34E2F76F /* MBLLogging.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLogging.m; sourceTree = ""; }; - DF05DA6CD115AA6EEF289B14B106AD87 /* MBLLogging.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLogging.h; sourceTree = ""; }; - DF13E9183F06FF27C1DE8BC3EFEED59F /* Bolts-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-macOS-prefix.pch"; path = "../Bolts-macOS/Bolts-macOS-prefix.pch"; sourceTree = ""; }; - DF2D88DE8088065E8B624DDFBE58526E /* MBLAccelerometerBoschFlatEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFlatEvent.m; sourceTree = ""; }; - DF83E2F0603DA4CBD738A9E84F5072A0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; - E15B390F69609D665C8DF28F8DEB7A17 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWear-macOS/Info.plist"; sourceTree = ""; }; - E1772E5B03C86833BA9BD2044679D48D /* MBProgressHUD-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MBProgressHUD-tvOS-prefix.pch"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; sourceTree = ""; }; - E38462FEF75627A901CBC06BBEF083E0 /* Pods-Starter-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-iOS-resources.sh"; sourceTree = ""; }; - E450B72E674058A5FF52327DD7EC821F /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; - E4951DF4462B936F39A71C12344BA94C /* Pods-Starter-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Starter-macOS-acknowledgements.markdown"; sourceTree = ""; }; - E64B6F84CEA9ED48728E33BC7316B4EC /* MBLAccelerometerBoschFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschFormat.m; sourceTree = ""; }; - E65D997E60AC492A1A89BED6F624EEC3 /* Pods_Starter_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_Starter_tvOS.framework; path = "Pods-Starter-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - E7206C6D035ED95789E77DFDCD5BAADE /* MBLTimer+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLTimer+Private.h"; sourceTree = ""; }; - E75374D4E9DAB6C46F4B835D0D3F4A8F /* MBLTimerEvent+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLTimerEvent+Private.h"; sourceTree = ""; }; - E7FCF970780F8D7CD3B2B0E5F719748F /* MBLLoggingV2.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLoggingV2.m; sourceTree = ""; }; - E89FCF9BB5AFDAC6517362946554ADA3 /* MBLAccelerometerBMI160MotionEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBMI160MotionEvent.h; sourceTree = ""; }; - E8BE0A8C865C4E839B99B2117E684133 /* Bolts.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Bolts.framework; path = "Bolts-tvOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - EA1D0D5468EE4C60F6520CA42C739533 /* MBLAccelerometer.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometer.m; sourceTree = ""; }; - EAAB5B28E78532344EDA35CAEB74A6D8 /* MBLDataProcessor.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLDataProcessor.m; sourceTree = ""; }; - EAACFD7B01AD5B5FCDCC03A40F40FF14 /* MBLAccelerometerBosch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBosch.m; sourceTree = ""; }; - EB490BFEC65DD75C59048669C60EADC0 /* MBLAccelerometerBoschFlatFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFlatFormat.h; sourceTree = ""; }; - EB9457C84BA60F953808A69B2CD44D2E /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m; sourceTree = ""; }; - EBB7B3F9D3FF6BC24D8C4A48E6924102 /* MBLHygrometerBME280.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLHygrometerBME280.h; sourceTree = ""; }; - EBDCE2EAF8D34005C4FE47C9AD1EDBA1 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MBProgressHUD-tvOS/Info.plist"; sourceTree = ""; }; - EC38C841BA76F70D8272F3D7ADACADE2 /* Bolts-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-iOS.xcconfig"; sourceTree = ""; }; - EC6F4AD08FB0CDF8AB50BB6195F7858F /* MBLModuleInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLModuleInfo.m; sourceTree = ""; }; - EC71AAB2A59E4F4EA43F2599557BDE1D /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = MetaWear.framework; path = "MetaWear-macOS.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; - EC92678BE93C7CF96A2F914F9952499D /* MBLAccelerometerBoschFlatEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschFlatEvent.h; sourceTree = ""; }; - ECB10F2A65A6BA5FB610B121361268F9 /* Pods-Starter-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-tvOS.debug.xcconfig"; sourceTree = ""; }; - ECFD1E04360455C5052B158960152FE0 /* MBLBarometerBMP280.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometerBMP280.h; sourceTree = ""; }; - ED2F20323C1B249540BF2E72844A76E2 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - ED30910C87D2BE5A47B5AC395FA82AA2 /* Bolts-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "Bolts-macOS.modulemap"; path = "../Bolts-macOS/Bolts-macOS.modulemap"; sourceTree = ""; }; - EDA4D0170274F95965943E2192C6DC68 /* MBLAccelerometerBoschFlatData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLAccelerometerBoschFlatData+Private.h"; sourceTree = ""; }; - EDEAAB2A23439AA26605427965FF6482 /* MBLBarometerBoschPeriodicAltitudeEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLBarometerBoschPeriodicAltitudeEvent.m; sourceTree = ""; }; - EE024F5D66D6ACBD750318E522672E62 /* MBLGPIOPin+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLGPIOPin+Private.h"; sourceTree = ""; }; - EE6303D6B2C2E393A3B84CCF481AA0DF /* MBLAccelerometerBoschOrientationFormat.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschOrientationFormat.h; sourceTree = ""; }; - EF09D6F1F9512C264519E29311940625 /* MBLBarometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLBarometer.h; sourceTree = ""; }; - EF3AF0D81EBDB21ED461275346CB1158 /* MBLBarometerBosch+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLBarometerBosch+Private.h"; sourceTree = ""; }; - EF43E02B211DF3B8717BA480E8358951 /* Bolts-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-iOS-dummy.m"; sourceTree = ""; }; - EF6751A4DC10EFEC4854078BC5450F20 /* MBLAccelerometerBoschTapEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBoschTapEvent.h; sourceTree = ""; }; - EFD7C01C3F8EC1E4BA465ACABE8FEA74 /* MBLModule+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLModule+Private.h"; sourceTree = ""; }; - F04C1384B21B5E727D6A34D5475BB9EB /* MBLAccelerometerData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerData.h; sourceTree = ""; }; - F05FB3AC8B8267ADA435588032133517 /* MBLAccelerometerAxisReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerAxisReadyEvent.m; sourceTree = ""; }; - F138F421CCDB2761404A746390697EA8 /* BFTask+MBLExtensions.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "BFTask+MBLExtensions.h"; sourceTree = ""; }; - F18B8EC306CD5FC6F878FD34225E3568 /* FastCoding-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; name = "FastCoding-tvOS.modulemap"; path = "../FastCoding-tvOS/FastCoding-tvOS.modulemap"; sourceTree = ""; }; - F1B1D69E219589EC6CFD41BB6F46D5D5 /* FastCoding-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "FastCoding-macOS-prefix.pch"; path = "../FastCoding-macOS/FastCoding-macOS-prefix.pch"; sourceTree = ""; }; - F22EB274B868FEB86414F9A31C438C82 /* MBLMechanicalSwitch.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLMechanicalSwitch.m; sourceTree = ""; }; - F27ABA1C1B56697C3CBEA5201D1E1EA5 /* MBLRGBData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLRGBData.h; sourceTree = ""; }; - F2C1F6550CAD58FF98B0D93DD130951A /* MBLGyroBMI160DataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLGyroBMI160DataReadyEvent.m; sourceTree = ""; }; - F3085F6D2203E0F1C1703103D86EAE56 /* MBLNumericData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNumericData.m; sourceTree = ""; }; - F41068E6EDA92E05A9EF6BB15369A327 /* MBLAccelerometerMMA8452QFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerMMA8452QFormat.m; sourceTree = ""; }; - F44C28B27EDCD1478ADEFADF3B1B3362 /* MBLAccelerometerBosch.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLAccelerometerBosch.h; sourceTree = ""; }; - F5403878E25BFCDFDFB2721108518D65 /* MBLFirmwareUpdateInfo.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLFirmwareUpdateInfo.m; sourceTree = ""; }; - F568C559156B081D92E4D1F9A997337B /* MetaWear-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-tvOS-prefix.pch"; path = "../MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; sourceTree = ""; }; - F69E657022FBB3BFC4F9645E201C9A41 /* MBLAccelerometerBoschPackedDataReadyEvent.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLAccelerometerBoschPackedDataReadyEvent.m; sourceTree = ""; }; - F718090CB9057236EB1DFB034F70974C /* MBLPhotometerTCS3472.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLPhotometerTCS3472.h; sourceTree = ""; }; - F805411C4F0A4414877BCE5EDD29C92B /* Pods-Starter-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Starter-iOS-acknowledgements.markdown"; sourceTree = ""; }; - F86E6E388C2EF806B61222B3D681D043 /* BFCancellationTokenRegistration.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = BFCancellationTokenRegistration.h; path = Bolts/Common/BFCancellationTokenRegistration.h; sourceTree = ""; }; - F92DB4AE50B415AD300DAA5BC4767174 /* MBProgressHUD-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MBProgressHUD-tvOS-umbrella.h"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS-umbrella.h"; sourceTree = ""; }; - F9779743BB0779445345CE025777D106 /* MBLQuaternionData.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLQuaternionData.h; sourceTree = ""; }; - FA488221FEA50B6AEC8BBAF8CA4C6EEB /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; - FB003471B152737CADBB87F6B199845C /* MBLNonVolatileState.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLNonVolatileState.m; sourceTree = ""; }; - FB311E558EC50722E2C62C1661943B60 /* MBLSerial+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLSerial+Private.h"; sourceTree = ""; }; - FBBC21F0A88BF36DA520DA6B9873B4FF /* MBLCorrectedFormat.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLCorrectedFormat.m; sourceTree = ""; }; - FBE75E185B5C873EDD2E213F6BABCFEB /* MBLConductanceData.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLConductanceData.m; sourceTree = ""; }; - FC053D434A06B030B7720431E4D9A87E /* MetaWear-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MetaWear-iOS.xcconfig"; sourceTree = ""; }; - FC205D22FE98BDB3414F601B31B87F1A /* MBLTemperature+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLTemperature+Private.h"; sourceTree = ""; }; - FC6957324B1EF69DC57A843B7DF24A0B /* MBLLED.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBLLED.m; sourceTree = ""; }; - FCEE56D4D921A7B44ADB7A0317845B34 /* MBLEulerAngleData+Private.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBLEulerAngleData+Private.h"; sourceTree = ""; }; - FF0D8C305426C63A66AC1F20DB041CC1 /* MBLTimerEvent.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLTimerEvent.h; sourceTree = ""; }; - FF68DD5BE6FD81CB7D400B9F8020E4AF /* MBLLoggingV2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLLoggingV2.h; sourceTree = ""; }; - FFFDB3EE908CC40CC530395C85E3458D /* MBLMagnetometer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBLMagnetometer.h; sourceTree = ""; }; + 00DFF052541C3386369F9784EB8627D0 /* memory.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; + 0132A615892F722B6440618CA20791A4 /* Pods-Starter-macOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-macOS-frameworks.sh"; sourceTree = ""; }; + 051182652C17095A392B873BCDD487E9 /* DeviceInformation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = DeviceInformation.swift; sourceTree = ""; }; + 05B696C98A92CC1F5DB37F3F294CBCCF /* Bolts-Swift-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Bolts-Swift-tvOS.modulemap"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap"; sourceTree = ""; }; + 05EB1C5C06110053BF5906B362C355AB /* utils.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = utils.cpp; sourceTree = ""; }; + 0869A2B29A2A21CABF62ADF6DDB71E03 /* gpio.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = gpio.cpp; sourceTree = ""; }; + 0A289BA07E505F658D8CE9EEA1D6F1BB /* MetaBootFinder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MetaBootFinder.swift; sourceTree = ""; }; + 0A47DCC5A27918EB38C8FAFB748D5830 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 0D548B9327762A53B9680304A82A03AF /* MBProgressHUD-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MBProgressHUD-tvOS-umbrella.h"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS-umbrella.h"; sourceTree = ""; }; + 0F2D078767FB7FC042E2A8439523157D /* Bolts-Swift-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-macOS-prefix.pch"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch"; sourceTree = ""; }; + 14B78E47F66C7BB1E6DA20CD54A85A4B /* MetaWear.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MetaWear.swift; sourceTree = ""; }; + 191DE4DDC98445461B4C4A24F094FD17 /* Pods-Starter-iOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-iOS-resources.sh"; sourceTree = ""; }; + 194CA0268C374020A0C47FCC1334B978 /* MblMwEvent+Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MblMwEvent+Async.swift"; path = "MetaWear/AsyncUtils/MblMwEvent+Async.swift"; sourceTree = ""; }; + 1BD2C5138C17A6A856B62D379A4C12D1 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 1D062BDD247903E1640A8D1C172EE28C /* MetaWear-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWear-macOS.xcconfig"; path = "../MetaWear-macOS/MetaWear-macOS.xcconfig"; sourceTree = ""; }; + 1E42D790DFDFC3D341BF614BA451431E /* Pods-Starter-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Starter-macOS-dummy.m"; sourceTree = ""; }; + 1F383718CDADA26D99D724827753BA93 /* Pods_Starter_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Starter_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 213A9EDD6F13DF9360C45C3D85BE0C11 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWear-tvOS/Info.plist"; sourceTree = ""; }; + 221599CD0871B0BD8DE9DCB149BAD456 /* Pods-Starter-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-iOS.debug.xcconfig"; sourceTree = ""; }; + 22C7E75F6DCD178EDC970498C1F2C72C /* MblMwDataSignal+Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MblMwDataSignal+Async.swift"; path = "MetaWear/AsyncUtils/MblMwDataSignal+Async.swift"; sourceTree = ""; }; + 23DC9A1994E72BE8BB7FE6D45EACE46B /* version.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = version.cpp; sourceTree = ""; }; + 24F858DBC3552FC3A13626D490C08850 /* MBProgressHUD-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MBProgressHUD-iOS.xcconfig"; sourceTree = ""; }; + 26CCE0191F2361E7AB9EE12589BA02B3 /* Pods_Starter_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Starter_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 27EFFA17C81D5B5248FFA39621D24E58 /* Pods-Starter-macOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-macOS-resources.sh"; sourceTree = ""; }; + 29931D8DBBB32F6EF417131198573486 /* FirmwareServer.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FirmwareServer.swift; sourceTree = ""; }; + 29D0DD783A789BE3E269ACE77815B0AD /* dataprocessor_config.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dataprocessor_config.cpp; sourceTree = ""; }; + 2B03D0D9D3B4E71ADC714860AE38A3E7 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + 2B2E0CE87C737A797061F1F2C282192D /* Bolts-Swift-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-Swift-tvOS-dummy.m"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m"; sourceTree = ""; }; + 2BBC05A8A0FD4FF2E64ED47558DD4C67 /* debug.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = debug.cpp; sourceTree = ""; }; + 2C7C7BA43DBD7C6F34ECF21C7D894199 /* ibeacon.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ibeacon.cpp; sourceTree = ""; }; + 2D66EDF6CD239E48C096108638399B3A /* MetaWear-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MetaWear-iOS-prefix.pch"; sourceTree = ""; }; + 2EECD9E4DBD4B75D6B2E9D730F83C3C1 /* Pods-Starter-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-iOS.release.xcconfig"; sourceTree = ""; }; + 310029E0CCDD8A3A5148606444F1B1C4 /* MBProgressHUD-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MBProgressHUD-iOS-dummy.m"; sourceTree = ""; }; + 3107BA3555E6C344C5FB4D46E325E475 /* dfu_operations_details.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dfu_operations_details.cpp; sourceTree = ""; }; + 34C9FACD4A56F513121B81EAF1DEF1F7 /* Pods_Starter_macOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Starter_macOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A0BB1A52FA6EAD970C666D3F598E781 /* responseheader.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = responseheader.cpp; sourceTree = ""; }; + 3A2CB2D775ED4EBD22C0A2BF365A589E /* MetaWear-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-macOS-umbrella.h"; path = "../MetaWear-macOS/MetaWear-macOS-umbrella.h"; sourceTree = ""; }; + 3A3BBAD43EAB96D4142D7666B9928922 /* logging.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = logging.cpp; sourceTree = ""; }; + 3A9A31AD0EE68C8AE79C6CFD87D25FDA /* MBProgressHUD-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-iOS-prefix.pch"; sourceTree = ""; }; + 3BCFD7CE3E626E92E92289A3CC13E8EA /* Pods-Starter-macOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Starter-macOS-acknowledgements.plist"; sourceTree = ""; }; + 3CD06931C14D017E65C4C790E8119722 /* MetaWear-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-tvOS-prefix.pch"; path = "../MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; sourceTree = ""; }; + 3DFB479038A1252E6C92F93E71FD0C0A /* macro.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = macro.cpp; sourceTree = ""; }; + 3F077D08170C67CC57E1655D199AD171 /* MetaWear-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "MetaWear-iOS-dummy.m"; sourceTree = ""; }; + 404137FCCF98E34A29359A6BDB0F565D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/Cocoa.framework; sourceTree = DEVELOPER_DIR; }; + 40929D407612A74D13A8821778981AD3 /* MblMwGattChar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MblMwGattChar.swift; sourceTree = ""; }; + 45194A165F19A3023ECCEB2CA456742D /* moduleinfo.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = moduleinfo.cpp; sourceTree = ""; }; + 4581E0D330D5693825305B8E0BC52675 /* datasignal.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = datasignal.cpp; sourceTree = ""; }; + 466D90E01C3417843BB962C73149971D /* Task+WhenAll.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Task+WhenAll.swift"; path = "Sources/BoltsSwift/Task+WhenAll.swift"; sourceTree = ""; }; + 490648870DA13732747D243777EC5FC7 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; }; + 4A80341133AC9664CE1D6A3DA6B60866 /* sensor_fusion.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = sensor_fusion.cpp; sourceTree = ""; }; + 4A896293036ACBC627931964FC081F7A /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; + 4B0DD4498EE5BF36B58B9A99A37BAC16 /* MBProgressHUD-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "MBProgressHUD-tvOS.modulemap"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; sourceTree = ""; }; + 4B6D30663A4F7C3465C8AC65DF0B96B2 /* CBUUID.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CBUUID.swift; sourceTree = ""; }; + 4C8A00AC65FF9BFD4538DBA623444CBD /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-Swift-macOS/Info.plist"; sourceTree = ""; }; + 4FDCD6B8716ECDE9BC8B5806BF6F3F72 /* Bolts-Swift-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-macOS-umbrella.h"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h"; sourceTree = ""; }; + 4FE4764C1F75ADB91EED7DC89532CDDB /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../Bolts-Swift-tvOS/Info.plist"; sourceTree = ""; }; + 4FF1EAA70E67E69AA77BB00DA24042DA /* Executor.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Executor.swift; path = Sources/BoltsSwift/Executor.swift; sourceTree = ""; }; + 501E03DB9586288A2EDD09ADB1926F9B /* accelerometer_bosch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = accelerometer_bosch.cpp; sourceTree = ""; }; + 51DA3B6E8BBC481F15FF2D11EED48B8B /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 52D3F703C6314F69094A2C9602240191 /* cbindings.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = cbindings.swift; sourceTree = ""; }; + 53E2612D123E29B78276E500B4C653CD /* MetaWear-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "MetaWear-tvOS.modulemap"; path = "../MetaWear-tvOS/MetaWear-tvOS.modulemap"; sourceTree = ""; }; + 53FF9084A87E27C3A1F64D429748CC3B /* MBProgressHUD-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MBProgressHUD-iOS-umbrella.h"; sourceTree = ""; }; + 540B8E19E411AC067CF2CABE1A26E1DA /* Pods-Starter-iOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Starter-iOS-acknowledgements.plist"; sourceTree = ""; }; + 5443759FFFF9BF343BFF667A06E6EE51 /* Bridging.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = Bridging.swift; sourceTree = ""; }; + 549EDDDA6E102138494BCB707911B9C0 /* Bolts-Swift-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "Bolts-Swift-macOS.modulemap"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap"; sourceTree = ""; }; + 58EF4EC9CB055DE315985DF4AEA02181 /* dataprocessor.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dataprocessor.cpp; sourceTree = ""; }; + 5AAD507FDC13FB08A8D3FD8751B225D1 /* MetaWearScanner.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MetaWearScanner.swift; sourceTree = ""; }; + 5B90B7868113EDFBF9D11063CBB69049 /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5BAE2AE51522CFFAAC13455FB6C4C59A /* Pods-Starter-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-tvOS.release.xcconfig"; sourceTree = ""; }; + 5E9BD62FE3788AD9D87187C280D43992 /* Pods-Starter-tvOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Starter-tvOS.modulemap"; sourceTree = ""; }; + 65B09CB9734B88FC39E55640743EB662 /* Bolts-Swift-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Bolts-Swift-iOS.modulemap"; sourceTree = ""; }; + 661656E42C39752CA90CCAE32C39B7FF /* LogDelegate.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = LogDelegate.swift; sourceTree = ""; }; + 6819E4164206BD9EC52CB720FD418E2E /* haptic.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = haptic.cpp; sourceTree = ""; }; + 693352717EF35F2AEF792660257CC4F1 /* barometer_bosch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = barometer_bosch.cpp; sourceTree = ""; }; + 6988820CD6E9588EE424222D2F38E804 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 6FDB28922A3687B0B134D71CD4331089 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 705CAAE99B961363ADFAAA8A1048FD4B /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 72203EB33CBF8CE1303572C3FCA9D3C0 /* MBProgressHUD.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = MBProgressHUD.h; sourceTree = ""; }; + 72FD6E65E5AE23F4883599B68F32D769 /* Bolts-Swift-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-Swift-iOS-umbrella.h"; sourceTree = ""; }; + 792EE243E0047B63DEB31D969D6A7A21 /* miniz.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = miniz.cpp; sourceTree = ""; }; + 7DC733795B2958E8E3E764D69590E97E /* MBProgressHUD-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "MBProgressHUD-iOS.modulemap"; sourceTree = ""; }; + 7DD014C32A513BD77C3DEB87CAEAE7F8 /* async_creator.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = async_creator.cpp; sourceTree = ""; }; + 842A202188A000EC5EBB50C80C529FE2 /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8590EE580A6D609C522FBB7D2D83F1F3 /* FirmwareBuild.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FirmwareBuild.swift; sourceTree = ""; }; + 85A6184B78942AC84F08C0339440A99E /* threadpool.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = threadpool.cpp; sourceTree = ""; }; + 876A2BB8D0772DC29DEA9A493B6B6AF1 /* proximity_tsl2671.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = proximity_tsl2671.cpp; sourceTree = ""; }; + 87F5B491BB8BB90853BFA31254C11353 /* Bolts-Swift-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Bolts-Swift-iOS.xcconfig"; sourceTree = ""; }; + 889D1B5AFB407A80A8671BDC614F35D9 /* MBProgressHUD.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = MBProgressHUD.m; sourceTree = ""; }; + 8B1217B5C1A00167FAB2A9BAAEA43DF9 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + 8C3DFB5E0AC5A7457A95A380D5713014 /* led.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = led.cpp; sourceTree = ""; }; + 8D3E2113D269B645DA84C64DE31DEEE4 /* Pods-Starter-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Starter-tvOS-dummy.m"; sourceTree = ""; }; + 8E60ECB44967A7A00126706C51E87938 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 903124EC640B5C982AE5E7D906FFAAB4 /* dfu_utility.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dfu_utility.cpp; sourceTree = ""; }; + 918206079028D3E3B84F1977D91F4F52 /* metawearboard.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = metawearboard.cpp; sourceTree = ""; }; + 92F037C92AD922E2A851E87CBD31D022 /* Pods-Starter-tvOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-tvOS-frameworks.sh"; sourceTree = ""; }; + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + 97C89FB5EF23EF0483479BC1113DD58E /* Bolts-Swift-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "Bolts-Swift-macOS-dummy.m"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m"; sourceTree = ""; }; + 97E01BEBA7EBC898B3E81DF6073F7623 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9950899B774D06421D049FDF2DCC0BFC /* humidity_bme280.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = humidity_bme280.cpp; sourceTree = ""; }; + 9F0D01A3B7B92C9EBFA0EFB1881AFF23 /* MetaWearData.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MetaWearData.swift; sourceTree = ""; }; + A114BEDB49E0C7F56E6FC35F6F29317D /* Pods-Starter-macOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Starter-macOS-acknowledgements.markdown"; sourceTree = ""; }; + A14B4EF8129FE5C2A096AC1F897D4BEF /* Pods-Starter-tvOS-resources.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-tvOS-resources.sh"; sourceTree = ""; }; + A14DC32A908B09C6352731786829F092 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS10.3.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + A1763084867DB07A9AC0D5EB2BADA59B /* datainterpreter.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = datainterpreter.cpp; sourceTree = ""; }; + A35DD3123E1FDD9A3C4EB60950116376 /* MetaWear-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MetaWear-tvOS.xcconfig"; path = "../MetaWear-tvOS/MetaWear-tvOS.xcconfig"; sourceTree = ""; }; + A38D6F688CF7790163295776066F18ED /* MBProgressHUD.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MBProgressHUD.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A4FB4E705B69B6F8C5C09102B11CEE6F /* task.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = task.cpp; sourceTree = ""; }; + A646D30D3CB45C6A3A53BD186EB0FCC3 /* Task+ContinueWith.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Task+ContinueWith.swift"; path = "Sources/BoltsSwift/Task+ContinueWith.swift"; sourceTree = ""; }; + A8BC9C341CCDE7885327FA6E387D48F1 /* Task+Delay.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Task+Delay.swift"; path = "Sources/BoltsSwift/Task+Delay.swift"; sourceTree = ""; }; + A9E4B61756F0D7D5866A5911E1D726C3 /* MetaWear-macOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-macOS-prefix.pch"; path = "../MetaWear-macOS/MetaWear-macOS-prefix.pch"; sourceTree = ""; }; + AAB0466881011F80203B86C847A1B271 /* MetaWear.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MetaWear.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AAD7610CCFCD460CD48BC2B8E02B490C /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + AB9B16C0D7EF98BBEB8AB328589B1A03 /* settings.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = settings.cpp; sourceTree = ""; }; + ABDA1ECA531B3EC4A6BD92954C4799A4 /* event.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = event.cpp; sourceTree = ""; }; + AD95C3625CEBFBEF1B885D005A07C417 /* ScannerModel.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = ScannerModel.swift; path = MetaWear/UI/ScannerModel.swift; sourceTree = ""; }; + AEA7279216F523A375F30008956C9E80 /* Bolts-Swift-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-tvOS-prefix.pch"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch"; sourceTree = ""; }; + B0CEFA6311423CCFBE7E6E78A29E99A7 /* MetaWear-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWear-tvOS-dummy.m"; path = "../MetaWear-tvOS/MetaWear-tvOS-dummy.m"; sourceTree = ""; }; + B16148986D393527A65ACDE1BC87B1EE /* dfu_operations.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = dfu_operations.cpp; sourceTree = ""; }; + B291B9AC61070731F448C9AA7833A048 /* MetaWear-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "MetaWear-iOS-umbrella.h"; sourceTree = ""; }; + B4A86268DDA309F1DCD5BD12F9ECCE42 /* Bolts-Swift-macOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-Swift-macOS.xcconfig"; path = "../Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig"; sourceTree = ""; }; + B4ED30AEE8A78DA3FCC439D6DBBFFE55 /* switch.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = switch.cpp; sourceTree = ""; }; + B505D1D7CCC0BDB5D2AEF64EE5A1A785 /* MetaWear.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; path = MetaWear.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; + B65A1ED3EDB60EE66D08199CB4BCAE21 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MetaWear-macOS/Info.plist"; sourceTree = ""; }; + B72BB304A3A3772DBAF8AB933B83D1D6 /* CoreBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreBluetooth.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/System/Library/Frameworks/CoreBluetooth.framework; sourceTree = DEVELOPER_DIR; }; + B72CD4D599ACB5E9E52BA6A9282DDEF6 /* Pods-Starter-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Starter-macOS.modulemap"; sourceTree = ""; }; + B90141C8D290B0C389C9B35ADE975DC8 /* Pods-Starter-iOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Starter-iOS-acknowledgements.markdown"; sourceTree = ""; }; + B904A6AE7F408F32FF118E2851DF47B4 /* gyro_bmi160.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = gyro_bmi160.cpp; sourceTree = ""; }; + BA3624BA15AABEF56DA66CC59AF624D5 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + C04390A32ED6007EB4F966E63E0FBDE5 /* ambientlight_ltr329.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = ambientlight_ltr329.cpp; sourceTree = ""; }; + C636B15978D834652B0A158570ED541B /* MetaWear+LED.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MetaWear+LED.swift"; path = "MetaWear/AsyncUtils/MetaWear+LED.swift"; sourceTree = ""; }; + C9BF920E8322617E10019F6945D4B8AD /* MBProgressHUD-tvOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MBProgressHUD-tvOS-dummy.m"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS-dummy.m"; sourceTree = ""; }; + CB868C271ADD0D99C1C4A385A1A48623 /* accelerometer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = accelerometer.cpp; sourceTree = ""; }; + CBD1A3D65CA5F8BF063DE532825B7BA5 /* MetaWear-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "MetaWear-iOS.modulemap"; sourceTree = ""; }; + CEC34A259355D0D985D6FB4490868F26 /* MetaWear-macOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; name = "MetaWear-macOS.modulemap"; path = "../MetaWear-macOS/MetaWear-macOS.modulemap"; sourceTree = ""; }; + CEDF199A08BA8C211410ACF7F9812A45 /* Bolts-Swift-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Bolts-Swift-tvOS.xcconfig"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig"; sourceTree = ""; }; + CF4406FCF209E179BD2AC06B93CA8E4E /* accelerometer_mma8452q.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = accelerometer_mma8452q.cpp; sourceTree = ""; }; + CF932E28DA876FBB08463D0B2D76F4F4 /* Bolts-Swift-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "Bolts-Swift-tvOS-umbrella.h"; path = "../Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h"; sourceTree = ""; }; + CFA9CF51EC0F0B37E99EB027B676B555 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D0C0C87FBEB87C78124F42D72921C4CA /* Pods-Starter-iOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Starter-iOS-umbrella.h"; sourceTree = ""; }; + D26646F8AEC4B507432302E9A08D48C0 /* conductance.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = conductance.cpp; sourceTree = ""; }; + D525B0CEEA87DB0DF03D2BEE816E83AC /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS10.2.sdk/System/Library/Frameworks/CoreGraphics.framework; sourceTree = DEVELOPER_DIR; }; + D58198726650027243B7558C21A0FCEC /* neopixel.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = neopixel.cpp; sourceTree = ""; }; + D586A6D4ACA652C48A74545356A855AD /* Pods-Starter-tvOS-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Starter-tvOS-acknowledgements.markdown"; sourceTree = ""; }; + D8468FE86B85A9D95FF5DF8AFC02B3CE /* Pods-Starter-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-macOS.release.xcconfig"; sourceTree = ""; }; + DD52F8BEAA10A37AF470D939730D0BB5 /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DED1CF3D8AC000446F9D372D51117195 /* file_operations.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = file_operations.cpp; sourceTree = ""; }; + DF18F213E6414DEC9C5F267E671C6675 /* Pods-Starter-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-macOS.debug.xcconfig"; sourceTree = ""; }; + DF344F7213D6BE97247B7AB9E5D59D9A /* Task+WhenAny.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "Task+WhenAny.swift"; path = "Sources/BoltsSwift/Task+WhenAny.swift"; sourceTree = ""; }; + DFC029E49475091E3F7EA515EFA051C4 /* Pods-Starter-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Starter-iOS-dummy.m"; sourceTree = ""; }; + DFE631152B1B89B7AC6B37CFF8E00E84 /* MetaWear+Async.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "MetaWear+Async.swift"; path = "MetaWear/AsyncUtils/MetaWear+Async.swift"; sourceTree = ""; }; + E118D5F1C09D22C0DB25BBA0350D5A31 /* magnetometer_bmm150.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = magnetometer_bmm150.cpp; sourceTree = ""; }; + E276DFEEBCD2D36D1990F0819B165019 /* Task.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Task.swift; path = Sources/BoltsSwift/Task.swift; sourceTree = ""; }; + E30BF8F1BFD09B665B19E1971224202D /* MBProgressHUD-tvOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MBProgressHUD-tvOS-prefix.pch"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; sourceTree = ""; }; + E6F4EA060959F762B670B3C378C2D163 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E714D8E62191DAAB6CE7AC6D2B63D314 /* Pods-Starter-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Starter-tvOS.debug.xcconfig"; sourceTree = ""; }; + E7D9213F5833AEA5589825DBA31F0DA8 /* Pods-Starter-tvOS-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Starter-tvOS-acknowledgements.plist"; sourceTree = ""; }; + E7EE95CCAA9DF84E72BFFE29E793292A /* MetaWear-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = "MetaWear-tvOS-umbrella.h"; path = "../MetaWear-tvOS/MetaWear-tvOS-umbrella.h"; sourceTree = ""; }; + E9D63D677FAC5999953CC365FBA2D9B7 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + EAB4DA1AA08A458E3A60CDBAFF03196C /* Pods-Starter-iOS.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Starter-iOS.modulemap"; sourceTree = ""; }; + EC5707BBBC2BC238D1495B36C720B2D3 /* Errors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Errors.swift; path = Sources/BoltsSwift/Errors.swift; sourceTree = ""; }; + ED9057C240FB0E1B1C51B1D479331FA8 /* serialpassthrough.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = serialpassthrough.cpp; sourceTree = ""; }; + EDDF786AFD200556B2AA1E5D7B543E9C /* timer.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = ""; }; + EE221359457B938A7422752010173946 /* TaskCompletionSource.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = TaskCompletionSource.swift; path = Sources/BoltsSwift/TaskCompletionSource.swift; sourceTree = ""; }; + EE58934D390C197F236A2AFFB189AABB /* BoltsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BoltsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F0BD512EE716C3130CE6A20F47366614 /* MetaWear-iOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "MetaWear-iOS.xcconfig"; sourceTree = ""; }; + F21AECA22893849D2E7A51A57AEEC4DF /* MetaWear-macOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; name = "MetaWear-macOS-dummy.m"; path = "../MetaWear-macOS/MetaWear-macOS-dummy.m"; sourceTree = ""; }; + F25852C48E7333ED543B72384B05EF4F /* String+VersionCompare.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+VersionCompare.swift"; sourceTree = ""; }; + F28477938A3FD6AD9C4FF819C27E498C /* Bolts-Swift-iOS-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Bolts-Swift-iOS-dummy.m"; sourceTree = ""; }; + F385036DA00AF006CFC0253FDB03CE12 /* Pods-Starter-tvOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Starter-tvOS-umbrella.h"; sourceTree = ""; }; + F7106C1FC45DB0E0D978847B3902219D /* Pods-Starter-macOS-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Starter-macOS-umbrella.h"; sourceTree = ""; }; + F81A117E17C144C09A8A90E6CA8302B3 /* anonymous_datasignal.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = anonymous_datasignal.cpp; sourceTree = ""; }; + F8EFE83433FAE9F82AF2BCFFBCBD7F6D /* MBProgressHUD-tvOS.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "MBProgressHUD-tvOS.xcconfig"; path = "../MBProgressHUD-tvOS/MBProgressHUD-tvOS.xcconfig"; sourceTree = ""; }; + F974CBD0746E36826C073D4AC96B7188 /* Pods-Starter-iOS-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Starter-iOS-frameworks.sh"; sourceTree = ""; }; + F9F2AD8E2247887940D03A91F586B691 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = "../MBProgressHUD-tvOS/Info.plist"; sourceTree = ""; }; + FAE9D19354AA80B8266A7A54A31DCECE /* multichanneltemperature.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = multichanneltemperature.cpp; sourceTree = ""; }; + FF465F76A28B3143515C18F384C09073 /* colordetector_tcs34725.cpp */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.cpp.cpp; path = colordetector_tcs34725.cpp; sourceTree = ""; }; + FF6E06660ACD42B2105F0B0A4347409D /* Bolts-Swift-iOS-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Bolts-Swift-iOS-prefix.pch"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ - 20FB0981ACB7205DDC4D674DAC0C9BCE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2ADF8A7E3C73F255C51A3657F476598B /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 2E629FFD21BA3B411C7008EBE335A9FE /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 2F46316EAA8DD7A586FE80C66ADA705A /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 3114F932C15CCEE243E3B7B0D909C109 /* Frameworks */ = { + 43AFF0A4DC2A1E237B0A55B8B9CB7510 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3866AB500837CC210CAC556A03C68897 /* Cocoa.framework in Frameworks */, + 1B162E7D2B85F7F94F2A9DC5ECFA3D31 /* CoreGraphics.framework in Frameworks */, + 348119EFF54B003E6F216DE34593DD6C /* Foundation.framework in Frameworks */, + 2D13530877F3E3C2BD981AEE64902DBC /* QuartzCore.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 36219BDF7509BF0A61A53E45F84DA51D /* Frameworks */ = { + 52D8007792955226E299963CE6E7B2B0 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 3B2925DCA31D2AA6E2907FF194B328B3 /* Bolts.framework in Frameworks */, - EE042F374C81340BCF4F320DF9878061 /* CoreBluetooth.framework in Frameworks */, - 95C1818DCB477B88FF21B36DB65B040D /* CoreData.framework in Frameworks */, - 46956280CC6A700A438D65C4BA799479 /* FastCoding.framework in Frameworks */, - 81E961F4E1A93B592EB73609496F4CD2 /* Foundation.framework in Frameworks */, + 2671E54E7AEE5CF3373FDA1B86CB561F /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 43AFF0A4DC2A1E237B0A55B8B9CB7510 /* Frameworks */ = { + 5E6AB88245DF515BF76A21E7F07A551C /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1B162E7D2B85F7F94F2A9DC5ECFA3D31 /* CoreGraphics.framework in Frameworks */, - 348119EFF54B003E6F216DE34593DD6C /* Foundation.framework in Frameworks */, - 2D13530877F3E3C2BD981AEE64902DBC /* QuartzCore.framework in Frameworks */, + 3048C93D0D73996E4D54A09B6AD9686D /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 5A0702E4EAE9DE569AF175068C4A2AEC /* Frameworks */ = { + 7921AE78A7CF2A7E98793224495DF247 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7D105FE9BCC556C79B6BDABED77B48E9 /* Foundation.framework in Frameworks */, + BB4ADDF0BAA546FFBF2A5A7F0EB41CE6 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 80D69EF943238FEBF67C35FF9B6A0488 /* Frameworks */ = { + 7D118543057A5154EB9012CBCAFF8236 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B6E0E83AF092A58EDF8A6ED1077DA894 /* Foundation.framework in Frameworks */, + 5001765206FE2F194E6FBEBBDEC5C8D6 /* BoltsSwift.framework in Frameworks */, + CBFDBC15440AF785AFEDE9D14C15FB66 /* CoreBluetooth.framework in Frameworks */, + 43695E4581D60DF316442099D179CC0E /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - 859D369993CAFB5165ABD844B8DCC34B /* Frameworks */ = { + 7E400A6572B56DC43FB793B930A064E3 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 57220D120377407D870523397528F1CD /* Bolts.framework in Frameworks */, - CE43E333D867C8E2CA1B3C2ED53D9778 /* CoreBluetooth.framework in Frameworks */, - FC03C140A49BEED81CEFEE41708C5FA9 /* CoreData.framework in Frameworks */, - 5838565AC46D94D267753EE90347D176 /* FastCoding.framework in Frameworks */, - 1A9C6DC010EF5DFBE503AB9E44DD6EBC /* Foundation.framework in Frameworks */, + CA31B2A51919A8900FBDA26FDF2FCA94 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1913,2295 +592,718 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - B658E63502323819E88FF6D622A873AF /* Frameworks */ = { + 9C339593B6CAF7128B61D87263636A99 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 2404D14D2F246A434EE0C1A5B84D6DDE /* Foundation.framework in Frameworks */, + 7903930B1251742CE4686E195B6689D8 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D0EA1F7B07303F58C575AB04F4BA79C1 /* Frameworks */ = { + B0ABC1EEC63E3376029E9FF7250C1AE7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B664D6F93BD0508B562FE6DAC7DAF323 /* Bolts.framework in Frameworks */, - BA6459C7CA6367307D82C05627A9D457 /* Cocoa.framework in Frameworks */, - 2394317D164847044865DB60AD261581 /* CoreBluetooth.framework in Frameworks */, - 3A6E6164F87363997CE3E8B2F3822FA4 /* CoreData.framework in Frameworks */, - B630E197B15230A3F7A699B73A3BCD58 /* FastCoding.framework in Frameworks */, + 9424FE520BBCC08BC988583370B6C804 /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - D4FCB708E30657BCF8E37542457C1C2F /* Frameworks */ = { + C107DC355B3A2C4AE7A9EA0E49987443 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 5365D530008115AAF9C20AE2394C32CF /* Cocoa.framework in Frameworks */, + 6BDF2ECB5B6038E122197201D2BA5DD3 /* BoltsSwift.framework in Frameworks */, + 8CD942945446A79765BBF3E74BC38E9C /* Cocoa.framework in Frameworks */, + ACB063C3999BBBD91B976C904C2EFC27 /* CoreBluetooth.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; - E9C9A26B41A33A916E23EAA7D9B4645C /* Frameworks */ = { + C7BE0E71DBADCCD437507EBF6AAFDEAF /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0C2864B3BE7B398C7EE97B7BC24748DB /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FA02C51B412143161CAD4336E9E6AF43 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - D953A39EB4738EC7847F50ACB2A39BF8 /* Foundation.framework in Frameworks */, + 5F89D00D3D868B747539CCEAFC94E07F /* BoltsSwift.framework in Frameworks */, + 445A972E0EFED2BED4952E917C4896AC /* CoreBluetooth.framework in Frameworks */, + 3A320188B8D201A2E0E1AF0F977EDC58 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 013A6D6A67B66AD3C3D1409D76EAC190 /* GyroBMI160 */ = { + 07EFEB9DE54DA44F8BB3F13A6AEA25D4 /* Pods-Starter-iOS */ = { isa = PBXGroup; children = ( - B2E74149B503E1A320D20F5F1BE50BC3 /* MBLGyroBMI160+Private.h */, - 062D0EF82F87F37B60C685C87159AB1A /* MBLGyroBMI160AxisReadyEvent.h */, - 37D9E3818565F54B062AAA959D79DECD /* MBLGyroBMI160AxisReadyEvent.m */, - 03C3625913AA8E05E641976754F7D47D /* MBLGyroBMI160DataReadyEvent.h */, - F2C1F6550CAD58FF98B0D93DD130951A /* MBLGyroBMI160DataReadyEvent.m */, - 77690A4A4C5A42B5BC6EFC98D6900C6E /* MBLGyroBMI160Format.h */, - D9C252AFF8BB0956C98DE543968E2066 /* MBLGyroBMI160Format.m */, - 999B80E344EA0797D0E594D2D30B9316 /* MBLGyroBMI160PackedDataReadyEvent.h */, - AE9B27FC17FCC12EC7A9E7C6EACCAA89 /* MBLGyroBMI160PackedDataReadyEvent.m */, + CFA9CF51EC0F0B37E99EB027B676B555 /* Info.plist */, + EAB4DA1AA08A458E3A60CDBAFF03196C /* Pods-Starter-iOS.modulemap */, + B90141C8D290B0C389C9B35ADE975DC8 /* Pods-Starter-iOS-acknowledgements.markdown */, + 540B8E19E411AC067CF2CABE1A26E1DA /* Pods-Starter-iOS-acknowledgements.plist */, + DFC029E49475091E3F7EA515EFA051C4 /* Pods-Starter-iOS-dummy.m */, + F974CBD0746E36826C073D4AC96B7188 /* Pods-Starter-iOS-frameworks.sh */, + 191DE4DDC98445461B4C4A24F094FD17 /* Pods-Starter-iOS-resources.sh */, + D0C0C87FBEB87C78124F42D72921C4CA /* Pods-Starter-iOS-umbrella.h */, + 221599CD0871B0BD8DE9DCB149BAD456 /* Pods-Starter-iOS.debug.xcconfig */, + 2EECD9E4DBD4B75D6B2E9D730F83C3C1 /* Pods-Starter-iOS.release.xcconfig */, ); - name = GyroBMI160; - path = GyroBMI160; + name = "Pods-Starter-iOS"; + path = "Target Support Files/Pods-Starter-iOS"; sourceTree = ""; }; - 02D6E720DA7AEC17E4449A6EC2F510B9 /* Timer */ = { - isa = PBXGroup; - children = ( - E7206C6D035ED95789E77DFDCD5BAADE /* MBLTimer+Private.h */, - E75374D4E9DAB6C46F4B835D0D3F4A8F /* MBLTimerEvent+Private.h */, + 29A048560CF36A63675257AFE948D2C8 /* Support Files */ = { + isa = PBXGroup; + children = ( + 65B09CB9734B88FC39E55640743EB662 /* Bolts-Swift-iOS.modulemap */, + 87F5B491BB8BB90853BFA31254C11353 /* Bolts-Swift-iOS.xcconfig */, + F28477938A3FD6AD9C4FF819C27E498C /* Bolts-Swift-iOS-dummy.m */, + FF6E06660ACD42B2105F0B0A4347409D /* Bolts-Swift-iOS-prefix.pch */, + 72FD6E65E5AE23F4883599B68F32D769 /* Bolts-Swift-iOS-umbrella.h */, + 549EDDDA6E102138494BCB707911B9C0 /* Bolts-Swift-macOS.modulemap */, + B4A86268DDA309F1DCD5BD12F9ECCE42 /* Bolts-Swift-macOS.xcconfig */, + 97C89FB5EF23EF0483479BC1113DD58E /* Bolts-Swift-macOS-dummy.m */, + 0F2D078767FB7FC042E2A8439523157D /* Bolts-Swift-macOS-prefix.pch */, + 4FDCD6B8716ECDE9BC8B5806BF6F3F72 /* Bolts-Swift-macOS-umbrella.h */, + 05B696C98A92CC1F5DB37F3F294CBCCF /* Bolts-Swift-tvOS.modulemap */, + CEDF199A08BA8C211410ACF7F9812A45 /* Bolts-Swift-tvOS.xcconfig */, + 2B2E0CE87C737A797061F1F2C282192D /* Bolts-Swift-tvOS-dummy.m */, + AEA7279216F523A375F30008956C9E80 /* Bolts-Swift-tvOS-prefix.pch */, + CF932E28DA876FBB08463D0B2D76F4F4 /* Bolts-Swift-tvOS-umbrella.h */, + 4C8A00AC65FF9BFD4538DBA623444CBD /* Info.plist */, + 4FE4764C1F75ADB91EED7DC89532CDDB /* Info.plist */, + BA3624BA15AABEF56DA66CC59AF624D5 /* Info.plist */, ); - name = Timer; - path = Timer; + name = "Support Files"; + path = "../Target Support Files/Bolts-Swift-iOS"; sourceTree = ""; }; - 0390D50E07FFE9A85A668FD9D10EE7D2 /* AccelerometerBMA255 */ = { + 2F0D07C93402D2BA7E96577A095A0FE9 /* MetaWear-SDK-Cpp */ = { isa = PBXGroup; children = ( - D5F1A4DFD6D0EFB150622ABD0E8F1316 /* MBLAccelerometerBMA255.h */, - 8BEDBB7E24ED6EAA39173671F4ED72C2 /* MBLAccelerometerBMA255.m */, - 23AA82CBCF671572A6EDE8C4D2B334FE /* MBLAccelerometerBMA255MotionEvent.h */, - 4A1C20C69C1F11101F8A5AEA7CC3BCFD /* MBLAccelerometerBMA255MotionEvent.m */, + 59B8588B33D1149B0DAC798BC728C7B4 /* bindings */, + ECE6DB6ADB13FC07D18E640EFC7A9657 /* src */, ); - name = AccelerometerBMA255; - path = AccelerometerBMA255; + name = "MetaWear-SDK-Cpp"; + path = "MetaWear/MetaWear-SDK-Cpp"; sourceTree = ""; }; - 069784F4D0819F5EC3F51961209E45F3 /* HapticBuzzer */ = { + 2FB39673F2F6D3F83209EC25F82006EB /* dfu */ = { isa = PBXGroup; children = ( - 2EDC16351CD877ED89AE173D8F142AE7 /* MBLHapticBuzzer.h */, - 88B28ABD0EEC5DEB324BECFFE15D7923 /* MBLHapticBuzzer.m */, + FA6F86DF0B80BADE9CD07B7285D992CA /* cpp */, ); - name = HapticBuzzer; - path = HapticBuzzer; + path = dfu; sourceTree = ""; }; - 0ECF95738EE35E7353800A66913ABC66 /* Macro */ = { + 3471460E8A4BCE1F0ACA6DFC8B8C774E /* sensor */ = { isa = PBXGroup; children = ( - 8D102AFADD707A32746A67B9AD40758B /* MBLMacro.h */, - 610A24A199D5AD64DBB7279794C620F5 /* MBLMacro.m */, + BEDB84DDA48AFD56BB788EDA916D5E37 /* cpp */, ); - name = Macro; - path = Macro; + path = sensor; sourceTree = ""; }; - 10561D9D25872B6F96600A82F156C029 /* tvOS */ = { + 41E49A628A252A00C15B1547D777D347 /* peripheral */ = { isa = PBXGroup; children = ( - FA488221FEA50B6AEC8BBAF8CA4C6EEB /* CoreBluetooth.framework */, - C9FC2805FA64DA152193079D7EC8BAAE /* CoreData.framework */, - 4F5712A92A2039700975BCEC60516F2A /* CoreGraphics.framework */, - A390610F982814D7D440FF84A47DB46D /* Foundation.framework */, - 1E607E00E745BA5868FC8C3BE81F2CDA /* QuartzCore.framework */, + 7206B2AAF0BF7EEB321A466230106D2B /* cpp */, ); - name = tvOS; + path = peripheral; sourceTree = ""; }; - 19D44B781D7DA93D6A6921EF8EFFD7F9 /* Support Files */ = { + 44F8A2DE5213F6856004B40BE11E05AD /* platform */ = { isa = PBXGroup; children = ( - 8C87D4B1154726524489C5C7578D42A9 /* Info.plist */, - C45B9B5A32BBBA27F8C0C5586E69C422 /* Info.plist */, - E15B390F69609D665C8DF28F8DEB7A17 /* Info.plist */, - DB7023FA3417750FF403024ADE3A9FF7 /* MetaWear-iOS.modulemap */, - FC053D434A06B030B7720431E4D9A87E /* MetaWear-iOS.xcconfig */, - 9EF4F6FF9581957C094B0E670C2B1AE2 /* MetaWear-iOS-dummy.m */, - C5790C4CDE0B77392619AE3CF7E2C451 /* MetaWear-iOS-prefix.pch */, - 90C9B7E48E79010F255AE5D6ED3F90CA /* MetaWear-iOS-umbrella.h */, - 2B41BD2516D0E1067E35C0C6FDDD503E /* MetaWear-macOS.modulemap */, - BC4FBF214D4B82375533FAFB243220B0 /* MetaWear-macOS.xcconfig */, - 704061BDD1CE1F0A43981744793667D1 /* MetaWear-macOS-dummy.m */, - 712EC74376C3B9D41C7513E65B5619E1 /* MetaWear-macOS-prefix.pch */, - 76F8C887105E275BC127772DDBBDC260 /* MetaWear-macOS-umbrella.h */, - 5F28356CD97B4D4F9AC990968B2EB496 /* MetaWear-tvOS.modulemap */, - 95C08C954E0D8EF805456D25B2423138 /* MetaWear-tvOS.xcconfig */, - 4521EBEC23752425A390EBF45A68D602 /* MetaWear-tvOS-dummy.m */, - F568C559156B081D92E4D1F9A997337B /* MetaWear-tvOS-prefix.pch */, - 10EB41F7758F64A177CEB295D4CB8A07 /* MetaWear-tvOS-umbrella.h */, + D62B9FC9178738C2E61050D18208E991 /* cpp */, ); - name = "Support Files"; - path = "StarterProject/Pods/Target Support Files/MetaWear-iOS"; + path = platform; sourceTree = ""; }; - 1BBF56E99284521A5D2F322B66AE8C54 /* BarometerBosch */ = { + 4E9D648FD7B0BD10EE171C218F0E4936 /* core */ = { isa = PBXGroup; children = ( - 7BCAB87B93748180D874EBBE46884B60 /* MBLBarometerBosch.h */, - 2BACD2DA7C2B8550742703BBDAC9D3E9 /* MBLBarometerBosch.m */, - B503CB214B79DE6734E78AEC9800D06D /* BarometerBME280 */, - B39C8BC24CDB926B512BA7D68CE6A9BA /* BarometerBMP280 */, + D19CD743FBD20B90D19DC93AAF0D6126 /* cpp */, ); - name = BarometerBosch; - path = BarometerBosch; + path = core; sourceTree = ""; }; - 1BCBA708E5C09952713A2151F49C6266 /* MechanicalSwitch */ = { + 55DF6BF0EA7D86592CD74494F3B121C5 /* OS X */ = { isa = PBXGroup; children = ( - 03C69BBA6C8D57F081647489D73293AA /* MBLMechanicalSwitch.h */, - F22EB274B868FEB86414F9A31C438C82 /* MBLMechanicalSwitch.m */, + 404137FCCF98E34A29359A6BDB0F565D /* Cocoa.framework */, + B72BB304A3A3772DBAF8AB933B83D1D6 /* CoreBluetooth.framework */, ); - name = MechanicalSwitch; - path = MechanicalSwitch; + name = "OS X"; sourceTree = ""; }; - 1C5B0BCC8DC48D5547E89D2002EA9372 /* ANCS */ = { + 567599F5F1DF7C58A061CDE8C9CAD49F /* Pod */ = { isa = PBXGroup; children = ( - 5D41A7D85DBDE32F7AA827BE427338BC /* MBLANCS.h */, - BF8652479C009FF088D5D6709EB7CC2F /* MBLANCS.m */, - 843FE79A8036CA75D2F7C49DE6F61E82 /* MBLANCSEventData.h */, - 2E2B5EE129D83B149A06CCA4B37C894D /* MBLANCSEventData.m */, + E9D63D677FAC5999953CC365FBA2D9B7 /* LICENSE */, + B505D1D7CCC0BDB5D2AEF64EE5A1A785 /* MetaWear.podspec */, + 6FDB28922A3687B0B134D71CD4331089 /* README.md */, ); - name = ANCS; - path = ANCS; + name = Pod; sourceTree = ""; }; - 1CD26B066D497B59337BA684521CB24E /* GPIO */ = { + 59B8588B33D1149B0DAC798BC728C7B4 /* bindings */ = { isa = PBXGroup; children = ( - 0E309FA5671BF963CA0BB99B55E5F6FD /* MBLGPIO+Private.h */, - 1B7709B9EB9C483D9E88C039097AC7B6 /* MBLGPIOData.h */, - 22A04A37C49AAF2FBC39F33DF7915A35 /* MBLGPIOData.m */, - EE024F5D66D6ACBD750318E522672E62 /* MBLGPIOPin+Private.h */, - 43AD4735DDB0C827E61EAD3079BF9F48 /* MBLGPIOPinChangeEvent.h */, - A6625912CB799A2119DC206BE310F742 /* MBLGPIOPinChangeEvent.m */, + 61A46AFA8AFFD4FF5E727582A88C13CE /* swift */, ); - name = GPIO; - path = GPIO; + path = bindings; sourceTree = ""; }; - 1ED297F562F48B0AED4ACE983069F58C /* Proximity */ = { + 5A75ACEDDC9BCCF2450DF254B88707FA /* Pods-Starter-macOS */ = { isa = PBXGroup; children = ( - 17235EF49A060133B6160184A954CF3B /* MBLProximity.h */, - 7DE5DB293EAAAC3B450A32C1015827C3 /* MBLProximity.m */, - E23468344216DEB4CC9695A19D152684 /* ProximityTSL2671 */, + E6F4EA060959F762B670B3C378C2D163 /* Info.plist */, + B72CD4D599ACB5E9E52BA6A9282DDEF6 /* Pods-Starter-macOS.modulemap */, + A114BEDB49E0C7F56E6FC35F6F29317D /* Pods-Starter-macOS-acknowledgements.markdown */, + 3BCFD7CE3E626E92E92289A3CC13E8EA /* Pods-Starter-macOS-acknowledgements.plist */, + 1E42D790DFDFC3D341BF614BA451431E /* Pods-Starter-macOS-dummy.m */, + 0132A615892F722B6440618CA20791A4 /* Pods-Starter-macOS-frameworks.sh */, + 27EFFA17C81D5B5248FFA39621D24E58 /* Pods-Starter-macOS-resources.sh */, + F7106C1FC45DB0E0D978847B3902219D /* Pods-Starter-macOS-umbrella.h */, + DF18F213E6414DEC9C5F267E671C6675 /* Pods-Starter-macOS.debug.xcconfig */, + D8468FE86B85A9D95FF5DF8AFC02B3CE /* Pods-Starter-macOS.release.xcconfig */, ); - name = Proximity; - path = Proximity; + name = "Pods-Starter-macOS"; + path = "Target Support Files/Pods-Starter-macOS"; sourceTree = ""; }; - 20D9BD449A80325347A37E4D11D67C8A /* Mocks */ = { + 5A9D2B4C17C67D85ACA3E8DD57244240 /* Support Files */ = { isa = PBXGroup; children = ( - 432403714E611FF7BE6154CE961F4250 /* MBLBluetoothCentral.h */, - CA61631C3315F36BAAA72204FFFEAC2B /* MBLBluetoothCentralMock.h */, - 643206EAE8399B4005F420D6E8BA9FC5 /* MBLBluetoothCentralMock.m */, - 959AB88023DAC11C162E060851EAF248 /* MBLBluetoothPeripheral.h */, - CC5A95481671F9338C7026FE94A5DF8A /* MBLBluetoothPeripheralMock.h */, - 606EB73B59EF05A3719E7D85B32CE998 /* MBLBluetoothPeripheralMock.m */, - A8A1CFEDCF8D9E2970D011A98BA41516 /* MBLDeviceLookup.h */, - 86E1D090FC147E56789D44771ED27CC8 /* MBLDeviceLookup.m */, - 998B663E822CF022104FFFFC53613FC0 /* MBLMockPeripheralFactory.h */, - 5DC946709FD1C2A947BD1E3A79A18E21 /* MBLMockPeripheralFactory.m */, - 8F44FE55A5E98E6D8AC3E760780EF5E2 /* MBLMockUtils.h */, - A01A75152EFBAC91B18298FABEEA3047 /* MBLMockUtils.m */, - BF610CD0F7089765CB25257C4241DE88 /* MBLModuleMock.h */, - 3B00B1B667709822576FBFD9DDAB1218 /* MBLModuleMock.m */, + AAD7610CCFCD460CD48BC2B8E02B490C /* Info.plist */, + F9F2AD8E2247887940D03A91F586B691 /* Info.plist */, + 7DC733795B2958E8E3E764D69590E97E /* MBProgressHUD-iOS.modulemap */, + 24F858DBC3552FC3A13626D490C08850 /* MBProgressHUD-iOS.xcconfig */, + 310029E0CCDD8A3A5148606444F1B1C4 /* MBProgressHUD-iOS-dummy.m */, + 3A9A31AD0EE68C8AE79C6CFD87D25FDA /* MBProgressHUD-iOS-prefix.pch */, + 53FF9084A87E27C3A1F64D429748CC3B /* MBProgressHUD-iOS-umbrella.h */, + 4B0DD4498EE5BF36B58B9A99A37BAC16 /* MBProgressHUD-tvOS.modulemap */, + F8EFE83433FAE9F82AF2BCFFBCBD7F6D /* MBProgressHUD-tvOS.xcconfig */, + C9BF920E8322617E10019F6945D4B8AD /* MBProgressHUD-tvOS-dummy.m */, + E30BF8F1BFD09B665B19E1971224202D /* MBProgressHUD-tvOS-prefix.pch */, + 0D548B9327762A53B9680304A82A03AF /* MBProgressHUD-tvOS-umbrella.h */, ); - name = Mocks; - path = Mocks; + name = "Support Files"; + path = "../Target Support Files/MBProgressHUD-iOS"; sourceTree = ""; }; - 2133F2258B25A1E57BC27B849B8C9508 /* Pods */ = { + 61A46AFA8AFFD4FF5E727582A88C13CE /* swift */ = { isa = PBXGroup; children = ( - 3F6E0BDDC6BBDF57F4C51F627F641758 /* Bolts */, - 420B9DFCFC4B3BD84192E5682363F40F /* FastCoding */, - 4926E99AB5EB3A75D024ED3ABB7183C8 /* MBProgressHUD */, + 52D3F703C6314F69094A2C9602240191 /* cbindings.swift */, ); - name = Pods; + path = swift; sourceTree = ""; }; - 2205C7D42AE7075524C05937E3360237 /* MMA8452Q */ = { + 6B6019872EDBB38A3BD8FB8FF2C21A77 /* MBProgressHUD */ = { isa = PBXGroup; children = ( - BD9EE0CE69712E8C1D2AF65EC09F00B3 /* MBLAccelerometerAxisReadyEvent.h */, - F05FB3AC8B8267ADA435588032133517 /* MBLAccelerometerAxisReadyEvent.m */, - 5F4530EAE9B7DD9CFBFC2D0514B7E8A5 /* MBLAccelerometerDataReadyEvent.h */, - 665A6DBDD2A12E5E75F90AE098EFE51C /* MBLAccelerometerDataReadyEvent.m */, - C33369D8835EEDA9EEB6F1729BB9CE99 /* MBLAccelerometerFreeFallEvent.h */, - 05B9CA1F026CEB6CA68B3E741811AC90 /* MBLAccelerometerFreeFallEvent.m */, - 1081563FA3CA893D64CD1D5FB19AA7ED /* MBLAccelerometerMMA8452Q+Private.h */, - C009289D9A902BB50149D3B9C4F04D4B /* MBLAccelerometerMMA8452QFormat.h */, - F41068E6EDA92E05A9EF6BB15369A327 /* MBLAccelerometerMMA8452QFormat.m */, - 2E83CC37D40B85A98BBE1BD141F7CDF8 /* MBLAccelerometerMMA8452QOrientationFormat.h */, - 172FA2D73597B91F0A83B07FB8E84F95 /* MBLAccelerometerMMA8452QOrientationFormat.m */, - B70F33756D167A4FA310EF2A63F4E43C /* MBLAccelerometerMMA8452QRMSFormat.h */, - 6D5B7CB99D2B0CDC0A260E478493EF8D /* MBLAccelerometerMMA8452QRMSFormat.m */, - C3C764F83BE624351959E1C8A7026783 /* MBLAccelerometerOrientationEvent.h */, - A245E852C9DB3427462FC00076A2E163 /* MBLAccelerometerOrientationEvent.m */, - AA9FC2A2394A1BBF5EB1B9FADD41B5C0 /* MBLAccelerometerPackedDataReadyEvent.h */, - 305C1893654B1DF8D8533B49A105F27C /* MBLAccelerometerPackedDataReadyEvent.m */, - 89C6814E8BAF16FCCDF8F0FC61F3269E /* MBLAccelerometerShakeEvent.h */, - 7D46242C19F48BEE2D15792861D2EFDF /* MBLAccelerometerShakeEvent.m */, - 75AF7D9B0330B805F7A4C347639CF709 /* MBLAccelerometerTapEvent.h */, - B98186A44DA501640C7E89E7F811C3D3 /* MBLAccelerometerTapEvent.m */, - C6175132B1A5F37DFD658D10C3711CE7 /* mma8452q.h */, + 72203EB33CBF8CE1303572C3FCA9D3C0 /* MBProgressHUD.h */, + 889D1B5AFB407A80A8671BDC614F35D9 /* MBProgressHUD.m */, + 5A9D2B4C17C67D85ACA3E8DD57244240 /* Support Files */, ); - name = MMA8452Q; - path = MMA8452Q; + path = MBProgressHUD; sourceTree = ""; }; - 274EC815E604134184BD100F3C5C5862 /* Logging */ = { + 6BF936C9DDFE368E9B392F8BACC5D65A /* cpp */ = { isa = PBXGroup; children = ( - DF05DA6CD115AA6EEF289B14B106AD87 /* MBLLogging.h */, - DEE0335A76FAAF539900AA6D34E2F76F /* MBLLogging.m */, - BE4FB9FDAC472B413A57ED7CF855DEFD /* MBLLoggingV0.h */, - B751A124D571D4247E943A0FDA522578 /* MBLLoggingV0.m */, - 18AA1285865F5EFEA7063678C325141C /* MBLLoggingV1.h */, - 8DC83C9C0A5911866D9E26B2D0A42AC0 /* MBLLoggingV1.m */, - FF68DD5BE6FD81CB7D400B9F8020E4AF /* MBLLoggingV2.h */, - E7FCF970780F8D7CD3B2B0E5F719748F /* MBLLoggingV2.m */, + A1763084867DB07A9AC0D5EB2BADA59B /* datainterpreter.cpp */, + 918206079028D3E3B84F1977D91F4F52 /* metawearboard.cpp */, ); - name = Logging; - path = Logging; + path = cpp; sourceTree = ""; }; - 295FA200D3BF06291FC8FC0447F0062A /* BarometerBosch */ = { + 6EC226B81F01745AD0A3A4DBE6EF7C49 /* metawear */ = { isa = PBXGroup; children = ( - EF3AF0D81EBDB21ED461275346CB1158 /* MBLBarometerBosch+Private.h */, - A5F62FE96D6A8B0861EF4045CB3F6036 /* MBLBarometerBoschPeriodicAltitudeEvent.h */, - EDEAAB2A23439AA26605427965FF6482 /* MBLBarometerBoschPeriodicAltitudeEvent.m */, - 7FE4B12F90174C821CF8462ECFA4E9F5 /* MBLBarometerBoschPeriodicPressureEvent.h */, - 19B4F38DF1F6E05EAECE968DE93EB673 /* MBLBarometerBoschPeriodicPressureEvent.m */, + 4E9D648FD7B0BD10EE171C218F0E4936 /* core */, + 2FB39673F2F6D3F83209EC25F82006EB /* dfu */, + 75ED0ED4CFA0569F1549D127E3397639 /* impl */, + 41E49A628A252A00C15B1547D777D347 /* peripheral */, + 44F8A2DE5213F6856004B40BE11E05AD /* platform */, + D860AB2696E6ED4429B11DE94AC11697 /* processor */, + 3471460E8A4BCE1F0ACA6DFC8B8C774E /* sensor */, ); - name = BarometerBosch; - path = BarometerBosch; + path = metawear; sourceTree = ""; }; - 2AAD5A6E4B09BBEC86F3E0DB5269858A /* Categories */ = { + 7206B2AAF0BF7EEB321A466230106D2B /* cpp */ = { isa = PBXGroup; children = ( - F138F421CCDB2761404A746390697EA8 /* BFTask+MBLExtensions.h */, - CA08FE632C7A756D3C35099AE7B05519 /* BFTask+MBLExtensions.m */, + 6819E4164206BD9EC52CB720FD418E2E /* haptic.cpp */, + 2C7C7BA43DBD7C6F34ECF21C7D894199 /* ibeacon.cpp */, + 8C3DFB5E0AC5A7457A95A380D5713014 /* led.cpp */, + D58198726650027243B7558C21A0FCEC /* neopixel.cpp */, ); - name = Categories; - path = Categories; + path = cpp; sourceTree = ""; }; - 2AED21062115151FABCBBE7AB7F8E09F /* Gyro */ = { + 7247982D7217EA454380D38476352368 /* Development Pods */ = { isa = PBXGroup; children = ( - 4561FB74CFACF04C35AB74288309BE32 /* MBLGyro+Private.h */, - C6ED4316FF4C55F5D679E4A3A2E1BCC5 /* MBLGyroData+Private.h */, - 013A6D6A67B66AD3C3D1409D76EAC190 /* GyroBMI160 */, + AA3F035E511E79A62116C9FFF133C46D /* MetaWear */, ); - name = Gyro; - path = Gyro; + name = "Development Pods"; sourceTree = ""; }; - 2E68171A97ED6B7D37B9E8A6DD37486F /* LED */ = { + 75ED0ED4CFA0569F1549D127E3397639 /* impl */ = { isa = PBXGroup; children = ( - 52B7C1BF89D1729EB27F1B94086AF8E4 /* MBLLED.h */, - FC6957324B1EF69DC57A843B7DF24A0B /* MBLLED.m */, + 6BF936C9DDFE368E9B392F8BACC5D65A /* cpp */, ); - name = LED; - path = LED; + path = impl; sourceTree = ""; }; - 3612B25A58FF454AF5FF71C0A2A6FF7D /* Conductance */ = { + 76A312A25491A389C239B222BF6AF4CE /* Pods-Starter-tvOS */ = { isa = PBXGroup; children = ( - 3FE649F56CC2D2EDD1177FA9BF749833 /* MBLConductanceData.h */, - FBE75E185B5C873EDD2E213F6BABCFEB /* MBLConductanceData.m */, + 8E60ECB44967A7A00126706C51E87938 /* Info.plist */, + 5E9BD62FE3788AD9D87187C280D43992 /* Pods-Starter-tvOS.modulemap */, + D586A6D4ACA652C48A74545356A855AD /* Pods-Starter-tvOS-acknowledgements.markdown */, + E7D9213F5833AEA5589825DBA31F0DA8 /* Pods-Starter-tvOS-acknowledgements.plist */, + 8D3E2113D269B645DA84C64DE31DEEE4 /* Pods-Starter-tvOS-dummy.m */, + 92F037C92AD922E2A851E87CBD31D022 /* Pods-Starter-tvOS-frameworks.sh */, + A14B4EF8129FE5C2A096AC1F897D4BEF /* Pods-Starter-tvOS-resources.sh */, + F385036DA00AF006CFC0253FDB03CE12 /* Pods-Starter-tvOS-umbrella.h */, + E714D8E62191DAAB6CE7AC6D2B63D314 /* Pods-Starter-tvOS.debug.xcconfig */, + 5BAE2AE51522CFFAAC13455FB6C4C59A /* Pods-Starter-tvOS.release.xcconfig */, ); - name = Conductance; - path = Conductance; + name = "Pods-Starter-tvOS"; + path = "Target Support Files/Pods-Starter-tvOS"; sourceTree = ""; }; - 3934AFEAC706FBA5EA3BC89E2433ACBD /* iOS */ = { + 7A1965169B8EAE06D19E8D8006FEDE70 /* Bolts-Swift */ = { isa = PBXGroup; children = ( - E450B72E674058A5FF52327DD7EC821F /* CoreBluetooth.framework */, - 546CD238C0E754C135E34A9112607EDB /* CoreData.framework */, - 2C36465A5F194D2A078B19C566482E5F /* CoreGraphics.framework */, - 1C0572D9E03034C6B04220BC00D04F3A /* Foundation.framework */, - 34E952C0E11A49FB361052072B6AE106 /* QuartzCore.framework */, + EC5707BBBC2BC238D1495B36C720B2D3 /* Errors.swift */, + 4FF1EAA70E67E69AA77BB00DA24042DA /* Executor.swift */, + E276DFEEBCD2D36D1990F0819B165019 /* Task.swift */, + A646D30D3CB45C6A3A53BD186EB0FCC3 /* Task+ContinueWith.swift */, + A8BC9C341CCDE7885327FA6E387D48F1 /* Task+Delay.swift */, + 466D90E01C3417843BB962C73149971D /* Task+WhenAll.swift */, + DF344F7213D6BE97247B7AB9E5D59D9A /* Task+WhenAny.swift */, + EE221359457B938A7422752010173946 /* TaskCompletionSource.swift */, + 29A048560CF36A63675257AFE948D2C8 /* Support Files */, ); - name = iOS; + path = "Bolts-Swift"; sourceTree = ""; }; - 3C67331E27DBFA45032DC600B3E0F85E /* Settings */ = { + 7DB346D0F39D3F0E887471402A8071AB = { isa = PBXGroup; children = ( - 78645BA6A31BDB069A935A83150F934A /* MBLSettings+Private.h */, + 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, + 7247982D7217EA454380D38476352368 /* Development Pods */, + C5D2302027C8051D0D877288131A3C42 /* Frameworks */, + D9709E493ABC9961A0CDD032C00CF694 /* Pods */, + 9D18BCDB8BA397A99D68C7EEA19F73DA /* Products */, + 937C40B9883C64AE6D3DD95448678856 /* Targets Support Files */, ); - name = Settings; - path = Settings; sourceTree = ""; }; - 3F6E0BDDC6BBDF57F4C51F627F641758 /* Bolts */ = { + 8135683EDBE60509F80F2ECC258CEC42 /* tvOS */ = { isa = PBXGroup; children = ( - D9A4E7405DF308DB646C2B9BBC35F6A4 /* Support Files */, - C6BE64DE11FB0BD07015CF878BAE278C /* Tasks */, + 8B1217B5C1A00167FAB2A9BAAEA43DF9 /* CoreBluetooth.framework */, + D525B0CEEA87DB0DF03D2BEE816E83AC /* CoreGraphics.framework */, + 1BD2C5138C17A6A856B62D379A4C12D1 /* Foundation.framework */, + 490648870DA13732747D243777EC5FC7 /* QuartzCore.framework */, ); - name = Bolts; - path = Bolts; + name = tvOS; sourceTree = ""; }; - 414773B8D9CAF4A7B675418AEB74ABB2 /* AccelerometerBosch */ = { + 937C40B9883C64AE6D3DD95448678856 /* Targets Support Files */ = { isa = PBXGroup; children = ( - F44C28B27EDCD1478ADEFADF3B1B3362 /* MBLAccelerometerBosch.h */, - EAACFD7B01AD5B5FCDCC03A40F40FF14 /* MBLAccelerometerBosch.m */, - 43D3E04CB05CB608FC44EF00F5EE1102 /* MBLAccelerometerBoschFlatData.h */, - A36208353F9163C3EBFC7FF5211D93EE /* MBLAccelerometerBoschFlatData.m */, - EC92678BE93C7CF96A2F914F9952499D /* MBLAccelerometerBoschFlatEvent.h */, - DF2D88DE8088065E8B624DDFBE58526E /* MBLAccelerometerBoschFlatEvent.m */, - DBA14B83EB16970888BC823DCB27D0DE /* MBLAccelerometerBoschLowOrHighGEvent.h */, - 081D7D7A834CA695B5960AF3CB99F844 /* MBLAccelerometerBoschLowOrHighGEvent.m */, - EF6751A4DC10EFEC4854078BC5450F20 /* MBLAccelerometerBoschTapEvent.h */, - CDFC91FEE47741BE83E3B4DA6ACA3891 /* MBLAccelerometerBoschTapEvent.m */, - 0390D50E07FFE9A85A668FD9D10EE7D2 /* AccelerometerBMA255 */, - A1C6DEB717710633CB5DC63362944AFE /* AccelerometerBMI160 */, + 07EFEB9DE54DA44F8BB3F13A6AEA25D4 /* Pods-Starter-iOS */, + 5A75ACEDDC9BCCF2450DF254B88707FA /* Pods-Starter-macOS */, + 76A312A25491A389C239B222BF6AF4CE /* Pods-Starter-tvOS */, ); - name = AccelerometerBosch; - path = AccelerometerBosch; + name = "Targets Support Files"; sourceTree = ""; }; - 41FA31E72E559A78F5897630375DA7DC /* AccelerometerBMI160 */ = { + 9D18BCDB8BA397A99D68C7EEA19F73DA /* Products */ = { isa = PBXGroup; children = ( - 56CF8DD02BEFD38F8B3A67A5070F0229 /* MBLAccelerometerBMI160+Private.h */, - 062038508A0820C10A3AFACC41299093 /* MBLAccelerometerBMI160MotionEvent+Private.h */, - AC5FCD84CB9C3A65FFB4D7339F725E58 /* MBLAccelerometerBMI160StepEvent.h */, - DC9439ACEFDC7053DDA4F988438A0743 /* MBLAccelerometerBMI160StepEvent.m */, + 705CAAE99B961363ADFAAA8A1048FD4B /* BoltsSwift.framework */, + DD52F8BEAA10A37AF470D939730D0BB5 /* BoltsSwift.framework */, + 5B90B7868113EDFBF9D11063CBB69049 /* BoltsSwift.framework */, + 842A202188A000EC5EBB50C80C529FE2 /* MBProgressHUD.framework */, + A38D6F688CF7790163295776066F18ED /* MBProgressHUD.framework */, + 97E01BEBA7EBC898B3E81DF6073F7623 /* MetaWear.framework */, + 51DA3B6E8BBC481F15FF2D11EED48B8B /* MetaWear.framework */, + AAB0466881011F80203B86C847A1B271 /* MetaWear.framework */, + 1F383718CDADA26D99D724827753BA93 /* Pods_Starter_iOS.framework */, + 34C9FACD4A56F513121B81EAF1DEF1F7 /* Pods_Starter_macOS.framework */, + 26CCE0191F2361E7AB9EE12589BA02B3 /* Pods_Starter_tvOS.framework */, ); - name = AccelerometerBMI160; - path = AccelerometerBMI160; + name = Products; sourceTree = ""; }; - 420B9DFCFC4B3BD84192E5682363F40F /* FastCoding */ = { - isa = PBXGroup; - children = ( - AF2F21AD149A6195BDBBEDDB8CA77DA8 /* FastCoder.h */, - DA61D4744EC46627267FA744013E0589 /* FastCoder.m */, - 8017BC4FACFF722AE8696F6C57522029 /* Support Files */, + A74522E22C9330823E5B0C26FF40F8C5 /* Support Files */ = { + isa = PBXGroup; + children = ( + B65A1ED3EDB60EE66D08199CB4BCAE21 /* Info.plist */, + 213A9EDD6F13DF9360C45C3D85BE0C11 /* Info.plist */, + 6988820CD6E9588EE424222D2F38E804 /* Info.plist */, + CBD1A3D65CA5F8BF063DE532825B7BA5 /* MetaWear-iOS.modulemap */, + F0BD512EE716C3130CE6A20F47366614 /* MetaWear-iOS.xcconfig */, + 3F077D08170C67CC57E1655D199AD171 /* MetaWear-iOS-dummy.m */, + 2D66EDF6CD239E48C096108638399B3A /* MetaWear-iOS-prefix.pch */, + B291B9AC61070731F448C9AA7833A048 /* MetaWear-iOS-umbrella.h */, + CEC34A259355D0D985D6FB4490868F26 /* MetaWear-macOS.modulemap */, + 1D062BDD247903E1640A8D1C172EE28C /* MetaWear-macOS.xcconfig */, + F21AECA22893849D2E7A51A57AEEC4DF /* MetaWear-macOS-dummy.m */, + A9E4B61756F0D7D5866A5911E1D726C3 /* MetaWear-macOS-prefix.pch */, + 3A2CB2D775ED4EBD22C0A2BF365A589E /* MetaWear-macOS-umbrella.h */, + 53E2612D123E29B78276E500B4C653CD /* MetaWear-tvOS.modulemap */, + A35DD3123E1FDD9A3C4EB60950116376 /* MetaWear-tvOS.xcconfig */, + B0CEFA6311423CCFBE7E6E78A29E99A7 /* MetaWear-tvOS-dummy.m */, + 3CD06931C14D017E65C4C790E8119722 /* MetaWear-tvOS-prefix.pch */, + E7EE95CCAA9DF84E72BFFE29E793292A /* MetaWear-tvOS-umbrella.h */, ); - name = FastCoding; - path = FastCoding; + name = "Support Files"; + path = "StarterProject/Pods/Target Support Files/MetaWear-iOS"; sourceTree = ""; }; - 484AE933069BDBA645EED1A4CE4588F1 /* iBeacon */ = { + AA3F035E511E79A62116C9FFF133C46D /* MetaWear */ = { isa = PBXGroup; children = ( - 656F14665616943F45AC63474738055B /* MBLiBeacon.h */, - D1FF06642DBC4FFC0B2B829104D421CD /* MBLiBeacon.m */, + D3926E53AD526867EB0CD0F243D8EA37 /* AsyncUtils */, + CDB0DEBB1EB0B2658D167D47207CF246 /* Core */, + 567599F5F1DF7C58A061CDE8C9CAD49F /* Pod */, + A74522E22C9330823E5B0C26FF40F8C5 /* Support Files */, + C8D51BA4568E44684423C2B6179382D9 /* UI */, ); - name = iBeacon; - path = iBeacon; + name = MetaWear; + path = ../..; sourceTree = ""; }; - 4926E99AB5EB3A75D024ED3ABB7183C8 /* MBProgressHUD */ = { + B15D0E85509B907166F262CC8494362C /* iOS */ = { isa = PBXGroup; children = ( - ACE63D2BE2BD0FEFC6773E8A89B7A5F7 /* MBProgressHUD.h */, - 4F138D366CF5295E4813996DDBB5E8A9 /* MBProgressHUD.m */, - 878DDE793E52157216B6B802ACE95976 /* Support Files */, + A14DC32A908B09C6352731786829F092 /* CoreBluetooth.framework */, + 2B03D0D9D3B4E71ADC714860AE38A3E7 /* CoreGraphics.framework */, + 4A896293036ACBC627931964FC081F7A /* Foundation.framework */, + 0A47DCC5A27918EB38C8FAFB748D5830 /* QuartzCore.framework */, ); - name = MBProgressHUD; - path = MBProgressHUD; + name = iOS; sourceTree = ""; }; - 4F5B2715331C346984F483129456886D /* AmbientLightLTR329 */ = { + B6D6570641B94D57D19F57675DAEBE0B /* Core */ = { isa = PBXGroup; children = ( - 667FE6FDD9DCB968C5507339B636F7D2 /* MBLAmbientLightLTR329.h */, - BEF5F7E8303E99B87637CDC4567F15E3 /* MBLAmbientLightLTR329.m */, + 5443759FFFF9BF343BFF667A06E6EE51 /* Bridging.swift */, + 4B6D30663A4F7C3465C8AC65DF0B96B2 /* CBUUID.swift */, + 051182652C17095A392B873BCDD487E9 /* DeviceInformation.swift */, + 8590EE580A6D609C522FBB7D2D83F1F3 /* FirmwareBuild.swift */, + 29931D8DBBB32F6EF417131198573486 /* FirmwareServer.swift */, + 661656E42C39752CA90CCAE32C39B7FF /* LogDelegate.swift */, + 40929D407612A74D13A8821778981AD3 /* MblMwGattChar.swift */, + 0A289BA07E505F658D8CE9EEA1D6F1BB /* MetaBootFinder.swift */, + 14B78E47F66C7BB1E6DA20CD54A85A4B /* MetaWear.swift */, + 9F0D01A3B7B92C9EBFA0EFB1881AFF23 /* MetaWearData.swift */, + 5AAD507FDC13FB08A8D3FD8751B225D1 /* MetaWearScanner.swift */, + F25852C48E7333ED543B72384B05EF4F /* String+VersionCompare.swift */, ); - name = AmbientLightLTR329; - path = AmbientLightLTR329; + name = Core; + path = MetaWear/Core; sourceTree = ""; }; - 5430AD0E1D77A74AAB0E75E675B3597C /* Development Pods */ = { + BEDB84DDA48AFD56BB788EDA916D5E37 /* cpp */ = { isa = PBXGroup; children = ( - 9EB48862E484DC6A3E8A96616D4377B3 /* MetaWear */, + CB868C271ADD0D99C1C4A385A1A48623 /* accelerometer.cpp */, + 501E03DB9586288A2EDD09ADB1926F9B /* accelerometer_bosch.cpp */, + CF4406FCF209E179BD2AC06B93CA8E4E /* accelerometer_mma8452q.cpp */, + C04390A32ED6007EB4F966E63E0FBDE5 /* ambientlight_ltr329.cpp */, + 693352717EF35F2AEF792660257CC4F1 /* barometer_bosch.cpp */, + FF465F76A28B3143515C18F384C09073 /* colordetector_tcs34725.cpp */, + D26646F8AEC4B507432302E9A08D48C0 /* conductance.cpp */, + 0869A2B29A2A21CABF62ADF6DDB71E03 /* gpio.cpp */, + B904A6AE7F408F32FF118E2851DF47B4 /* gyro_bmi160.cpp */, + 9950899B774D06421D049FDF2DCC0BFC /* humidity_bme280.cpp */, + E118D5F1C09D22C0DB25BBA0350D5A31 /* magnetometer_bmm150.cpp */, + FAE9D19354AA80B8266A7A54A31DCECE /* multichanneltemperature.cpp */, + 876A2BB8D0772DC29DEA9A493B6B6AF1 /* proximity_tsl2671.cpp */, + 4A80341133AC9664CE1D6A3DA6B60866 /* sensor_fusion.cpp */, + ED9057C240FB0E1B1C51B1D479331FA8 /* serialpassthrough.cpp */, + B4ED30AEE8A78DA3FCC439D6DBBFFE55 /* switch.cpp */, + 05EB1C5C06110053BF5906B362C355AB /* utils.cpp */, ); - name = "Development Pods"; + path = cpp; sourceTree = ""; }; - 5A09CEAD5C02DDF8B8CBDB9464B0049D /* Frameworks */ = { + C5D2302027C8051D0D877288131A3C42 /* Frameworks */ = { isa = PBXGroup; children = ( - 2FF21602304B9BDD767C7D52A9274044 /* Bolts.framework */, - 01673900EEBEFA58AA0306E3FDE7950D /* FastCoding.framework */, - 3934AFEAC706FBA5EA3BC89E2433ACBD /* iOS */, - 86F248201877BF60643508C167A84C82 /* OS X */, - 10561D9D25872B6F96600A82F156C029 /* tvOS */, + EE58934D390C197F236A2AFFB189AABB /* BoltsSwift.framework */, + B15D0E85509B907166F262CC8494362C /* iOS */, + 55DF6BF0EA7D86592CD74494F3B121C5 /* OS X */, + 8135683EDBE60509F80F2ECC258CEC42 /* tvOS */, ); name = Frameworks; sourceTree = ""; }; - 5E4EF234E80DF8A473CD25B68AFB5CDB /* Neopixel */ = { + C8D51BA4568E44684423C2B6179382D9 /* UI */ = { isa = PBXGroup; children = ( - 8453DB9F88A660F88AB6F94B999E98B6 /* MBLNeopixel.h */, - D35056D85FD1D73A2248A8740AD67A57 /* MBLNeopixel.m */, - 0EEE9EB301CC326AF56A548EF8E7ACD9 /* MBLNeopixelStrand.h */, - CC931B2F13890FA224324A2D657F2483 /* MBLNeopixelStrand.m */, + AD95C3625CEBFBEF1B885D005A07C417 /* ScannerModel.swift */, ); - name = Neopixel; - path = Neopixel; + name = UI; sourceTree = ""; }; - 5F02343083EA9E3A561D044D0557F9EE /* Temperature */ = { + CDB0DEBB1EB0B2658D167D47207CF246 /* Core */ = { isa = PBXGroup; children = ( - 3A778268E49E66EBB45C0785412E1303 /* MBLExternalThermistor.h */, - 5A01A4D7F336CD0F0E9091B7CC6B9648 /* MBLExternalThermistor.m */, - A90CBC9125428FB3F9EA77F260B54EAB /* MBLTemperature.h */, - 73DE0D5505D394B9DC4A462D05EFA0E1 /* MBLTemperature.m */, + B6D6570641B94D57D19F57675DAEBE0B /* Core */, + 2F0D07C93402D2BA7E96577A095A0FE9 /* MetaWear-SDK-Cpp */, ); - name = Temperature; - path = Temperature; + name = Core; sourceTree = ""; }; - 5F30208C2980493B5C807036C4EED874 /* Internal */ = { + D19CD743FBD20B90D19DC93AAF0D6126 /* cpp */ = { isa = PBXGroup; children = ( - A61436940AE0341DF584FA08C299EE68 /* Categories */, - 7C79314CFBEB03EE92CAB366C196BC51 /* Core */, - E31F8863EA942A2987750E6286D96B8C /* DFU */, - 20D9BD449A80325347A37E4D11D67C8A /* Mocks */, - 700A115BB145886A372461925CDA5EB4 /* Modules */, + F81A117E17C144C09A8A90E6CA8302B3 /* anonymous_datasignal.cpp */, + 4581E0D330D5693825305B8E0BC52675 /* datasignal.cpp */, + 2BBC05A8A0FD4FF2E64ED47558DD4C67 /* debug.cpp */, + ABDA1ECA531B3EC4A6BD92954C4799A4 /* event.cpp */, + 3A3BBAD43EAB96D4142D7666B9928922 /* logging.cpp */, + 3DFB479038A1252E6C92F93E71FD0C0A /* macro.cpp */, + 45194A165F19A3023ECCEB2CA456742D /* moduleinfo.cpp */, + 3A0BB1A52FA6EAD970C666D3F598E781 /* responseheader.cpp */, + AB9B16C0D7EF98BBEB8AB328589B1A03 /* settings.cpp */, + EDDF786AFD200556B2AA1E5D7B543E9C /* timer.cpp */, + 23DC9A1994E72BE8BB7FE6D45EACE46B /* version.cpp */, ); - name = Internal; - path = MetaWear/Internal; + path = cpp; sourceTree = ""; }; - 6216D2013BD27554451D9B77DDC4B9BB /* AmbientLight */ = { + D3926E53AD526867EB0CD0F243D8EA37 /* AsyncUtils */ = { isa = PBXGroup; children = ( - 82CE7DAC5F60556447508756C4E8F51D /* MBLAmbientLight.h */, - 52B98D79F80CCB0DF0D3549529A16F8F /* MBLAmbientLight.m */, - 4F5B2715331C346984F483129456886D /* AmbientLightLTR329 */, + 22C7E75F6DCD178EDC970498C1F2C72C /* MblMwDataSignal+Async.swift */, + 194CA0268C374020A0C47FCC1334B978 /* MblMwEvent+Async.swift */, + DFE631152B1B89B7AC6B37CFF8E00E84 /* MetaWear+Async.swift */, + C636B15978D834652B0A158570ED541B /* MetaWear+LED.swift */, ); - name = AmbientLight; - path = AmbientLight; + name = AsyncUtils; sourceTree = ""; }; - 65D6F87BF43860869253D448AB79B615 /* AccelerometerBosch */ = { + D62B9FC9178738C2E61050D18208E991 /* cpp */ = { isa = PBXGroup; children = ( - 9F27F47FC1321AD27483B719A0C9CADA /* MBLAccelerometerBosch+Private.h */, - 9D9CF207753D00EA14C7FF077C2A7B77 /* MBLAccelerometerBoschAxisReadyEvent.h */, - ADA36E2FB695216C6920CF5C44FADC0D /* MBLAccelerometerBoschAxisReadyEvent.m */, - 23916678C67AC667410DAAECAFDBFA2F /* MBLAccelerometerBoschDataReadyEvent.h */, - 19E1E8CEA308C7ED9F28151A953C1AD6 /* MBLAccelerometerBoschDataReadyEvent.m */, - EDA4D0170274F95965943E2192C6DC68 /* MBLAccelerometerBoschFlatData+Private.h */, - 057A9088769B19509C3B0725D9E91BC3 /* MBLAccelerometerBoschFlatEvent+Private.h */, - EB490BFEC65DD75C59048669C60EADC0 /* MBLAccelerometerBoschFlatFormat.h */, - 23D4B75048CEA0D5AB05EAB2BD22D828 /* MBLAccelerometerBoschFlatFormat.m */, - 289EFCFE9074EB09D61042A67F1CB9AC /* MBLAccelerometerBoschFormat.h */, - E64B6F84CEA9ED48728E33BC7316B4EC /* MBLAccelerometerBoschFormat.m */, - 71D482429392C19BF45BE60346D6986E /* MBLAccelerometerBoschLowOrHighGEvent+Private.h */, - BC3658C58BC69AAA5EF88DA0D89F8C1F /* MBLAccelerometerBoschOrientationEvent.h */, - 903BBAC1CBE28E72767F13680C7D7260 /* MBLAccelerometerBoschOrientationEvent.m */, - EE6303D6B2C2E393A3B84CCF481AA0DF /* MBLAccelerometerBoschOrientationFormat.h */, - 9FE8178DDBF5ECA3097B097B4826CBA7 /* MBLAccelerometerBoschOrientationFormat.m */, - A474AB6E2E2CA0DA6C14DBEB43951265 /* MBLAccelerometerBoschPackedDataReadyEvent.h */, - F69E657022FBB3BFC4F9645E201C9A41 /* MBLAccelerometerBoschPackedDataReadyEvent.m */, - DC37BD9E46482A494DC7492294708EAF /* MBLAccelerometerBoschRMSFormat.h */, - 54E13DFD9F8B34FA4B720005DC6E6BAD /* MBLAccelerometerBoschRMSFormat.m */, - BA9618B3D4982299C4F916FA38BE83A2 /* MBLAccelerometerBoschTapEvent+Private.h */, - F2BAD22EEE41DC67118676F659BB7CCA /* AccelerometerBMA255 */, - 41FA31E72E559A78F5897630375DA7DC /* AccelerometerBMI160 */, + 7DD014C32A513BD77C3DEB87CAEAE7F8 /* async_creator.cpp */, + 00DFF052541C3386369F9784EB8627D0 /* memory.cpp */, + A4FB4E705B69B6F8C5C09102B11CEE6F /* task.cpp */, + 85A6184B78942AC84F08C0339440A99E /* threadpool.cpp */, ); - name = AccelerometerBosch; - path = AccelerometerBosch; + path = cpp; sourceTree = ""; }; - 6FFA5A7C64868E26C3F61DFD666BFAEA /* GyroBMI160 */ = { + D860AB2696E6ED4429B11DE94AC11697 /* processor */ = { isa = PBXGroup; children = ( - 533C556DA7434A78A2661C6C9D58B4B3 /* bmi160.h */, - DE97623D119021B33454944A2AADDF24 /* MBLGyroBMI160.h */, - 5FEE54F150DA612584E712A898EFEFC7 /* MBLGyroBMI160.m */, + E6860681661089AA6E41A0E2EE719AD5 /* cpp */, ); - name = GyroBMI160; - path = GyroBMI160; + path = processor; sourceTree = ""; }; - 700A115BB145886A372461925CDA5EB4 /* Modules */ = { + D9709E493ABC9961A0CDD032C00CF694 /* Pods */ = { isa = PBXGroup; children = ( - F1A5A787A8F85ADF0EDB81501EEC7D7B /* Accelerometer */, - D13E55A1A994BDF462530F7AF0A9DB99 /* AmbientLight */, - CC69295C8068AFA5889D8832CEADF5E1 /* ANCS */, - 9D1F6D6AE3E95D386A9640C764E04397 /* Barometer */, - C59AD38C27CF309A90B6D1033A52152B /* Command */, - 3612B25A58FF454AF5FF71C0A2A6FF7D /* Conductance */, - DF83C9DBEDFCAEA1D727AF679B6BB3EB /* DataProcessor */, - 1CD26B066D497B59337BA684521CB24E /* GPIO */, - 2AED21062115151FABCBBE7AB7F8E09F /* Gyro */, - D621AD9A5C8B97EF2F2DA8DD41B2D2C6 /* Hygrometer */, - B699CAA521B9FC123F5368106327791E /* LED */, - 274EC815E604134184BD100F3C5C5862 /* Logging */, - 0ECF95738EE35E7353800A66913ABC66 /* Macro */, - 7D35FA47099E190F965704C1EFCA64E9 /* Magnetometer */, - 829DCFCE7EAF17E8981596847B918E1D /* Neopixel */, - 88E543103CCDFD770BDC5C9A0574211B /* Photometer */, - EE64BE91B58BCD2FCB39088EC936D944 /* Proximity */, - BBDC63DAA4BAD9875B2432899C408879 /* SensorFusion */, - F37755077C451C16FCA7E460B5722E18 /* Serial */, - 3C67331E27DBFA45032DC600B3E0F85E /* Settings */, - F19EEEE05C2453574BA4BC32AEA46AE9 /* Temperature */, - A6F08AE9B90B04E3323957DA5383FC6E /* TestDebug */, - 02D6E720DA7AEC17E4449A6EC2F510B9 /* Timer */, + 7A1965169B8EAE06D19E8D8006FEDE70 /* Bolts-Swift */, + 6B6019872EDBB38A3BD8FB8FF2C21A77 /* MBProgressHUD */, ); - name = Modules; - path = Modules; + name = Pods; sourceTree = ""; }; - 732829F777C9A16F1154C905C2476014 /* Core */ = { + E6860681661089AA6E41A0E2EE719AD5 /* cpp */ = { isa = PBXGroup; children = ( - 4EE1B00B5579325E44B4DED36CD9BA05 /* MBLAnonymousEvent.h */, - 108CC179687676A0F35B7BF2F9B51837 /* MBLAnonymousEvent.m */, - B73063C453BC313606EEF0C5A59ED58D /* MBLConstants.h */, - 4EAD9DEE69ECAFAEAFE644683B2694CD /* MBLConstants.m */, - 2E006E0231DC90761DDF2F055756ED21 /* MBLData.h */, - 568592B0D644EB12F7886E0BC67E6EF3 /* MBLData.m */, - A43DC64101E0EE568BE151B06C3D40D0 /* MBLDataSample.h */, - 7AB01530A4D412313CD65CD892515E4F /* MBLDataSample.m */, - 9305641039886B57EA88E02E7D780CCD /* MBLDataSwitch.h */, - A8ECBD143ADFBD8D03EDA03D0B54B27C /* MBLDataSwitch.m */, - 0839AC074757922706A96E05EB0C5F43 /* MBLDeviceInfo.h */, - 174A108EC154260C6B810F2E28AB7C05 /* MBLDeviceInfo.m */, - 6DCCCD6B06E374DB287F0B2BA79751C3 /* MBLEntityEvent.h */, - 69F1D92E6B0195B84FE57CEC17068B37 /* MBLEntityEvent.m */, - 594D339B971E1A22541A55D46D2A0010 /* MBLEntityModule.h */, - D909879784C6FEE4ACCD029C6D5086FC /* MBLEntityModule.m */, - 6509C8C65CA28F032A641699AEFF71CE /* MBLEvent.h */, - B4CFEFE8770D9AD0341E24BD427A3AB6 /* MBLEvent.m */, - AB6947AB6F38CB196184CF68AA77E2AB /* MBLFilter.h */, - 9911EE11BDD37E8BC3F8EB29158E0C76 /* MBLFilter.m */, - D317640CB86BA28327C329AD150CA58E /* MBLFirmwareUpdateInfo.h */, - F5403878E25BFCDFDFB2721108518D65 /* MBLFirmwareUpdateInfo.m */, - A66B7CD4ADF832A51D1279005F5F16D2 /* MBLMetaWear.h */, - BF82953F90A945F59016883056756DE7 /* MBLMetaWear.m */, - 1A1BBDE1DD563096720D8D866FF4DB4F /* MBLMetaWearManager.h */, - 10FD2A19A75CE29E07394D16F34BB579 /* MBLMetaWearManager.m */, - B9DE4E899E4844655FC917D8D457823C /* MBLModule.h */, - A175A4B71EE30DDD2D566A73DBEC1B85 /* MBLModule.m */, - 10452424C154C0C85FEFD3422604FFFD /* MBLNumericData.h */, - F3085F6D2203E0F1C1703103D86EAE56 /* MBLNumericData.m */, - 6DDF8C838AC5CDC445B42F979FBDAC51 /* MBLRegister.h */, - BF469711620C344E8237ACB9E37488F5 /* MBLRegister.m */, - 1397B8415354E57CA0415FD804EAA630 /* MBLStringData.h */, - DC5B44476CD58A5D5ED7C806E7C65D47 /* MBLStringData.m */, + 58EF4EC9CB055DE315985DF4AEA02181 /* dataprocessor.cpp */, + 29D0DD783A789BE3E269ACE77815B0AD /* dataprocessor_config.cpp */, ); - name = Core; - path = Core; + path = cpp; sourceTree = ""; }; - 77BB0B07734EC6725EDBD2503C007591 /* I2C */ = { + ECE6DB6ADB13FC07D18E640EFC7A9657 /* src */ = { isa = PBXGroup; children = ( - DB0E435AD114EF383A969D5A426FE268 /* MBLI2C.h */, - 29215526A5413BB1A1A9E46FA68490BA /* MBLI2C.m */, + 6EC226B81F01745AD0A3A4DBE6EF7C49 /* metawear */, ); - name = I2C; - path = I2C; + path = src; sourceTree = ""; }; - 7C79314CFBEB03EE92CAB366C196BC51 /* Core */ = { + FA6F86DF0B80BADE9CD07B7285D992CA /* cpp */ = { isa = PBXGroup; children = ( - C4FE8BC8F7BFCBEAF055DBFCFEC485A0 /* MBLAnalytics.h */, - 8FA854A9B3FBED4784EE1CB16D572BD4 /* MBLAnalytics.m */, - 640013670E530E919FB4A9E04E8E67EC /* MBLAnonymousEvent+Private.h */, - 6DB01C6F682F5A01DBF66F2B08662B46 /* MBLConstants+Private.h */, - C4B3A7CE6F23ABA370AA9B3A15AB2B67 /* MBLConversion.h */, - 281F942BD483B5AA0F5F85DD304B6613 /* MBLConversion.m */, - D6ACD4F53E85B97F12F359D00E79C610 /* MBLData+Private.h */, - 6259021266C0186D832790E6BADA3B3F /* MBLDataSample+Private.h */, - C1C99B28231BEF46531726251543F95D /* MBLDependentData.h */, - 91BAE67E444C7034D747E48A7F4A4F47 /* MBLDependentData.m */, - 3E6279DDBA7C4A8EF8080CAB21F48472 /* MBLDispatchQueue.h */, - 41D4C40BFB8F6904AB91AFDE99FBF1BA /* MBLDispatchQueue.m */, - C00DFBCA78DE12AC8636FF801CD7203A /* MBLDownloadOnlyEvent.h */, - 2760600C17CE3E9ED9744899937B5799 /* MBLDownloadOnlyEvent.m */, - B00644538655FE4FD0C408206C17228D /* MBLEntityEvent+Private.h */, - 0F160C4428FBCC3B870F6B4338827F57 /* MBLEntityModule+Private.h */, - 8D055002FFB17C8EFDD48660E35E6005 /* MBLEvent+Private.h */, - 2F55C51DAE936C836EF541084E24B60E /* MBLFilter+Private.h */, - 55E7A40F99505A0B7B1F6E140808CFE7 /* MBLFirmwareBuild.h */, - D68E84770A265909E54F38978E25756E /* MBLFirmwareBuild.m */, - 565651CEC978D90131FF34714B7313F5 /* MBLFormat.h */, - 01FEC95AFD637366A6C38E82EFCA1892 /* MBLFormat.m */, - 6821E56C1E7FF7715251DC8A23A477ED /* MBLLogger.h */, - 9411060398DF728E2336B402749A6090 /* MBLLogger.m */, - 379385238BD2CE20DA91AB120E2530B9 /* MBLMacAddressFormat.h */, - 9046915089B8C866F632E74C372B90F6 /* MBLMacAddressFormat.m */, - 268C80524B2B2E30FEBB681C265CA05A /* MBLMetaWear+Private.h */, - 54F14BC835BED9B7143848F9E2E659E7 /* MBLMetaWearManager+Private.h */, - EFD7C01C3F8EC1E4BA465ACABE8FEA74 /* MBLModule+Private.h */, - B0CC6647544C92E237C5E58817ABF815 /* MBLModuleInfo.h */, - EC6F4AD08FB0CDF8AB50BB6195F7858F /* MBLModuleInfo.m */, - A49860565C04C51B616558EDB6C207A1 /* MBLMovingAverage.h */, - 33FCF62EE29EAEB61B0798123DACA455 /* MBLMovingAverage.m */, - 973C3CCB59EC1DD82ECF015EC4E4CCAA /* MBLNonVolatileState.h */, - FB003471B152737CADBB87F6B199845C /* MBLNonVolatileState.m */, - B3466D6BD1DE4F23FECA24B3DFFEFFE4 /* MBLNumericData+Private.h */, - 172B2675C3FBB4FF57CCDD5C0451961E /* MBLNumericFormatter.h */, - 8A1A7139C699D05C359780845610FB22 /* MBLNumericFormatter.m */, - A9C7C2259F2F02EECE4558B57F94E1E3 /* MBLRegister+Private.h */, - 6C3404044E5FB4BFCD394402734D9944 /* MBLStringData+Private.h */, - 42C5DFD9D0B808866C0C22532B0D36CB /* MBLTriggeredRead.h */, - DB9E3B0C0143094BF1E25BD373A05CF9 /* MBLTriggeredRead.m */, + B16148986D393527A65ACDE1BC87B1EE /* dfu_operations.cpp */, + 3107BA3555E6C344C5FB4D46E325E475 /* dfu_operations_details.cpp */, + 903124EC640B5C982AE5E7D906FFAAB4 /* dfu_utility.cpp */, + DED1CF3D8AC000446F9D372D51117195 /* file_operations.cpp */, + 792EE243E0047B63DEB31D969D6A7A21 /* miniz.cpp */, ); - name = Core; - path = Core; + path = cpp; sourceTree = ""; }; - 7D35FA47099E190F965704C1EFCA64E9 /* Magnetometer */ = { - isa = PBXGroup; - children = ( - 9196F6CF5B00156F9536837A4F00B8DA /* MBLMagnetometer+Private.h */, - 89D1CC714D0CFD616B98573800172072 /* MBLMagnetometerData+Private.h */, - 96442526FBF4BAD19CDD8647530F919E /* MagnetometerBMM150 */, +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + 0072CAACF3FB802DBBE6531CAC28FA58 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + D689BEA44381F262508018EE49A34986 /* Pods-Starter-iOS-umbrella.h in Headers */, ); - name = Magnetometer; - path = Magnetometer; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 7DB346D0F39D3F0E887471402A8071AB = { - isa = PBXGroup; - children = ( - 93A4A3777CF96A4AAC1D13BA6DCCEA73 /* Podfile */, - 5430AD0E1D77A74AAB0E75E675B3597C /* Development Pods */, - 5A09CEAD5C02DDF8B8CBDB9464B0049D /* Frameworks */, - 2133F2258B25A1E57BC27B849B8C9508 /* Pods */, - FACF3047AF8E7C81EA633448F0D28C88 /* Products */, - 937C40B9883C64AE6D3DD95448678856 /* Targets Support Files */, + 158AC36B1ACA55F00A3C0F319B775655 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 63BB63558E4ADC1FC689D74F246CB406 /* Bolts-Swift-macOS-umbrella.h in Headers */, ); - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 8017BC4FACFF722AE8696F6C57522029 /* Support Files */ = { - isa = PBXGroup; - children = ( - 6D0B4E08EB6E5B60BF5E9E9684A51F92 /* FastCoding-iOS.modulemap */, - 6F1054E76077AB99235D202A108B4CFD /* FastCoding-iOS.xcconfig */, - 48D912392D707BDDED8B8F4DFFB44115 /* FastCoding-iOS-dummy.m */, - BD9B0AF9B69E976EDB87BBC315D5993E /* FastCoding-iOS-prefix.pch */, - 7AC208DBD093028F1D1CB58E10BE97A7 /* FastCoding-iOS-umbrella.h */, - 8BC53B897A44999CB03BA61BA63679CA /* FastCoding-macOS.modulemap */, - 7F279045200258D9DDA4C0C786D212CB /* FastCoding-macOS.xcconfig */, - 216CA4A8C0A271848E6893ADE6FC1FB9 /* FastCoding-macOS-dummy.m */, - F1B1D69E219589EC6CFD41BB6F46D5D5 /* FastCoding-macOS-prefix.pch */, - 140A6FD0A1728237B3A0F5B8A592FE01 /* FastCoding-macOS-umbrella.h */, - F18B8EC306CD5FC6F878FD34225E3568 /* FastCoding-tvOS.modulemap */, - 9B841F492579FFBA76A46D63F1082DD6 /* FastCoding-tvOS.xcconfig */, - 42BDD5845FC5E5B3328CA4C38F0C62A6 /* FastCoding-tvOS-dummy.m */, - B0943DE823AC3337BB440D4179548D86 /* FastCoding-tvOS-prefix.pch */, - 43EC651AD6884803BBFB322510BBBD27 /* FastCoding-tvOS-umbrella.h */, - 67F6AC2B4EE64E3C482E8A0A3E11B5B3 /* Info.plist */, - 3D3B1079CB81F95D3D37E4E8FC2FBFF9 /* Info.plist */, - 68DE5C7D386B404E7F358B802F49E21B /* Info.plist */, + 43DC4D6637F222DF4A5146276A01EA23 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + DE7824D77FB9632F8824A57856FC75C2 /* Pods-Starter-macOS-umbrella.h in Headers */, ); - name = "Support Files"; - path = "../Target Support Files/FastCoding-iOS"; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 8281E4C74916FBB4296CD2CAE8FED944 /* PhotometerTCS3472 */ = { - isa = PBXGroup; - children = ( - 4BF58587D0E4D84D2A2CAD8A2E5B3F43 /* MBLPhotometerTCS3472Format.h */, - 56C89D7E66B301BD38A7BEF9EFDE1766 /* MBLPhotometerTCS3472Format.m */, + 5D6603D3B147286FE2F534E91E7BB446 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 8C02A058ED021E7D6464F32355D88965 /* MBProgressHUD-tvOS-umbrella.h in Headers */, + 3A6A56AC96145E8B51C12EAF00461244 /* MBProgressHUD.h in Headers */, ); - name = PhotometerTCS3472; - path = PhotometerTCS3472; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 829DCFCE7EAF17E8981596847B918E1D /* Neopixel */ = { - isa = PBXGroup; - children = ( - 414435389F012CBF6D41D5242CF5FDE3 /* MBLNeopixel+Private.h */, - C978BF2D9FF8F00A034662BBCEC1FE53 /* MBLNeopixelStrand+Private.h */, + 643C1DA428DEBF307536F720AE139688 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F89F4E47EEFB23D3CFFB114DEE475A6A /* MBProgressHUD-iOS-umbrella.h in Headers */, + 7C287CCB4A786EEF55E45CB797B1865A /* MBProgressHUD.h in Headers */, ); - name = Neopixel; - path = Neopixel; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 86F248201877BF60643508C167A84C82 /* OS X */ = { - isa = PBXGroup; - children = ( - DF83E2F0603DA4CBD738A9E84F5072A0 /* Cocoa.framework */, - 8C1F1308812099E58753AEE34BA7BB55 /* CoreBluetooth.framework */, - 215731CFCD0FCFDD822DED5785C4FEAA /* CoreData.framework */, + 6F802F724AC8C8F22B2B26A6649CBC97 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + E1F42966FE79DCF7B0767BAD06B11EEF /* MetaWear-macOS-umbrella.h in Headers */, ); - name = "OS X"; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 878DDE793E52157216B6B802ACE95976 /* Support Files */ = { - isa = PBXGroup; - children = ( - 21179FBE2B09479626B5CEEEF9C6EA7A /* Info.plist */, - EBDCE2EAF8D34005C4FE47C9AD1EDBA1 /* Info.plist */, - 6A09B9551AFC5485496792EA6EA76F4F /* MBProgressHUD-iOS.modulemap */, - 4CBA7A8D3F3F5E56E70FB807A8BCE453 /* MBProgressHUD-iOS.xcconfig */, - 09AA1DECFDE20D870189DFB04ED30A79 /* MBProgressHUD-iOS-dummy.m */, - CBBF032637BF225C950554474601CB43 /* MBProgressHUD-iOS-prefix.pch */, - 9C0430E07BCDED5B7CD518B681868CEF /* MBProgressHUD-iOS-umbrella.h */, - 78030F79F4006EBC9A9775B4C18D8A0B /* MBProgressHUD-tvOS.modulemap */, - 55FAB9391ACF241B471A12CD95470629 /* MBProgressHUD-tvOS.xcconfig */, - 90AFDBD7957D024861737BBC4197DA9F /* MBProgressHUD-tvOS-dummy.m */, - E1772E5B03C86833BA9BD2044679D48D /* MBProgressHUD-tvOS-prefix.pch */, - F92DB4AE50B415AD300DAA5BC4767174 /* MBProgressHUD-tvOS-umbrella.h */, + 76CA36821B2FF966A94A4CCE881C3927 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 1D7609BBBFD59A23B4B82D03F5CAC49A /* Pods-Starter-tvOS-umbrella.h in Headers */, ); - name = "Support Files"; - path = "../Target Support Files/MBProgressHUD-iOS"; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 889BC278DCDBF4A2F32C870462F66A44 /* Classes */ = { - isa = PBXGroup; - children = ( - 26436F719298208FEF75335BA19CD0DA /* MetaWear.h */, - 2AAD5A6E4B09BBEC86F3E0DB5269858A /* Categories */, - 732829F777C9A16F1154C905C2476014 /* Core */, - 996A8C422B87C4AAA4EAB0BA858624A8 /* Modules */, + 8997E30B529BA515321A37C21B29147E /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 483ADC7D8D5EE822B84172AD411EE23B /* MetaWear-tvOS-umbrella.h in Headers */, ); - name = Classes; - path = MetaWear/Classes; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 88D19AB94219BA2FB91B9003EBB87E8E /* Settings */ = { - isa = PBXGroup; - children = ( - 0ED9B9C87C7D1F4D61A9B578A3CB486D /* MBLSettings.h */, - 23C7F2C4631BE97E6D0C65409A5C18AA /* MBLSettings.m */, + A0F34AB220B3CD87EDD9F987E0DC9DA3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 012314C94A0FF3DB0384FC0195652471 /* Bolts-Swift-tvOS-umbrella.h in Headers */, ); - name = Settings; - path = Settings; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 88E543103CCDFD770BDC5C9A0574211B /* Photometer */ = { - isa = PBXGroup; - children = ( - 7CAE92F1F49B9AECE922BB817092AD0D /* MBLPhotometer+Private.h */, - CCF372AA4F3F117F4D4C7E23D0FF1BA4 /* MBLRGBData+Private.h */, - 8281E4C74916FBB4296CD2CAE8FED944 /* PhotometerTCS3472 */, + EE5AA391C20B727D4ED945CE924D7EB3 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 0A92A75E1F330C5F90449CF0A992F751 /* MetaWear-iOS-umbrella.h in Headers */, ); - name = Photometer; - path = Photometer; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 8BC3BC2B00797542D0783B5B51F0E774 /* Pods-Starter-iOS */ = { - isa = PBXGroup; - children = ( - 05D0CDF4C71EF40611B714E487DEABF0 /* Info.plist */, - 7E68EFDC8F33DFEE31DCCD67A3433E41 /* Pods-Starter-iOS.modulemap */, - F805411C4F0A4414877BCE5EDD29C92B /* Pods-Starter-iOS-acknowledgements.markdown */, - 67D893CCA5B27FC3A243227DEA8245B4 /* Pods-Starter-iOS-acknowledgements.plist */, - A5451082E0834788675C40629C4DE03A /* Pods-Starter-iOS-dummy.m */, - 1DDD97C3A93E68B36B0E06C919325676 /* Pods-Starter-iOS-frameworks.sh */, - E38462FEF75627A901CBC06BBEF083E0 /* Pods-Starter-iOS-resources.sh */, - B94539D46159311A844A5CB04B2BC9A3 /* Pods-Starter-iOS-umbrella.h */, - A9000F0FF7A90A6F59B81BFB7F8D0A37 /* Pods-Starter-iOS.debug.xcconfig */, - CB6F3AEB30C3D9BEC5BBD5C00EACADC8 /* Pods-Starter-iOS.release.xcconfig */, + F417407C0B6EA3CDF6393834844740BE /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 510A1E5020AE426C651FF7E9211EF13E /* Bolts-Swift-iOS-umbrella.h in Headers */, ); - name = "Pods-Starter-iOS"; - path = "Target Support Files/Pods-Starter-iOS"; - sourceTree = ""; + runOnlyForDeploymentPostprocessing = 0; }; - 8EBF2FA7DFD65C631A6D2AE0D1FD3ACC /* MMA8452Q */ = { - isa = PBXGroup; - children = ( - C84458D72208FA0A9801EE0C9D88C10E /* MBLAccelerometerMMA8452Q.h */, - BBDCEC312737CE56EBE4236DCA8BA750 /* MBLAccelerometerMMA8452Q.m */, +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + 17DFF68AAE741C208291E2C6EE2A3587 /* Pods-Starter-iOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = F4FC46B3382FBE52DAD6983B3569DFCD /* Build configuration list for PBXNativeTarget "Pods-Starter-iOS" */; + buildPhases = ( + 5E8EA83B2030A870BAA46235B1B0FBF3 /* Sources */, + 9C339593B6CAF7128B61D87263636A99 /* Frameworks */, + 0072CAACF3FB802DBBE6531CAC28FA58 /* Headers */, ); - name = MMA8452Q; - path = MMA8452Q; - sourceTree = ""; - }; - 8ECC7154EDCAC52F493A7AA583C21654 /* Barometer */ = { - isa = PBXGroup; - children = ( - EF09D6F1F9512C264519E29311940625 /* MBLBarometer.h */, - 9B7D355831A50F19EE21A3AA550982E0 /* MBLBarometer.m */, - 1BBF56E99284521A5D2F322B66AE8C54 /* BarometerBosch */, + buildRules = ( ); - name = Barometer; - path = Barometer; - sourceTree = ""; - }; - 9345318DF767C67BA6E29BAFC66280AB /* Accelerometer */ = { - isa = PBXGroup; - children = ( - D72C4D748AA386035CB162B95E473342 /* MBLAccelerometer.h */, - EA1D0D5468EE4C60F6520CA42C739533 /* MBLAccelerometer.m */, - F04C1384B21B5E727D6A34D5475BB9EB /* MBLAccelerometerData.h */, - 6E2D750942D679B66CAEEF61EEB60716 /* MBLAccelerometerData.m */, - 2D165D933792FAC7CD7E487418BA0372 /* MBLOrientationData.h */, - 981644CDA9C010F4972FAA55611E3E3B /* MBLOrientationData.m */, - 863E9035951E1AF3B90CAA3ADF4DACA4 /* MBLRMSAccelerometerData.h */, - 18F4949F05143440EECC7F57B33495EC /* MBLRMSAccelerometerData.m */, - 414773B8D9CAF4A7B675418AEB74ABB2 /* AccelerometerBosch */, - 8EBF2FA7DFD65C631A6D2AE0D1FD3ACC /* MMA8452Q */, + dependencies = ( + 0496D9D602807CAC1EFF4FAE6C5788D4 /* PBXTargetDependency */, + 21208C4073EB8672A3452012D6B79BF4 /* PBXTargetDependency */, + 3CF73DF6AA928C1B3A77148B168C1493 /* PBXTargetDependency */, ); - name = Accelerometer; - path = Accelerometer; - sourceTree = ""; + name = "Pods-Starter-iOS"; + productName = "Pods-Starter-iOS"; + productReference = 1F383718CDADA26D99D724827753BA93 /* Pods_Starter_iOS.framework */; + productType = "com.apple.product-type.framework"; }; - 937C40B9883C64AE6D3DD95448678856 /* Targets Support Files */ = { - isa = PBXGroup; - children = ( - 8BC3BC2B00797542D0783B5B51F0E774 /* Pods-Starter-iOS */, - F3448AAA0DCFC7C2CA5550BA6034C6EE /* Pods-Starter-macOS */, - C7DB420356687DF9C8576BC2476EA79B /* Pods-Starter-tvOS */, + 1CF10E2AEEEB932120CC7181BD88C40C /* MetaWear-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = 8571E09CFAF4D6DA510E6A8182A011D3 /* Build configuration list for PBXNativeTarget "MetaWear-tvOS" */; + buildPhases = ( + 8069B1CC2721F90BA2C01B8059E6E527 /* Sources */, + C7BE0E71DBADCCD437507EBF6AAFDEAF /* Frameworks */, + 8997E30B529BA515321A37C21B29147E /* Headers */, ); - name = "Targets Support Files"; - sourceTree = ""; - }; - 96442526FBF4BAD19CDD8647530F919E /* MagnetometerBMM150 */ = { - isa = PBXGroup; - children = ( - 86B76EF451B2C9BD1FC4B6483ECB68C1 /* MBLMagnetometerBMM150+Private.h */, - 142C53373C506F66B3EC567CC1B46EC9 /* MBLMagnetometerBMM150Format.h */, - 6E22884E5F6DA9B9A89D2C29802514C8 /* MBLMagnetometerBMM150Format.m */, - 3E2A68EACC91CAAC95762EC992300966 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h */, - 408F8120EB62C2BAA6448622136747A1 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m */, - A7E3F764013B97ED812E8D3283DAA255 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h */, - EB9457C84BA60F953808A69B2CD44D2E /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m */, + buildRules = ( ); - name = MagnetometerBMM150; - path = MagnetometerBMM150; - sourceTree = ""; - }; - 996A8C422B87C4AAA4EAB0BA858624A8 /* Modules */ = { - isa = PBXGroup; - children = ( - 9345318DF767C67BA6E29BAFC66280AB /* Accelerometer */, - 6216D2013BD27554451D9B77DDC4B9BB /* AmbientLight */, - 1C5B0BCC8DC48D5547E89D2002EA9372 /* ANCS */, - 8ECC7154EDCAC52F493A7AA583C21654 /* Barometer */, - EAC318D554A24B1E0E653F848FC65390 /* Conductance */, - 9D4CD1B07EB3B7736F85AE55962C6964 /* GPIO */, - E1436BD62FB90ACAAF1265467EB3F902 /* Gyro */, - 069784F4D0819F5EC3F51961209E45F3 /* HapticBuzzer */, - AEA59CC394B88E437F6787DCC6DC2225 /* Hygrometer */, - 77BB0B07734EC6725EDBD2503C007591 /* I2C */, - 484AE933069BDBA645EED1A4CE4588F1 /* iBeacon */, - 2E68171A97ED6B7D37B9E8A6DD37486F /* LED */, - 99A468DC078E84C7D26A894EAD800CF7 /* Magnetometer */, - 1BCBA708E5C09952713A2151F49C6266 /* MechanicalSwitch */, - 5E4EF234E80DF8A473CD25B68AFB5CDB /* Neopixel */, - EE3F332C5BCA35EC5FA4D3BE4B832B3B /* Photometer */, - 1ED297F562F48B0AED4ACE983069F58C /* Proximity */, - A0201B2443F63F2698F89237CE8AE863 /* SensorFusion */, - A24A29F494469C197C50ED3CB65A4094 /* Serial */, - 88D19AB94219BA2FB91B9003EBB87E8E /* Settings */, - 5F02343083EA9E3A561D044D0557F9EE /* Temperature */, - ACBBE6F0B7B244C42FD027A62CC30A4C /* Timer */, + dependencies = ( + 6B1910B8621AF2E511BC2D958A653172 /* PBXTargetDependency */, ); - name = Modules; - path = Modules; - sourceTree = ""; + name = "MetaWear-tvOS"; + productName = "MetaWear-tvOS"; + productReference = AAB0466881011F80203B86C847A1B271 /* MetaWear.framework */; + productType = "com.apple.product-type.framework"; }; - 99A468DC078E84C7D26A894EAD800CF7 /* Magnetometer */ = { - isa = PBXGroup; - children = ( - FFFDB3EE908CC40CC530395C85E3458D /* MBLMagnetometer.h */, - C224152C9D28C7A32A827C076760707D /* MBLMagnetometer.m */, - 14B6A31958CC8C516388975A773C8697 /* MBLMagnetometerData.h */, - 24D72AD39D3634D27DC081E4D87585BA /* MBLMagnetometerData.m */, - F5BA6DDE5C2A743B766A7315D2C917E5 /* MagnetometerBMM150 */, + 3232B77B1F5CCC46816C499A0BA13E15 /* Pods-Starter-tvOS */ = { + isa = PBXNativeTarget; + buildConfigurationList = A6687F0CC7B376A4906711FE374D193F /* Build configuration list for PBXNativeTarget "Pods-Starter-tvOS" */; + buildPhases = ( + 2DF4740AD1E04C3A2BD1BEB000106A01 /* Sources */, + 7921AE78A7CF2A7E98793224495DF247 /* Frameworks */, + 76CA36821B2FF966A94A4CCE881C3927 /* Headers */, ); - name = Magnetometer; - path = Magnetometer; - sourceTree = ""; - }; - 9D1F6D6AE3E95D386A9640C764E04397 /* Barometer */ = { - isa = PBXGroup; - children = ( - D16E20C3099CCE7C274562CB5EA29EF9 /* MBLBarometer+Private.h */, - 295FA200D3BF06291FC8FC0447F0062A /* BarometerBosch */, + buildRules = ( ); - name = Barometer; - path = Barometer; - sourceTree = ""; - }; - 9D4CD1B07EB3B7736F85AE55962C6964 /* GPIO */ = { - isa = PBXGroup; - children = ( - 36F4A7346858E41F01D1A230D24B25A6 /* MBLGPIO.h */, - C218101D30CFC198B28DC323D33B8EBB /* MBLGPIO.m */, - 8B73C063AF59387AEB21A691DC36720D /* MBLGPIOPin.h */, - 196D9D18E35492ADFBF51545803C2917 /* MBLGPIOPin.m */, + dependencies = ( + 91C9007E6ACE3C2FBD9BFAC1B54E7017 /* PBXTargetDependency */, + F89AE91039CFF7646A27546B81729D75 /* PBXTargetDependency */, + 7F34E37746DA256302CD8A74DC2D42BD /* PBXTargetDependency */, ); - name = GPIO; - path = GPIO; - sourceTree = ""; - }; - 9EB48862E484DC6A3E8A96616D4377B3 /* MetaWear */ = { - isa = PBXGroup; - children = ( - 889BC278DCDBF4A2F32C870462F66A44 /* Classes */, - 5F30208C2980493B5C807036C4EED874 /* Internal */, - 19D44B781D7DA93D6A6921EF8EFFD7F9 /* Support Files */, - ); - name = MetaWear; - path = ../..; - sourceTree = ""; - }; - A0201B2443F63F2698F89237CE8AE863 /* SensorFusion */ = { - isa = PBXGroup; - children = ( - 0BFED5A2B9A105DCF96490C518361A50 /* MBLEulerAngleData.h */, - CAA65D05E75DE377B086744D71B8C1FE /* MBLEulerAngleData.m */, - F9779743BB0779445345CE025777D106 /* MBLQuaternionData.h */, - AE1FA155F112AAA570ACA5290C93EC1D /* MBLQuaternionData.m */, - BC7AF3E43EEDBF72C0CA31B6012F63D5 /* MBLSensorFusion.h */, - 47980C0F2A6A1229368779FA3439FFD8 /* MBLSensorFusion.m */, - ); - name = SensorFusion; - path = SensorFusion; - sourceTree = ""; - }; - A1C6DEB717710633CB5DC63362944AFE /* AccelerometerBMI160 */ = { - isa = PBXGroup; - children = ( - 5A057B248B30330E56EE400E14A8C4D3 /* MBLAccelerometerBMI160.h */, - 33D764F5B99B1EC4BE551C6C7B35BCC7 /* MBLAccelerometerBMI160.m */, - E89FCF9BB5AFDAC6517362946554ADA3 /* MBLAccelerometerBMI160MotionEvent.h */, - 361ED24982D138D7DE2FB8AB055756C5 /* MBLAccelerometerBMI160MotionEvent.m */, - ); - name = AccelerometerBMI160; - path = AccelerometerBMI160; - sourceTree = ""; - }; - A24A29F494469C197C50ED3CB65A4094 /* Serial */ = { - isa = PBXGroup; - children = ( - C32548046B3323EF853B2B5CDF55525C /* MBLI2CData.h */, - 002DBE59B80D267B7D1174CAFA7287D5 /* MBLI2CData.m */, - D0D47EFF60E4C35624057BD74F164FED /* MBLSerial.h */, - 9404ACA56CB19BDDA6AA900FBDA9A317 /* MBLSerial.m */, - 36CFA9BC089864F62BB20CEAA33C1823 /* MBLSPIData.h */, - D20073129429570646FABC385B7A5A9B /* MBLSPIData.m */, - ); - name = Serial; - path = Serial; - sourceTree = ""; - }; - A3598AEA5A7FEE3901402A5C338AFB53 /* PhotometerTCS3472 */ = { - isa = PBXGroup; - children = ( - F718090CB9057236EB1DFB034F70974C /* MBLPhotometerTCS3472.h */, - 39D447E44BF7D2891CCCC9A36CEBAA97 /* MBLPhotometerTCS3472.m */, - ); - name = PhotometerTCS3472; - path = PhotometerTCS3472; - sourceTree = ""; - }; - A61436940AE0341DF584FA08C299EE68 /* Categories */ = { - isa = PBXGroup; - children = ( - BDEC1B0CD69077F22F35CBFCBF3196BF /* BFTask+MBLPrivate.h */, - 72F465BA476651D387919A8222A795CE /* BFTask+MBLPrivate.m */, - B490A15EF33E626D39F6446407ED61B9 /* MBLCategoryLoader.h */, - 2AD0CE2FF96D7D91B4C7D4AFCFE078B9 /* MBLCategoryLoader.m */, - ); - name = Categories; - path = Categories; - sourceTree = ""; - }; - A6F08AE9B90B04E3323957DA5383FC6E /* TestDebug */ = { - isa = PBXGroup; - children = ( - 4E70541502FE1B4EEC651594FB6737C1 /* MBLTestDebug.h */, - A7CB624F324B3C20D299DC3EEF4DEBEB /* MBLTestDebug.m */, - ); - name = TestDebug; - path = TestDebug; - sourceTree = ""; - }; - AC165C5B6B05BA37D28C02445CBFB53E /* HygrometerBME280 */ = { - isa = PBXGroup; - children = ( - EBB7B3F9D3FF6BC24D8C4A48E6924102 /* MBLHygrometerBME280.h */, - 61152A5CDDEEAAF44A4E3E9AA01F1C5B /* MBLHygrometerBME280.m */, - ); - name = HygrometerBME280; - path = HygrometerBME280; - sourceTree = ""; - }; - ACBBE6F0B7B244C42FD027A62CC30A4C /* Timer */ = { - isa = PBXGroup; - children = ( - 0B91D9E1F10A979FBA03D3D9FB595CE5 /* MBLTimer.h */, - BBF25E6F0B0180F610BFBAEB11C7FF3D /* MBLTimer.m */, - FF0D8C305426C63A66AC1F20DB041CC1 /* MBLTimerEvent.h */, - A16B91106DC84C0FD697BD0C372F9757 /* MBLTimerEvent.m */, - ); - name = Timer; - path = Timer; - sourceTree = ""; - }; - AEA59CC394B88E437F6787DCC6DC2225 /* Hygrometer */ = { - isa = PBXGroup; - children = ( - 877A0281064E5ABD387EB419547FF2EC /* MBLHygrometer.h */, - CA4A1F9105F65278463AB28856E1DD2F /* MBLHygrometer.m */, - AC165C5B6B05BA37D28C02445CBFB53E /* HygrometerBME280 */, - ); - name = Hygrometer; - path = Hygrometer; - sourceTree = ""; - }; - B39C8BC24CDB926B512BA7D68CE6A9BA /* BarometerBMP280 */ = { - isa = PBXGroup; - children = ( - ECFD1E04360455C5052B158960152FE0 /* MBLBarometerBMP280.h */, - 9203157C9B5F34C2D630EC2DCAAA7A63 /* MBLBarometerBMP280.m */, - ); - name = BarometerBMP280; - path = BarometerBMP280; - sourceTree = ""; - }; - B503CB214B79DE6734E78AEC9800D06D /* BarometerBME280 */ = { - isa = PBXGroup; - children = ( - 152E66FF201A94616AFB7BD1F2FF05A6 /* MBLBarometerBME280.h */, - C7D606484687C0BF332DCA330EFEC20B /* MBLBarometerBME280.m */, - ); - name = BarometerBME280; - path = BarometerBME280; - sourceTree = ""; - }; - B699CAA521B9FC123F5368106327791E /* LED */ = { - isa = PBXGroup; - children = ( - 7C6592206EB75A22347BB84A8FEAC992 /* MBLLED+Private.h */, - ); - name = LED; - path = LED; - sourceTree = ""; - }; - BBDC63DAA4BAD9875B2432899C408879 /* SensorFusion */ = { - isa = PBXGroup; - children = ( - 07AD91C5A54D69D8FC1A1F1279364850 /* MBLBitmaskEvent.h */, - 7F865DC2E67227DAA5EE2F439D5387DA /* MBLBitmaskEvent.m */, - A281F1299DAC68B29A2FFDD77F54AD6E /* MBLCorrectedFormat.h */, - FBBC21F0A88BF36DA520DA6B9873B4FF /* MBLCorrectedFormat.m */, - FCEE56D4D921A7B44ADB7A0317845B34 /* MBLEulerAngleData+Private.h */, - 6017B957E6C2CA4CF3F4D7052EDB2C39 /* MBLEulerFormat.h */, - A2FD4BE33BC98270E878E0FDD87F2729 /* MBLEulerFormat.m */, - C94BC89EEB1C4DD70F8FB940105EDF59 /* MBLGravityFormat.h */, - 9EE6896A63CD5BFB98F4BEFA942A2A08 /* MBLGravityFormat.m */, - 2B29669E68D153C6F0836018F0E43715 /* MBLQuaternionData+Private.h */, - ACFC6C443B09DE923F4D13B49B6529F0 /* MBLQuaternionFormat.h */, - 9AD2093D0150C17663D53AF0D2BD6825 /* MBLQuaternionFormat.m */, - 7A26B9116DB8E62C6D25B45482B11FBE /* MBLSensorFusion+Private.h */, - ); - name = SensorFusion; - path = SensorFusion; - sourceTree = ""; - }; - C59AD38C27CF309A90B6D1033A52152B /* Command */ = { - isa = PBXGroup; - children = ( - 370BDE5254786592F755411B3CEB8C1B /* MBLCommand.h */, - 29A06566DFD36AD873A449282791F5BA /* MBLCommand.m */, - ); - name = Command; - path = Command; - sourceTree = ""; - }; - C6BE64DE11FB0BD07015CF878BAE278C /* Tasks */ = { - isa = PBXGroup; - children = ( - 27D538183C93B57AD8A146CA64198676 /* BFCancellationToken.h */, - 7EF2EA215EA3A7BCF71F5CABA0454879 /* BFCancellationToken.m */, - F86E6E388C2EF806B61222B3D681D043 /* BFCancellationTokenRegistration.h */, - D10DA96DC36AFE7F2E340BC3750A953E /* BFCancellationTokenRegistration.m */, - 3507E4FF13655A7B8DC112BD3212D44E /* BFCancellationTokenSource.h */, - 4853B460AC430BFA9730645F8BE6853D /* BFCancellationTokenSource.m */, - 65100B32123F844FC52882C8AD36BA4D /* BFExecutor.h */, - 6DE51A6F1F172F26196BE2B7A8654EE5 /* BFExecutor.m */, - 96B8D190364D91B2BB0B5EFE96C91EA2 /* BFTask.h */, - 7363ED845F28AB97287B35E39CCDC238 /* BFTask.m */, - 7E76E9526511D8A62A483D3CD1939B81 /* BFTask+Exceptions.h */, - 2C1F14222E245444E2244484CB57521B /* BFTask+Exceptions.m */, - 9784BDE57BF76980AD5F9EE5A90E6E6B /* BFTaskCompletionSource.h */, - 71F922D5EDD1533F98709ED495FF5D13 /* BFTaskCompletionSource.m */, - CBC1499FF61B9E6574CE31364FA9D2B1 /* Bolts.h */, - 7A332C200F72820570A10F894CE18588 /* Bolts.m */, - ); - name = Tasks; - sourceTree = ""; - }; - C7DB420356687DF9C8576BC2476EA79B /* Pods-Starter-tvOS */ = { - isa = PBXGroup; - children = ( - ED2F20323C1B249540BF2E72844A76E2 /* Info.plist */, - A4BC6A7E7A46D7651FAC64F3FE06EF12 /* Pods-Starter-tvOS.modulemap */, - 70E64A8656740E9F81CDE4AD4F91A637 /* Pods-Starter-tvOS-acknowledgements.markdown */, - 6AEA3DB7669D552F1CDEB1736406B693 /* Pods-Starter-tvOS-acknowledgements.plist */, - B5215E2014BAD178596E1165E37CC7FB /* Pods-Starter-tvOS-dummy.m */, - AABC969343D75710875CBCE2B701D6F2 /* Pods-Starter-tvOS-frameworks.sh */, - 26CEBBC64B3CD581EDBDD36BEA97A66F /* Pods-Starter-tvOS-resources.sh */, - 894D6BDD300D1CB977B5359F8DEC8F8F /* Pods-Starter-tvOS-umbrella.h */, - ECB10F2A65A6BA5FB610B121361268F9 /* Pods-Starter-tvOS.debug.xcconfig */, - D3201E3A006625BA636D039DAD71147E /* Pods-Starter-tvOS.release.xcconfig */, - ); - name = "Pods-Starter-tvOS"; - path = "Target Support Files/Pods-Starter-tvOS"; - sourceTree = ""; - }; - CC69295C8068AFA5889D8832CEADF5E1 /* ANCS */ = { - isa = PBXGroup; - children = ( - B08FF8DBCEA081BFC5499F13D8D1EB48 /* MBLANCSEventData+Private.h */, - ); - name = ANCS; - path = ANCS; - sourceTree = ""; - }; - D13E55A1A994BDF462530F7AF0A9DB99 /* AmbientLight */ = { - isa = PBXGroup; - children = ( - 47EB7E96479ED8478F088E850DCCB33C /* MBLAmbientLight+Private.h */, - ); - name = AmbientLight; - path = AmbientLight; - sourceTree = ""; - }; - D621AD9A5C8B97EF2F2DA8DD41B2D2C6 /* Hygrometer */ = { - isa = PBXGroup; - children = ( - 95088C502078D0A9B296CB2A3242C699 /* MBLHygrometer+Private.h */, - F7BBED16E6F22871B4E05B984CE72DE2 /* HygrometerBME280 */, - ); - name = Hygrometer; - path = Hygrometer; - sourceTree = ""; - }; - D9A4E7405DF308DB646C2B9BBC35F6A4 /* Support Files */ = { - isa = PBXGroup; - children = ( - C15A25F88A4B4671C72A686736B4B4DC /* Bolts-iOS.modulemap */, - EC38C841BA76F70D8272F3D7ADACADE2 /* Bolts-iOS.xcconfig */, - EF43E02B211DF3B8717BA480E8358951 /* Bolts-iOS-dummy.m */, - BA41BCAF8C96FEE6DE4DA988D23716EB /* Bolts-iOS-prefix.pch */, - 006C897194C2D2C5D9A898FA632EDE11 /* Bolts-iOS-umbrella.h */, - ED30910C87D2BE5A47B5AC395FA82AA2 /* Bolts-macOS.modulemap */, - 919D35A89E71B8F6775DA7BEA072A0B9 /* Bolts-macOS.xcconfig */, - 69E8EDA556DC202BAF516AD2B7C1430D /* Bolts-macOS-dummy.m */, - DF13E9183F06FF27C1DE8BC3EFEED59F /* Bolts-macOS-prefix.pch */, - 7D7675FCA4D3B0BA8ADFA92394085D93 /* Bolts-macOS-umbrella.h */, - 077F12708F74EC4300C82B7092926B2F /* Bolts-tvOS.modulemap */, - B9B8C91638C7B2907CDE68F9ACE11CB8 /* Bolts-tvOS.xcconfig */, - 2898667AC2BA44EB8D37A942DF34372F /* Bolts-tvOS-dummy.m */, - 8FA332BC5B6F138322F4B9673FD69B78 /* Bolts-tvOS-prefix.pch */, - 46F9B5878353B2CEB823288FD049270F /* Bolts-tvOS-umbrella.h */, - AB2E82704E67C12C59DDBEFC206FE679 /* Info.plist */, - 9E8AEE0DFC7F3B05D2C426B85E9444D0 /* Info.plist */, - 4EC2943E836CD606400565A7AF876E42 /* Info.plist */, - ); - name = "Support Files"; - path = "../Target Support Files/Bolts-iOS"; - sourceTree = ""; - }; - DF83C9DBEDFCAEA1D727AF679B6BB3EB /* DataProcessor */ = { - isa = PBXGroup; - children = ( - 26FFF7A3BA272EB3749B82156C18E549 /* MBLDataProcessor.h */, - EAAB5B28E78532344EDA35CAEB74A6D8 /* MBLDataProcessor.m */, - ); - name = DataProcessor; - path = DataProcessor; - sourceTree = ""; - }; - E1436BD62FB90ACAAF1265467EB3F902 /* Gyro */ = { - isa = PBXGroup; - children = ( - C1F46732D0D5A9679D3057E5D13869F9 /* MBLGyro.h */, - 711867FC17C52947DB12572824DB5C26 /* MBLGyro.m */, - 61BCBD52E7383CADF427953727B943A7 /* MBLGyroData.h */, - A13D336140C6DEDD777F645BE4DF3B7D /* MBLGyroData.m */, - 6FFA5A7C64868E26C3F61DFD666BFAEA /* GyroBMI160 */, - ); - name = Gyro; - path = Gyro; - sourceTree = ""; - }; - E23468344216DEB4CC9695A19D152684 /* ProximityTSL2671 */ = { - isa = PBXGroup; - children = ( - 45BA09FA60F45842A6A076016F5ECE19 /* MBLProximityTSL2671.h */, - 6A798DDB18A3E28FD00125FCEE626FA1 /* MBLProximityTSL2671.m */, - ); - name = ProximityTSL2671; - path = ProximityTSL2671; - sourceTree = ""; - }; - E31F8863EA942A2987750E6286D96B8C /* DFU */ = { - isa = PBXGroup; - children = ( - BEC5D637AA502156E39846414268C83B /* MBLFirmwareUpdateManager.h */, - BCE7E5AA02B63E011DF1DF98336F4BE8 /* MBLFirmwareUpdateManager.m */, - ); - name = DFU; - path = DFU; - sourceTree = ""; - }; - EAC318D554A24B1E0E653F848FC65390 /* Conductance */ = { - isa = PBXGroup; - children = ( - 092C07496FB9BDB608711C9FD3FC05BC /* MBLConductance.h */, - C014ECE4DBE240C0F225336A0534E7CF /* MBLConductance.m */, - ); - name = Conductance; - path = Conductance; - sourceTree = ""; - }; - EE3F332C5BCA35EC5FA4D3BE4B832B3B /* Photometer */ = { - isa = PBXGroup; - children = ( - 9B750D3000BEF3E657F93E7C2C11DDB5 /* MBLPhotometer.h */, - 5B1E68856F19F80FD47414AA57EFEE18 /* MBLPhotometer.m */, - F27ABA1C1B56697C3CBEA5201D1E1EA5 /* MBLRGBData.h */, - 56EA971154A82E2F2D963F1F73C9DE35 /* MBLRGBData.m */, - A3598AEA5A7FEE3901402A5C338AFB53 /* PhotometerTCS3472 */, - ); - name = Photometer; - path = Photometer; - sourceTree = ""; - }; - EE64BE91B58BCD2FCB39088EC936D944 /* Proximity */ = { - isa = PBXGroup; - children = ( - BCF93A19145E986CE283B7C796C86095 /* MBLProximity+Private.h */, - ); - name = Proximity; - path = Proximity; - sourceTree = ""; - }; - F19EEEE05C2453574BA4BC32AEA46AE9 /* Temperature */ = { - isa = PBXGroup; - children = ( - 56399F53F95874236906C93F8990D7D4 /* MBLExternalThermistor0.h */, - DE11AC7A6BEA46D43A46B985F7DF59F4 /* MBLExternalThermistor0.m */, - 8054F93E6D42DC6A34994588A10AE395 /* MBLExternalThermistor1.h */, - 54C51D0FDECC9EF2A48A0AA5B4642A42 /* MBLExternalThermistor1.m */, - 7EACF36CC75B1953FD7F7A4F613CC43C /* MBLOnDieTemperature0.h */, - 595150EE7F64D8A9B4418FE04A0F711B /* MBLOnDieTemperature0.m */, - FC205D22FE98BDB3414F601B31B87F1A /* MBLTemperature+Private.h */, - 6658DCB0C8125070E497B535C99E441D /* MBLTemperatureV0.h */, - D8725EB0E021DAD5A94DBA5397C6F845 /* MBLTemperatureV0.m */, - 8D8062A60FDD5F2D81372764F8C172A3 /* MBLTemperatureV1.h */, - 76D3C5C522E631CD62211B6A10A59906 /* MBLTemperatureV1.m */, - ); - name = Temperature; - path = Temperature; - sourceTree = ""; - }; - F1A5A787A8F85ADF0EDB81501EEC7D7B /* Accelerometer */ = { - isa = PBXGroup; - children = ( - 227DD8EB5493B11D84B1611388D7B876 /* MBLAccelerometer+Private.h */, - 4646EED1655B7225F08B814330EC1A7C /* MBLAccelerometerData+Private.h */, - 8CECC196826DFE764A258D986CDA3D2C /* MBLOrientationData+Private.h */, - C89BB07023ED287565C2905593ACBB92 /* MBLRMSAccelerometerData+Private.h */, - 65D6F87BF43860869253D448AB79B615 /* AccelerometerBosch */, - 2205C7D42AE7075524C05937E3360237 /* MMA8452Q */, - ); - name = Accelerometer; - path = Accelerometer; - sourceTree = ""; - }; - F2BAD22EEE41DC67118676F659BB7CCA /* AccelerometerBMA255 */ = { - isa = PBXGroup; - children = ( - 5089205E311AC48EC0142FEB779F9337 /* MBLAccelerometerBMA255+Private.h */, - 207BFB192A72F39904B415B8A2423B7D /* MBLAccelerometerBMA255MotionEvent+Private.h */, - ); - name = AccelerometerBMA255; - path = AccelerometerBMA255; - sourceTree = ""; - }; - F3448AAA0DCFC7C2CA5550BA6034C6EE /* Pods-Starter-macOS */ = { - isa = PBXGroup; - children = ( - 8DF053DB4547F302D14EB63AC2D1BCA6 /* Info.plist */, - D63CD53A65C3D144427680FC8BD9B5B5 /* Pods-Starter-macOS.modulemap */, - E4951DF4462B936F39A71C12344BA94C /* Pods-Starter-macOS-acknowledgements.markdown */, - 1CAB43AFA14E6743D3CD8FF5966D300C /* Pods-Starter-macOS-acknowledgements.plist */, - 1400A5025F05B757164F1B37F6B10126 /* Pods-Starter-macOS-dummy.m */, - 8B28F1EEDA9589A5FC21B048F7EF453B /* Pods-Starter-macOS-frameworks.sh */, - A6E0A792678C8D8DF05A6CBACE714F75 /* Pods-Starter-macOS-resources.sh */, - B7EFABA5A2A4A75BC5FD3EB52D601491 /* Pods-Starter-macOS-umbrella.h */, - 399DB060F7BC7DA67868EB5F087FF658 /* Pods-Starter-macOS.debug.xcconfig */, - 57145DDED2FD1272A4C456956BBE679D /* Pods-Starter-macOS.release.xcconfig */, - ); - name = "Pods-Starter-macOS"; - path = "Target Support Files/Pods-Starter-macOS"; - sourceTree = ""; - }; - F37755077C451C16FCA7E460B5722E18 /* Serial */ = { - isa = PBXGroup; - children = ( - AA3ED4C20784864624CA77166567B77F /* MBLI2CData+Private.h */, - FB311E558EC50722E2C62C1661943B60 /* MBLSerial+Private.h */, - BEFADBF1370D8B2EF860CA323969640D /* MBLSPIData+Private.h */, - ); - name = Serial; - path = Serial; - sourceTree = ""; - }; - F5BA6DDE5C2A743B766A7315D2C917E5 /* MagnetometerBMM150 */ = { - isa = PBXGroup; - children = ( - 6941B5A6AA94E0B5B46B122C660F520B /* MBLMagnetometerBMM150.h */, - 17E20328641E5D9CA09CBBE5F5468A0B /* MBLMagnetometerBMM150.m */, - ); - name = MagnetometerBMM150; - path = MagnetometerBMM150; - sourceTree = ""; - }; - F7BBED16E6F22871B4E05B984CE72DE2 /* HygrometerBME280 */ = { - isa = PBXGroup; - children = ( - B115D36606B4AADD761217DB4C2A9A05 /* MBLHygrometerBME280PeriodicHumidityEvent.h */, - 73232EE235678E12A8D3D2A1E3D6C1D4 /* MBLHygrometerBME280PeriodicHumidityEvent.m */, - ); - name = HygrometerBME280; - path = HygrometerBME280; - sourceTree = ""; - }; - FACF3047AF8E7C81EA633448F0D28C88 /* Products */ = { - isa = PBXGroup; - children = ( - 1F3E02924944EC129D9F55288F3C097B /* Bolts.framework */, - 06D67AF6BC1F66232FB78A8FA0A5E904 /* Bolts.framework */, - E8BE0A8C865C4E839B99B2117E684133 /* Bolts.framework */, - AA7C05508944F117B8B5C00303909183 /* FastCoding.framework */, - 93345218814D92BAF1F110638E52FB97 /* FastCoding.framework */, - 9F8ED2337CB9E8BB6E170FC8CE9AEADE /* FastCoding.framework */, - 71F3674C7728465F6E2F69D1B3047D78 /* MBProgressHUD.framework */, - 650639AB0823B2C98626B8A130A09A8B /* MBProgressHUD.framework */, - 6AB0A30D75B2F089043CF05965D6BF48 /* MetaWear.framework */, - EC71AAB2A59E4F4EA43F2599557BDE1D /* MetaWear.framework */, - 504242EFAD31C868C2B5F8AC3471669D /* MetaWear.framework */, - BBCBFC44DF32989632F95C6BDF11D6BD /* Pods_Starter_iOS.framework */, - 3ECE22CD2A3739824E6A6A6A9BD7DD4D /* Pods_Starter_macOS.framework */, - E65D997E60AC492A1A89BED6F624EEC3 /* Pods_Starter_tvOS.framework */, - ); - name = Products; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 0848440AEE145491D062FA1D98F3ABF9 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - CAA93BD78B66DB0E294922994A99C468 /* BFCancellationToken.h in Headers */, - E51FB14BF724DA7144C47DB5F55AF9C8 /* BFCancellationTokenRegistration.h in Headers */, - 6ABDC2ED898035D4F6C8A419CA18C0EF /* BFCancellationTokenSource.h in Headers */, - 550CFC2F0BE92B4D6CEC021693C7A8D1 /* BFExecutor.h in Headers */, - D96011C8432F7EAD1C57F69100B42660 /* BFTask+Exceptions.h in Headers */, - 904E62D9F04106B7A8D01ACD39DB906A /* BFTask.h in Headers */, - A3CAACEA47C7397BADBBFAE176446FC3 /* BFTaskCompletionSource.h in Headers */, - 3FCD1809EF0B39DA112B5141E008E612 /* Bolts-macOS-umbrella.h in Headers */, - 919676BEF85738E3F7E053478B1111D5 /* Bolts.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 1318B4E9F403951124EC17FEE7972598 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 70537376BAC4A19209FF6BE04373BE86 /* FastCoder.h in Headers */, - DF24FABFF25B380D599388A8BEAB2595 /* FastCoding-tvOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 5D6603D3B147286FE2F534E91E7BB446 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 8C02A058ED021E7D6464F32355D88965 /* MBProgressHUD-tvOS-umbrella.h in Headers */, - 3A6A56AC96145E8B51C12EAF00461244 /* MBProgressHUD.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 643C1DA428DEBF307536F720AE139688 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - F89F4E47EEFB23D3CFFB114DEE475A6A /* MBProgressHUD-iOS-umbrella.h in Headers */, - 7C287CCB4A786EEF55E45CB797B1865A /* MBProgressHUD.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 712CB9A4E0F17BD01F9E04F8A6098DA6 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 6034F2B5AFE2214155CC1E20FA7D89D8 /* BFCancellationToken.h in Headers */, - 7ED311EDC521A5F8033337049AB450E4 /* BFCancellationTokenRegistration.h in Headers */, - FEDD3D65ABA05570E54BAE324331BF21 /* BFCancellationTokenSource.h in Headers */, - 3F62F9D0AF72A7FEE2B5499770D88474 /* BFExecutor.h in Headers */, - AC9C510D4565F428563AA542D07018E1 /* BFTask+Exceptions.h in Headers */, - 91644C657F33AA0BAC2AF8C8DC67E859 /* BFTask.h in Headers */, - FF596E19E30DB5125A2912D901FA9438 /* BFTaskCompletionSource.h in Headers */, - 91299C5A7C6D42030DF7CC0132A5EE60 /* Bolts-iOS-umbrella.h in Headers */, - 1A8A3A5C6373B9A5558316C9A199F6E3 /* Bolts.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 76BABAB7A33481009079ACEA60AFAFFD /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FFFCC62ED4403DE3053C62E5368A73D6 /* Pods-Starter-macOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 8EBF31835A0E3C1C54B6840AEEDBA6C0 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 409602619D02ED11201BF2F8049B5911 /* BFTask+MBLExtensions.h in Headers */, - F6A36E8016E462F06D77A07846C6F219 /* BFTask+MBLPrivate.h in Headers */, - 5A792112FE1700A9A4F389FCAC149055 /* bmi160.h in Headers */, - D7DB892A76FC5D370F1695B5D288C9D7 /* MBLAccelerometer+Private.h in Headers */, - 574D7965C133EA49FE742EBA7045AC85 /* MBLAccelerometer.h in Headers */, - F5F6B2E31F844FA9C20C45939D164542 /* MBLAccelerometerAxisReadyEvent.h in Headers */, - 91F908A62FA2EDB2C5CA228B3F658364 /* MBLAccelerometerBMA255+Private.h in Headers */, - 2CB16980409BBBCFDA2F45616E113E6C /* MBLAccelerometerBMA255.h in Headers */, - C494118A68ACC13FE21396084730FDF5 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */, - A8DDBFCECE52C63526146CE562B578D0 /* MBLAccelerometerBMA255MotionEvent.h in Headers */, - 57E14209A84E85E16B7587D79DEE9AE5 /* MBLAccelerometerBMI160+Private.h in Headers */, - AD39EFEE8B459E59C8084BAD2564481E /* MBLAccelerometerBMI160.h in Headers */, - AD905E423CDDC8EFCD3FE0E87CF3BA38 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */, - AC9A1F163EE6C87797E8CF3E09BA25B6 /* MBLAccelerometerBMI160MotionEvent.h in Headers */, - 35A66D99A3784029F565D4D3C8479E9F /* MBLAccelerometerBMI160StepEvent.h in Headers */, - 6DECAC4F338BCECF644A37167230B879 /* MBLAccelerometerBosch+Private.h in Headers */, - 08088D5A5CB6B957288AF72ABDB6BC05 /* MBLAccelerometerBosch.h in Headers */, - 07580FD6D881402EB4D339B31D138686 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */, - AFD657807DF9BAD7C78DB694A5C6F5F2 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */, - 6B44F0B214BEC3ABBFB5DA086EDC3729 /* MBLAccelerometerBoschFlatData+Private.h in Headers */, - 8233314945DF5B460CABB7B912126EA0 /* MBLAccelerometerBoschFlatData.h in Headers */, - 88341E0CA9119CAFB62E1FDC91AC5882 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */, - 85341EA6CE1E47C1A9600B6060C15594 /* MBLAccelerometerBoschFlatEvent.h in Headers */, - 57FDE92221C5D5D46E3B0C2983B06465 /* MBLAccelerometerBoschFlatFormat.h in Headers */, - 8C1C624826ABF1F5F86A03DEFA151B50 /* MBLAccelerometerBoschFormat.h in Headers */, - 80DFA8D6F50AA7ED2C50487D5693D7F7 /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */, - B6137C377D424383F02C254314F23205 /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */, - 888A0F927E07717658D1285AF3F5FD5C /* MBLAccelerometerBoschOrientationEvent.h in Headers */, - 50CA0F39357621201D4F978AEAADCC3D /* MBLAccelerometerBoschOrientationFormat.h in Headers */, - D93F6664F59C4913C62523976C15100B /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */, - C9E097B393FE76E1837A442F4D65DD4E /* MBLAccelerometerBoschRMSFormat.h in Headers */, - C236EC37D55B47A562F1387D21B1706A /* MBLAccelerometerBoschTapEvent+Private.h in Headers */, - 90972BC643126B71DC931A6D52898B82 /* MBLAccelerometerBoschTapEvent.h in Headers */, - 2C47CF86C089D19B7A89B1D55720482A /* MBLAccelerometerData+Private.h in Headers */, - 39CF9405D3703A7B3E64EAA273C75A5B /* MBLAccelerometerData.h in Headers */, - 3A2954A93358AAC0E8DDEE9C19653EEF /* MBLAccelerometerDataReadyEvent.h in Headers */, - 43C488261787E32BC66A909DFFD9CBCE /* MBLAccelerometerFreeFallEvent.h in Headers */, - FDE3B20EF4DE1A6C8B317B93012E7CE1 /* MBLAccelerometerMMA8452Q+Private.h in Headers */, - E057BAA6FF215CDA14637F78ABE937E5 /* MBLAccelerometerMMA8452Q.h in Headers */, - 81B16F889AC0341AE172A609F9824FCA /* MBLAccelerometerMMA8452QFormat.h in Headers */, - A3CF70C01033C846567DE277B2D3811D /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */, - 450500C329A0C642EB3BEA85657A9B15 /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */, - C20F1F3A2D68A6D18A5952884DD2141F /* MBLAccelerometerOrientationEvent.h in Headers */, - 54BF34AC2632288336CDE6DA77F07771 /* MBLAccelerometerPackedDataReadyEvent.h in Headers */, - E0B024758CDBD47AF5FF6EF4A8EF7FAF /* MBLAccelerometerShakeEvent.h in Headers */, - 2A30E78BBAC505C0C7C67461E35E5C9B /* MBLAccelerometerTapEvent.h in Headers */, - 974BE776EC14EC928F75A130C0471CB4 /* MBLAmbientLight+Private.h in Headers */, - 176714F1C8D585BC4BC9B9311E04415C /* MBLAmbientLight.h in Headers */, - D72F47506B8F0EA1E2D0C9C199C9AD58 /* MBLAmbientLightLTR329.h in Headers */, - 5DD5691B954ECE1B7F9328BA368E9493 /* MBLAnalytics.h in Headers */, - 9F3A22D4A7F8622F03FC3A80AA7C52FE /* MBLANCS.h in Headers */, - 89C06A11DB399B4572985D636E1245C8 /* MBLANCSEventData+Private.h in Headers */, - 4C164EDC12FBD235BE3CE168274C860E /* MBLANCSEventData.h in Headers */, - 5934EE12F9278553186136719E451596 /* MBLAnonymousEvent+Private.h in Headers */, - D672865361381868B41263A9057B51AE /* MBLAnonymousEvent.h in Headers */, - 3174E8E837474FBAEDD9B16BB2268729 /* MBLBarometer+Private.h in Headers */, - 5C833B20F78BDA3B11FE21AFE1BC0535 /* MBLBarometer.h in Headers */, - 123E8E5446320755EEFA7AF567D3F472 /* MBLBarometerBME280.h in Headers */, - B0A6C0E28D8F2BCD49E9D47D991A4D84 /* MBLBarometerBMP280.h in Headers */, - 25F80B2F656307D6410D9D1E1EB1C3D1 /* MBLBarometerBosch+Private.h in Headers */, - 0B213C4CA7123C414639B7E10D5B6569 /* MBLBarometerBosch.h in Headers */, - 08E9A1274D0437A7BB417633A7C5D866 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */, - DC7D8CC13D59411D441652589FEB6B02 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */, - C0E38D8A72FEB313BB74998D0EADA95F /* MBLBitmaskEvent.h in Headers */, - 1609AE32BE8073A8F3ECC4AF812E13D0 /* MBLBluetoothCentral.h in Headers */, - 4075996A8EA593D2B8F4BAA24F67F29A /* MBLBluetoothCentralMock.h in Headers */, - 6F6674479D60AFA4D19E202EAD80FC0B /* MBLBluetoothPeripheral.h in Headers */, - 1A3B8592B9063295FB4E8B536A9D0680 /* MBLBluetoothPeripheralMock.h in Headers */, - 5AE0E15B0865BCFC0D1B0AB913E04043 /* MBLCategoryLoader.h in Headers */, - D02F5440E7DA227BD0D09E306FF5BB98 /* MBLCommand.h in Headers */, - 2AC8AB95D7C77A56CBEBA85BF16C6AD0 /* MBLConductance.h in Headers */, - BF477B290E265AEEBFBCC868101CB3AC /* MBLConductanceData.h in Headers */, - C63B56C90F78236FD77979D01558499D /* MBLConstants+Private.h in Headers */, - 5C8A4F50425A80ADFACED5CAD54933BC /* MBLConstants.h in Headers */, - BBD7E085FC791A7A5BAFA22675A543D4 /* MBLConversion.h in Headers */, - 5EF258B7F0BB00EAB04790116B8EEB09 /* MBLCorrectedFormat.h in Headers */, - 207A715B49E51A95DDD52D66B10CB354 /* MBLData+Private.h in Headers */, - 422051FDDC00913103FB5404730E7E5E /* MBLData.h in Headers */, - B45B34A6AF2955C472626386527B6B46 /* MBLDataProcessor.h in Headers */, - 54086E69244419973124B06648DEC2B7 /* MBLDataSample+Private.h in Headers */, - 63F7DD9E98C07EDC232CFF92C7948511 /* MBLDataSample.h in Headers */, - D11A2967A77C2EE08156F7CEF4908770 /* MBLDataSwitch.h in Headers */, - 560C80B0D11731A9B705F31C81F304D4 /* MBLDependentData.h in Headers */, - A164F708D771AB84AC6FB8ED5C431E68 /* MBLDeviceInfo.h in Headers */, - 710B6D16ABF975BE8C06033254E0E054 /* MBLDeviceLookup.h in Headers */, - C9F28CE8204C76D245E9C7A7FC2CB024 /* MBLDispatchQueue.h in Headers */, - 39042680580877AA7A8971A2A9C82EF2 /* MBLDownloadOnlyEvent.h in Headers */, - 7CD21BAEDDF32FE56C86F5C1D0463E03 /* MBLEntityEvent+Private.h in Headers */, - B9D69D94015970533F2DCB2224A261CC /* MBLEntityEvent.h in Headers */, - 5B01BAB3FD0DAB5C782BF4B8E087E43B /* MBLEntityModule+Private.h in Headers */, - 2DECD5E7F9D7C7DBF71CEB47CD066417 /* MBLEntityModule.h in Headers */, - 9C3BBEB221E7E11FBFA64BE0C8A4C884 /* MBLEulerAngleData+Private.h in Headers */, - 246BEE6333AEAD3A0A2453E573D8BC3A /* MBLEulerAngleData.h in Headers */, - 11854CBBF61F302CE3F0950F7AC0ECA2 /* MBLEulerFormat.h in Headers */, - CF8ABB228CE90F531A5837B38E2EBA6B /* MBLEvent+Private.h in Headers */, - 74E4285A9A34F6C80260C06A4F07ACDD /* MBLEvent.h in Headers */, - 3DD97DB81E4ED21F1BBA5993E2A83F34 /* MBLExternalThermistor.h in Headers */, - FD189D285021697DD54CA109B97E0125 /* MBLExternalThermistor0.h in Headers */, - 39C6D1B7E5B78BA80A7452AEDF2A2BF7 /* MBLExternalThermistor1.h in Headers */, - B479785E3E175857A205DE5B1921CA63 /* MBLFilter+Private.h in Headers */, - 5DFB708AAEC15DD1D1F33E9DC40FA7E6 /* MBLFilter.h in Headers */, - 7F3F96036571B169DD330F2819614A9D /* MBLFirmwareBuild.h in Headers */, - 899E281FEBCA5A038DC150AE49AB02F0 /* MBLFirmwareUpdateInfo.h in Headers */, - 844F51472F3085BFFBC3BDA913B30ED4 /* MBLFirmwareUpdateManager.h in Headers */, - 574605E224B6DA2F6E18BA1DC752A0C5 /* MBLFormat.h in Headers */, - 20F7690285E72B3E6220E9A1F686CB36 /* MBLGPIO+Private.h in Headers */, - B438E7C6D35A7288161474B0C6DBCC6D /* MBLGPIO.h in Headers */, - AD7F6D690B253CD23D3F847EFCEDE84C /* MBLGPIOData.h in Headers */, - 4797F5B1C7CABB86E2AC4DB0152EE6C6 /* MBLGPIOPin+Private.h in Headers */, - 94D6B2FB6C9D84FAFD970514C6AFBB44 /* MBLGPIOPin.h in Headers */, - DF3E7546B3A7D50E3FF16A55673A5E06 /* MBLGPIOPinChangeEvent.h in Headers */, - 392D68AF7C990DFCC64DF1BF15DF3E4A /* MBLGravityFormat.h in Headers */, - 7685581190C8F75A049CA3CCCEA82D6A /* MBLGyro+Private.h in Headers */, - 666503AE322AAE008E013C110853B97F /* MBLGyro.h in Headers */, - 7362AA10ADB91118E93DE15231990E94 /* MBLGyroBMI160+Private.h in Headers */, - 9BE3269DE51CA4C8722687B66F7F1E6C /* MBLGyroBMI160.h in Headers */, - AFDC716A8512BE6115F0AEBD84A51255 /* MBLGyroBMI160AxisReadyEvent.h in Headers */, - CDD70CC7FFF8D9A62DB30002326FAA59 /* MBLGyroBMI160DataReadyEvent.h in Headers */, - 41FEC1065F1DCDC6483128EE969971C9 /* MBLGyroBMI160Format.h in Headers */, - 00A8F46F23B8D5039B9847D1C6396394 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */, - A1A87B847768540D227EBF96A6DFFA04 /* MBLGyroData+Private.h in Headers */, - 268FB17C82D96CFED7FB64A3F55C78F5 /* MBLGyroData.h in Headers */, - AD878209A80D0E286FECA542FFCFCC5B /* MBLHapticBuzzer.h in Headers */, - 4997169BF8890F27DC006F71B826CF43 /* MBLHygrometer+Private.h in Headers */, - E367FF667315E887A61BB09DB897CD46 /* MBLHygrometer.h in Headers */, - 807F39F82E60C42A10A7B78DC0A49173 /* MBLHygrometerBME280.h in Headers */, - 0E3CFBFC273766D86EE9916F1EDB1E4C /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */, - 4104627C6500E2474714CA964AFBDE9C /* MBLI2C.h in Headers */, - 28587A3351B6432B58F5C8507E98017E /* MBLI2CData+Private.h in Headers */, - 2A0E6137C7477E041142EB541278E910 /* MBLI2CData.h in Headers */, - 17C5072135E71C3005BD497AD08F34D2 /* MBLiBeacon.h in Headers */, - 9F7DA3271C014C7CC315F9F2F0A4AE0D /* MBLLED+Private.h in Headers */, - 7710F1C0C27FAFDA2CE35FD479B8441A /* MBLLED.h in Headers */, - 9B049FFB75449143FEF816B5D7A7B6DA /* MBLLogger.h in Headers */, - 57B199FF65D8E3116227EFAD569CB00E /* MBLLogging.h in Headers */, - 0C9D10D3F81E02FE7E09410F302753B2 /* MBLLoggingV0.h in Headers */, - 17C6ACD813A952FDD50BCFA677D1859D /* MBLLoggingV1.h in Headers */, - 2D86C80B67EA4CA5877AFDAEF2B2B7B7 /* MBLLoggingV2.h in Headers */, - FB63476BD21F17CBC8B4BB231BB8B253 /* MBLMacAddressFormat.h in Headers */, - E2A211F3BC09BE9E40295344C00AC294 /* MBLMacro.h in Headers */, - 58F00EEFD3BD40AED8A6F8F154F7C0F0 /* MBLMagnetometer+Private.h in Headers */, - E5BB7F00FE5408BE046C11CB91B0A9A0 /* MBLMagnetometer.h in Headers */, - 6A1231B507E6F46BA01993E8DC887780 /* MBLMagnetometerBMM150+Private.h in Headers */, - BE2ADB0DAEF267B7570917427BDFBAC1 /* MBLMagnetometerBMM150.h in Headers */, - BF10EB713FE84DBAC7CFB2440D9DCF6C /* MBLMagnetometerBMM150Format.h in Headers */, - 163E1A0658B7C26929F445A7628B1A40 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */, - B1FCF5829CCD390140F9AC8371A8789D /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */, - 530E1CF46B7F533A0C93FC19435E6A06 /* MBLMagnetometerData+Private.h in Headers */, - 0ABA0EA6F7E399876B01D8A8E3CE24BA /* MBLMagnetometerData.h in Headers */, - 8E48980019FFD7DA8DBC3FC6226E983D /* MBLMechanicalSwitch.h in Headers */, - D96098104937EE2D886E505620A502DB /* MBLMetaWear+Private.h in Headers */, - 2E3A83F7C75727826C54B20E46435F78 /* MBLMetaWear.h in Headers */, - 17D8C40392E9C09D0C11C3CAAAEBD7BE /* MBLMetaWearManager+Private.h in Headers */, - 0DF591DC3BE147CC5296DB50B9781AA9 /* MBLMetaWearManager.h in Headers */, - 233D0AEF7CE36309B8F7A420075A9740 /* MBLMockPeripheralFactory.h in Headers */, - 193110AB48A0E19860362CB957394874 /* MBLMockUtils.h in Headers */, - 4BD8348DAB327C1D82486DF5312A0033 /* MBLModule+Private.h in Headers */, - 413D9E8DBC3C52647E46615E33FA671C /* MBLModule.h in Headers */, - D17959704BD1AE469226EDE0CF70E810 /* MBLModuleInfo.h in Headers */, - C3912E6CA8F94791135556E7B0722C3D /* MBLModuleMock.h in Headers */, - 4A2F44D5E38E0565E43C7B42D1A00DDD /* MBLMovingAverage.h in Headers */, - 5A2973D610B15D1E50453393340C90DA /* MBLNeopixel+Private.h in Headers */, - D13292BD3D3DCCFFDF0B784FE2854299 /* MBLNeopixel.h in Headers */, - DAB0359B0B4300A60D1F683822976DFD /* MBLNeopixelStrand+Private.h in Headers */, - A1936F2E7DBF77ED2A1BAAFD94C3636A /* MBLNeopixelStrand.h in Headers */, - DB4DB345171FAA29D32F5EFBB163F185 /* MBLNonVolatileState.h in Headers */, - F18BF922E4A151B5BB52E4BFF4E3AEC0 /* MBLNumericData+Private.h in Headers */, - 5FCFA11B7CA31C21756A7187E809B2A6 /* MBLNumericData.h in Headers */, - DA2BDB3ADC5A2183C0E6C33778D4AE0C /* MBLNumericFormatter.h in Headers */, - 7CAC678A9BB12DFBAFC7AC00E7A3F0FB /* MBLOnDieTemperature0.h in Headers */, - 547FE27265A329B1B7E7BD4E77D3E5C5 /* MBLOrientationData+Private.h in Headers */, - 6476023BACB45E144851A68EA378AF64 /* MBLOrientationData.h in Headers */, - 658B447B89666A03F896AD45C6AE3BC7 /* MBLPhotometer+Private.h in Headers */, - 6D12DD756B0A860263F24832F288A1C5 /* MBLPhotometer.h in Headers */, - 9388985FE58BD12E708C7BF3C6113D33 /* MBLPhotometerTCS3472.h in Headers */, - 69F21FCCF6BB605626F1E8543AABD2FA /* MBLPhotometerTCS3472Format.h in Headers */, - 9C4F55470F4ECA4FB50D84DF91D7BBDC /* MBLProximity+Private.h in Headers */, - 19D87C0C89730B9146CB313026EF37E1 /* MBLProximity.h in Headers */, - AFB3092C12C94E7E5A660B6FB4ABBEF7 /* MBLProximityTSL2671.h in Headers */, - 2D9CFB20086F2EEE68CFE7B744350087 /* MBLQuaternionData+Private.h in Headers */, - 691370EE2C37126422FCED945E76D81E /* MBLQuaternionData.h in Headers */, - 29996DBD3EB92F8DAFEF1831563AE819 /* MBLQuaternionFormat.h in Headers */, - BC4A5DAA606475835FDD28EF794B9DE0 /* MBLRegister+Private.h in Headers */, - 5BF9A4127F95BBE51B8A8440484162EF /* MBLRegister.h in Headers */, - 4243DF300AC059AB6498EA063B801B36 /* MBLRGBData+Private.h in Headers */, - 393C6A3DEB0A78A6ECED9738306825CC /* MBLRGBData.h in Headers */, - E01D50C72BBEFEA6BA0DA7BC38E21DF2 /* MBLRMSAccelerometerData+Private.h in Headers */, - 7D684A5BD3F27FAFBA0978F9361B030B /* MBLRMSAccelerometerData.h in Headers */, - F177A6CECAB76792CDE527CE4F8DFC12 /* MBLSensorFusion+Private.h in Headers */, - B8B3AA965C1E2F60E8CE6FBE6ACC9847 /* MBLSensorFusion.h in Headers */, - 72F442BAF80420BC89375D64DD8E8317 /* MBLSerial+Private.h in Headers */, - 1754A4474037656F2025C75DD15C96D8 /* MBLSerial.h in Headers */, - 76E87739FCEDB3998219966D69CB7660 /* MBLSettings+Private.h in Headers */, - 287468ADE3C152C4DD0F7A269A074ED6 /* MBLSettings.h in Headers */, - 5480D8A8412552EC2704B7F682C1666D /* MBLSPIData+Private.h in Headers */, - 628E19833E0F6E4B36A3142268FA00E3 /* MBLSPIData.h in Headers */, - B3A2E5A8478CC98585E5EAF25AA87383 /* MBLStringData+Private.h in Headers */, - E1AB5FC8150EFCF9A86DEE2DB6E5BD33 /* MBLStringData.h in Headers */, - 574E0728955F19F0FB4A765DAB5D6656 /* MBLTemperature+Private.h in Headers */, - 5D4432DE55CF98543FA4380D8AB5EE8B /* MBLTemperature.h in Headers */, - 14338195F91A77F854F4F724DA7D856B /* MBLTemperatureV0.h in Headers */, - 261A6D1A6FEBB1682DE32724312F00C4 /* MBLTemperatureV1.h in Headers */, - 6B703076C3D7B88C9368A8DC8A7862C7 /* MBLTestDebug.h in Headers */, - 1B3D69A795F5DB5B6B42B9C15E75B8B2 /* MBLTimer+Private.h in Headers */, - B4EE3DD86A60FD8AFE337D1281EECC3B /* MBLTimer.h in Headers */, - 3501B1AC04FC5EDB9AF722F70E09635E /* MBLTimerEvent+Private.h in Headers */, - 5FB18230C2A8997351ADD4EDD76EFED8 /* MBLTimerEvent.h in Headers */, - 616EEB961D9D3E0A318E453AA72B42A5 /* MBLTriggeredRead.h in Headers */, - 89105ABA44C514746011AC9897C79471 /* MetaWear-tvOS-umbrella.h in Headers */, - 269C8276FDDCC079E0B593F646B5BCC4 /* MetaWear.h in Headers */, - C962CAF81F117F78BF3BEB82DC8B009D /* mma8452q.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 901E929FFD2FE719C13FAF3667627695 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 34A31AD536E0204CAA85935E234BACEB /* Pods-Starter-iOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - A9478911E511B433B6592F07786789C1 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - E79CD3F5C276A015B2D66620D045DF94 /* FastCoder.h in Headers */, - 39F61D91B784185929A10EEEE5631F61 /* FastCoding-iOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - B8D32931AD728459BE84F26C643E2435 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - B8AB6665A14EBAD6F740A3640E8BE843 /* BFTask+MBLExtensions.h in Headers */, - 100BE1ACAF639F284684592FF36CEB6A /* BFTask+MBLPrivate.h in Headers */, - AFA1E07013A835958850CDA64A29809C /* bmi160.h in Headers */, - 2033467B97A189AC77EA051852114065 /* MBLAccelerometer+Private.h in Headers */, - FE957E0727A1EE05A66488F0B390222C /* MBLAccelerometer.h in Headers */, - 286E1B7D886FED1DE8F0D3A212963252 /* MBLAccelerometerAxisReadyEvent.h in Headers */, - A6B668AA5A1DDF9E41934F151A575E4E /* MBLAccelerometerBMA255+Private.h in Headers */, - 2C9D26298755248774D507519F812F72 /* MBLAccelerometerBMA255.h in Headers */, - 4FB2D5745918BA1C00357AFF0BC79267 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */, - 7FDAD07F3E465374E5A1B2D7CF7544C9 /* MBLAccelerometerBMA255MotionEvent.h in Headers */, - C7D2D1181DA4B8432FD5CF20EE514C9E /* MBLAccelerometerBMI160+Private.h in Headers */, - 3698B50649ED8C22375F87B068A1A3CC /* MBLAccelerometerBMI160.h in Headers */, - 028754DCAA6C8911AE61FBD502BFEC49 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */, - FA5F2867463949901F7BFD548478E19E /* MBLAccelerometerBMI160MotionEvent.h in Headers */, - F1DB718C3349E5846166CE20CF0AB35B /* MBLAccelerometerBMI160StepEvent.h in Headers */, - 6D167C9E1925F5C5D43A2B6F5BC10BB8 /* MBLAccelerometerBosch+Private.h in Headers */, - 75161E625A86C896EAE1B068D7DBF02F /* MBLAccelerometerBosch.h in Headers */, - 0B9E4B3149C7FE2E0902F369313E3D9E /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */, - 60E31BA8F2CC5A7A40452C67561EA554 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */, - 0D11324AC042B61DFCE54E1E11626DC3 /* MBLAccelerometerBoschFlatData+Private.h in Headers */, - E2D50EA16A49DFC0668D1AA71A1F626F /* MBLAccelerometerBoschFlatData.h in Headers */, - 936EA7ED273395DA20F4C7F8ACE2F94C /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */, - 31BE34A58946D23DAE2448AAAB44C7AF /* MBLAccelerometerBoschFlatEvent.h in Headers */, - CA3A7F7157079C0391E1B7CD891DE323 /* MBLAccelerometerBoschFlatFormat.h in Headers */, - 30B9312FA1D1026B94A931581608D1ED /* MBLAccelerometerBoschFormat.h in Headers */, - EAC3AF564BA84125D2B20D02BEE7260D /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */, - 1807147394C536FFB21A1773A896743E /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */, - 76BB3B8B430E93EAEE55C1A83094462C /* MBLAccelerometerBoschOrientationEvent.h in Headers */, - 4B999A437E6E8138559E3B8E5641177E /* MBLAccelerometerBoschOrientationFormat.h in Headers */, - 208CE7958AB66DD45D7AB319E4C22646 /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */, - B6B7B53BEF785FF31C8158EF9A10B892 /* MBLAccelerometerBoschRMSFormat.h in Headers */, - A3168607026B43F4BDE46481A1F7AD63 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */, - 36668EF6FD16FB92D64A6B7441E99019 /* MBLAccelerometerBoschTapEvent.h in Headers */, - 147C99F3CE0C392DF7757EDB0CDE0CE3 /* MBLAccelerometerData+Private.h in Headers */, - FA1CFCFF5B8D62DA42E136C36989AC51 /* MBLAccelerometerData.h in Headers */, - E44D688993FB9782F9B6FBCD19554723 /* MBLAccelerometerDataReadyEvent.h in Headers */, - 3CAD5DDD72D15484A4EC15BF39B305DB /* MBLAccelerometerFreeFallEvent.h in Headers */, - 7509AD29B8D5D0C2F9C1A57F1D2BC5E1 /* MBLAccelerometerMMA8452Q+Private.h in Headers */, - E873FA1AA76442F02994D434EEEEBB5B /* MBLAccelerometerMMA8452Q.h in Headers */, - C64AA9B4276E7F8A7715D75A9FE9EDBA /* MBLAccelerometerMMA8452QFormat.h in Headers */, - FA525FA8A5A2361D4B0431C22C1BA23C /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */, - 676CCBC563615181B300D7EC447E3333 /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */, - CDA15C1A758B7E1B502FD60734F13C9C /* MBLAccelerometerOrientationEvent.h in Headers */, - 4F5E444F76399D029E79F301BAE5D57B /* MBLAccelerometerPackedDataReadyEvent.h in Headers */, - 60E56EE6A6D747B80461F0C43FBCC311 /* MBLAccelerometerShakeEvent.h in Headers */, - E651F2D6AD9C134500AC1683DED3F7F5 /* MBLAccelerometerTapEvent.h in Headers */, - 89E8EA2AC58847A20994D1675564E569 /* MBLAmbientLight+Private.h in Headers */, - BB3E499BD0F8F69A1BFA3FF3A62B848C /* MBLAmbientLight.h in Headers */, - 0263E752BBF07F4E3740DFA8EB5FD243 /* MBLAmbientLightLTR329.h in Headers */, - 0AA23F0619596C63D5FC5D1FAD7F31C9 /* MBLAnalytics.h in Headers */, - FFB093FE97394ABAD8F7ACB588686F2B /* MBLANCS.h in Headers */, - 8291708752D887C0F970AB52AFED4272 /* MBLANCSEventData+Private.h in Headers */, - A83B0E8DC95A52476572183D1F4B13A8 /* MBLANCSEventData.h in Headers */, - E92F391B3E3F0C944F3E06AD155000AD /* MBLAnonymousEvent+Private.h in Headers */, - E66B16B8FB06D8EDCC5233D874121D4E /* MBLAnonymousEvent.h in Headers */, - 891F5AFD549001A47E4589F9EBC77CCC /* MBLBarometer+Private.h in Headers */, - 4D1041E8A013205F23DAD18EEC6B9B79 /* MBLBarometer.h in Headers */, - 8E7453875FEB894D40A673F77C7A8DFD /* MBLBarometerBME280.h in Headers */, - AE71E02EBE6D162DDAD9E172A7DBB132 /* MBLBarometerBMP280.h in Headers */, - 47FA55710C7B2E8163BCDD0DB0B56F59 /* MBLBarometerBosch+Private.h in Headers */, - 7B4F5388E2CB710FFBF51E4A8EE3C71F /* MBLBarometerBosch.h in Headers */, - A3EBA2684281A91183733DC161617757 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */, - BA72E1EE2B781379C4381DC5BF5DB364 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */, - 1B8FA404CF9B6E08E0031C56577E364A /* MBLBitmaskEvent.h in Headers */, - 79B2531C1D4F24FE5757EC368BEADA07 /* MBLBluetoothCentral.h in Headers */, - 79C23E7EBC9BA264875CEC855FD4556B /* MBLBluetoothCentralMock.h in Headers */, - E46BC5FCF1A88355F2DF4CF0BF5105ED /* MBLBluetoothPeripheral.h in Headers */, - E5CD2F2298035F76FD0F984136B90B4D /* MBLBluetoothPeripheralMock.h in Headers */, - F4960B079474AA55D05BA9A76838F39B /* MBLCategoryLoader.h in Headers */, - 6EC8860CC056561672588FD37DEB4CB1 /* MBLCommand.h in Headers */, - 2E33070BB062C2860D96408C37D187AC /* MBLConductance.h in Headers */, - C8B5790AE8B28362D9FC49ABC8F95BAF /* MBLConductanceData.h in Headers */, - 2112C0B6E641100E8199806D3A0C0E9B /* MBLConstants+Private.h in Headers */, - F2CD2627BBD21B458CE92140FE0448E5 /* MBLConstants.h in Headers */, - 2279F6588C6299302A271FBA8A453395 /* MBLConversion.h in Headers */, - 20344C8B76AAF1FA62C12955050A8385 /* MBLCorrectedFormat.h in Headers */, - 85D5C77ECC04113159B7AFA347339536 /* MBLData+Private.h in Headers */, - 869CF2F6DDCC0A2D38EC4DB46F1E71C6 /* MBLData.h in Headers */, - 89DDCEE4355EC8A8C6F1FC5E4161E434 /* MBLDataProcessor.h in Headers */, - 0E0B8938BF5455B2C92C538774A70AE0 /* MBLDataSample+Private.h in Headers */, - 9E3E591453C05A4466A3DD9420D83497 /* MBLDataSample.h in Headers */, - 7E88E30404778BD3575FFE353C746EBD /* MBLDataSwitch.h in Headers */, - 6AFBC16F43C2334589C51703F37F2A95 /* MBLDependentData.h in Headers */, - 0853A9164A8F8AC9F42443E2A2A948D4 /* MBLDeviceInfo.h in Headers */, - 39FFF99ABC7A011BEF642FDD71A3E6A5 /* MBLDeviceLookup.h in Headers */, - 46520669635E49D3FCACB03DB0433122 /* MBLDispatchQueue.h in Headers */, - 84175AFEC2D4DB23C1AE17302D496FC6 /* MBLDownloadOnlyEvent.h in Headers */, - 0BBF6F7AA8390710827AAA2DF7D9DD5B /* MBLEntityEvent+Private.h in Headers */, - 76B775CDF2E8D15CDB35B704314C5D26 /* MBLEntityEvent.h in Headers */, - C1B7D5738ED8BC0D3F41DB3BD19CA4DF /* MBLEntityModule+Private.h in Headers */, - C46BFAD782956895DEFECEAF89FCF5E7 /* MBLEntityModule.h in Headers */, - 9EEB628FC654FCD0620511F11C41B0F5 /* MBLEulerAngleData+Private.h in Headers */, - 7F498DC051FC71F730DC1DF43927234E /* MBLEulerAngleData.h in Headers */, - D12AD40A0AB3CF6746DCB6B1627306FD /* MBLEulerFormat.h in Headers */, - 1F75920457EEDF425C639CE39A2A247B /* MBLEvent+Private.h in Headers */, - 1351E5CFB014D295A32D74D6693EEC61 /* MBLEvent.h in Headers */, - A4145F27E9AFFB4C5B3716C84B63545F /* MBLExternalThermistor.h in Headers */, - 2FB9BC8F2A583B5BA94D2F928331B9DF /* MBLExternalThermistor0.h in Headers */, - 13F246B9EE3839F4C1C454D9C03B6357 /* MBLExternalThermistor1.h in Headers */, - 24B605934CC532948A4D8A04C503EBBB /* MBLFilter+Private.h in Headers */, - E0F35CE5F71C8211DCD07DAB775346DF /* MBLFilter.h in Headers */, - B607C26D154AF87C845EE27F69D3DE56 /* MBLFirmwareBuild.h in Headers */, - DFCC5290F2661BBD2C0D20045F004A87 /* MBLFirmwareUpdateInfo.h in Headers */, - C1545761DF9F3F6EB87C33EAE695EC12 /* MBLFirmwareUpdateManager.h in Headers */, - B5FAF8DF790A5F9F6EFCC6727544B564 /* MBLFormat.h in Headers */, - 5C95BE3CFF254DE82C183CC3717489F7 /* MBLGPIO+Private.h in Headers */, - F3B4BEF36AF95D61F9ACBC65D5111F5C /* MBLGPIO.h in Headers */, - DA80F68161D6C137BFF12098597448C5 /* MBLGPIOData.h in Headers */, - 13BE50729505159CD5E4EC724D6028A1 /* MBLGPIOPin+Private.h in Headers */, - 1294F304C31FCC4A19035E79E9FEC44C /* MBLGPIOPin.h in Headers */, - 745CCE1AC9AFEA5D6AAB0FA7058F5103 /* MBLGPIOPinChangeEvent.h in Headers */, - 355FDF24508B0A8639CDF0A226EA7399 /* MBLGravityFormat.h in Headers */, - B7066CEEB5BFA418B959D192960AE736 /* MBLGyro+Private.h in Headers */, - C70A3635F2C699620E57DF0BBEA41C98 /* MBLGyro.h in Headers */, - 08FAE697CA9747D677CFCEA5D1F49771 /* MBLGyroBMI160+Private.h in Headers */, - F259474802E65E3E752FD8AE6078C62C /* MBLGyroBMI160.h in Headers */, - A74B2A2115C0C7D577C71665CC11DF85 /* MBLGyroBMI160AxisReadyEvent.h in Headers */, - A600E3BDBE80E813C5BA227061F5873E /* MBLGyroBMI160DataReadyEvent.h in Headers */, - 948B18124C826C46B31A2943CC8E68DA /* MBLGyroBMI160Format.h in Headers */, - A53DFA30B4F647C0C832694DA0A5FF9B /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */, - 95DE0F35FDB875F1B467F30BD3B57212 /* MBLGyroData+Private.h in Headers */, - 2E3E9D3AF0D03F6677010D3F65D02789 /* MBLGyroData.h in Headers */, - B993842C222D004095C7E8EB9C4D7122 /* MBLHapticBuzzer.h in Headers */, - DFBE5FE5FBE84F40178200B7CAFD9DB2 /* MBLHygrometer+Private.h in Headers */, - 660462BF772BCE50D2F40397F0A9F7ED /* MBLHygrometer.h in Headers */, - 8859D1637B6595D92CA517BD3B1F5EBF /* MBLHygrometerBME280.h in Headers */, - 7F85542508D468690270DCE331C17C50 /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */, - 4DF8AB8E5D12928B8D43E5361DC76FB7 /* MBLI2C.h in Headers */, - F687D07D42F6B9151F28274CE3431735 /* MBLI2CData+Private.h in Headers */, - BA73D9F6F9548BDC7F5C3D2C3508E243 /* MBLI2CData.h in Headers */, - 7931D4B8D7C4E8125B40E06A50DF69BF /* MBLiBeacon.h in Headers */, - C615484537855CDF2260B8FB3CB42C71 /* MBLLED+Private.h in Headers */, - 281A655E59C8E009FC6899EE552442AE /* MBLLED.h in Headers */, - 458F9669D56A8E9DF7B5A1B0B8AA10FC /* MBLLogger.h in Headers */, - 97E6F164EAA971F2CB0C5452E4CBAD41 /* MBLLogging.h in Headers */, - 9A3F748E3FA7B1B2B2973D979E80CD13 /* MBLLoggingV0.h in Headers */, - D99B6560FFEC05AD00E3F8BA1DC4780A /* MBLLoggingV1.h in Headers */, - 056AEED7D516692E0186D2AED398C910 /* MBLLoggingV2.h in Headers */, - ABCF640D17CEB549A2A4F763DA076BF3 /* MBLMacAddressFormat.h in Headers */, - 370019E61EB7BC89F8FF4A280CE6A158 /* MBLMacro.h in Headers */, - C8DC4BACA545060681C43F05E7A24581 /* MBLMagnetometer+Private.h in Headers */, - C369CFF5079FD9C3D0F3CDBBB8D0749F /* MBLMagnetometer.h in Headers */, - 273F150EF40E4843E90390D87EB8552D /* MBLMagnetometerBMM150+Private.h in Headers */, - F421C77245B440E0584DA93974F08654 /* MBLMagnetometerBMM150.h in Headers */, - 34CAEC23F02CB917367551E9BF5F243C /* MBLMagnetometerBMM150Format.h in Headers */, - 4C9A86923C4102F3252DEF8BEDD59F59 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */, - EEB6D266C95B9B7ADECE3216ADA9066A /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */, - 99B134A0C68228E9D32510B396DA0F97 /* MBLMagnetometerData+Private.h in Headers */, - 34F42FB00BFD8430424DB87F30DEFF31 /* MBLMagnetometerData.h in Headers */, - 04930BEAF55130FB9CD1DA128D88A05F /* MBLMechanicalSwitch.h in Headers */, - 457A2D37F5BB0E2177030A82148A7E65 /* MBLMetaWear+Private.h in Headers */, - 677E48B2A7C7A90579D6A5598BE8BB94 /* MBLMetaWear.h in Headers */, - 1D543D8E1465F2BAEEF1970856731564 /* MBLMetaWearManager+Private.h in Headers */, - 26DEDEEC73D35D6863A81C80EEE693B4 /* MBLMetaWearManager.h in Headers */, - CC8A7280457C231321449AECF4CC2B90 /* MBLMockPeripheralFactory.h in Headers */, - 7A1A741A821628AF09BC304E698D607C /* MBLMockUtils.h in Headers */, - C0AE0EEF311989BEAD6FA7E20A0903B8 /* MBLModule+Private.h in Headers */, - 2AFC2A2DF155D2DC03226FD4374F5DC3 /* MBLModule.h in Headers */, - 8FE884C3DB5568F45A0C4263F3F65CC9 /* MBLModuleInfo.h in Headers */, - A8C5E25FBDCB4657CB8D62EE63573880 /* MBLModuleMock.h in Headers */, - 4E70032C8B3E2C62AFA6B2E95B1582DA /* MBLMovingAverage.h in Headers */, - EB9F0FBB263C1288AE1B9FF041AB4AED /* MBLNeopixel+Private.h in Headers */, - C6F231373C2BF634720A26407F90B786 /* MBLNeopixel.h in Headers */, - EBCAEFE40C726B410D95835DF849B603 /* MBLNeopixelStrand+Private.h in Headers */, - 9A9B1EF5B6F629B81126B8D8119F240F /* MBLNeopixelStrand.h in Headers */, - 39C01EC7F975487511B553264ABFDC25 /* MBLNonVolatileState.h in Headers */, - BD5B78F196A93BDAB2934D7E7F5F94CD /* MBLNumericData+Private.h in Headers */, - EDD48DD4B9E606B2C8A77353C6EF83F4 /* MBLNumericData.h in Headers */, - 34D7AC17D6F51925DA409CBB4EA88B05 /* MBLNumericFormatter.h in Headers */, - C822C340981DDC9484381BB9CEA31D06 /* MBLOnDieTemperature0.h in Headers */, - CEEFB44E0AB77844053F1079704E5A2E /* MBLOrientationData+Private.h in Headers */, - 92A1A0833388744FB506A3AA99AE488C /* MBLOrientationData.h in Headers */, - 75D0B82C5D9B82F9C5F4659ABD73C446 /* MBLPhotometer+Private.h in Headers */, - E289AA65409AC4E2F65B78C394955188 /* MBLPhotometer.h in Headers */, - CBFB3033E309D42A30C0A10D586BAD7A /* MBLPhotometerTCS3472.h in Headers */, - C7C120FE4C5BEDE6A2E6AEF055E34C83 /* MBLPhotometerTCS3472Format.h in Headers */, - C6B517D36BB86459B9C40048A7B3EA7E /* MBLProximity+Private.h in Headers */, - 59C8BE710550E5526AD15DFE610E4971 /* MBLProximity.h in Headers */, - 750716CFA12AA1207038FADE1219BF85 /* MBLProximityTSL2671.h in Headers */, - 415ACEB09354B7E15237E5DFEC2BBB1F /* MBLQuaternionData+Private.h in Headers */, - 1184D96263A807FD725620C0C7C35047 /* MBLQuaternionData.h in Headers */, - 29B6EC03D2F74F9AA0628207AFC3F5FF /* MBLQuaternionFormat.h in Headers */, - DB6C9E2FA21B28730CB6D813954A4900 /* MBLRegister+Private.h in Headers */, - 1F8D4091A0D5FC723AB73418FB269D6D /* MBLRegister.h in Headers */, - AB7FC5FE98B181A45976C673A9145BF7 /* MBLRGBData+Private.h in Headers */, - D441A4A1FE230080EFD6E29FD86652FF /* MBLRGBData.h in Headers */, - 3701353987ED251630E4AFD58DB8F033 /* MBLRMSAccelerometerData+Private.h in Headers */, - 13947F3A08967161B50A45FA6F1ED179 /* MBLRMSAccelerometerData.h in Headers */, - EA859F03271AE4076A4D22E5E5F85511 /* MBLSensorFusion+Private.h in Headers */, - 3BC09D84B85BA13BC65487165046D693 /* MBLSensorFusion.h in Headers */, - FC10BA1111A09A0D5FB6B8B9D8054EF3 /* MBLSerial+Private.h in Headers */, - 8F6E8DDDABB609A2D53AA8822676BAC9 /* MBLSerial.h in Headers */, - B04B26BFCE542B7290705C8195F05ABE /* MBLSettings+Private.h in Headers */, - 5BEFD8B9724C73DE833A8C43276FF88C /* MBLSettings.h in Headers */, - D96DE88766DD7588AFD8FE2ADD107EE7 /* MBLSPIData+Private.h in Headers */, - F31502B29C58F8D741BE5DB294137F9A /* MBLSPIData.h in Headers */, - D0C04BB31FD831CE75A8B76A42D8090E /* MBLStringData+Private.h in Headers */, - 2110F182CB0C39150B6BBD3A67290A8C /* MBLStringData.h in Headers */, - BB80B97F2E5E05F64A5955E2BFF02800 /* MBLTemperature+Private.h in Headers */, - BD186E0BE22CEC5D18EB36561994FBA4 /* MBLTemperature.h in Headers */, - 1236E6FB18664CFF5BFFDDF969F8D31F /* MBLTemperatureV0.h in Headers */, - 885FEBF41AEA96427FF273AD07F8BD89 /* MBLTemperatureV1.h in Headers */, - 5BE6C971C0E9B66ABE04DC70A5F0036C /* MBLTestDebug.h in Headers */, - E3D7CEAA922F9D623026DA678B491540 /* MBLTimer+Private.h in Headers */, - E39BE20472571822D0C92145B683A14D /* MBLTimer.h in Headers */, - 432FD5F477909BABDC7C97389C2B5AA9 /* MBLTimerEvent+Private.h in Headers */, - D24BEE41611B74EB8A04EE4B65BF01E5 /* MBLTimerEvent.h in Headers */, - 7AC6807BCAC6F8B8124FB2174A019427 /* MBLTriggeredRead.h in Headers */, - 6B468095418C746751DADA47C26FCF50 /* MetaWear-macOS-umbrella.h in Headers */, - 230EC01645588E5B7D9C58A51AA033D9 /* MetaWear.h in Headers */, - 98383BAD0E8193906E8D89DDBC20840C /* mma8452q.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - C2D43615CEB0FBE03506176F41A6F738 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - DD75C576FD3B64EFD7F11DE674F56211 /* FastCoder.h in Headers */, - 5B72266A2871D0406B48C1EEBF9A7E32 /* FastCoding-macOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - CCD0C10F8DEC5BFCB97D09729C43C312 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 5B2E921DD0E405D0BF40C58D06A83BB9 /* Pods-Starter-tvOS-umbrella.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - D61DA1B92893F982FE24E15F65581810 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 619AC5402628D47BA4B4EE810F9F4E1E /* BFCancellationToken.h in Headers */, - 8CF8DB57BD3856F63787DEDF89EF0066 /* BFCancellationTokenRegistration.h in Headers */, - E0A7A5E679D00FCF8525D9C4808FC6D4 /* BFCancellationTokenSource.h in Headers */, - 7A0CA6A2D0AABC44E317269069D0E6A4 /* BFExecutor.h in Headers */, - 61FBDA686B2674236F00C55054CD322B /* BFTask+Exceptions.h in Headers */, - 2D786E9E294F18EBFB7E926CA452A32A /* BFTask.h in Headers */, - 3E5B6B44EF068328A1C9C89D304A143F /* BFTaskCompletionSource.h in Headers */, - 9A611C9B87F72E8FE4279ECB999E5DC7 /* Bolts-tvOS-umbrella.h in Headers */, - 32BE2B3071281E702784EC6F4DBACDFB /* Bolts.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EC77E9D1F54292B5FA57A643F30CF1D2 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 508E0461B02292E7D8630B877FA8889A /* BFTask+MBLExtensions.h in Headers */, - DF8A8E75BD99566463373D4734C7387B /* BFTask+MBLPrivate.h in Headers */, - C60A57F2DE3E85D68AB262A341DA8A08 /* bmi160.h in Headers */, - 8BCAD7D138A2F23B0D1E17168A02D8FB /* MBLAccelerometer+Private.h in Headers */, - 8A8BEE551197CFE127CF525E1001DB5B /* MBLAccelerometer.h in Headers */, - C2FD16E45B619B27F7AEF30510711C44 /* MBLAccelerometerAxisReadyEvent.h in Headers */, - 9E30C8202D4B8A5B788796C9EB552291 /* MBLAccelerometerBMA255+Private.h in Headers */, - AD04F4EA9ED9574CC08B7B88C08E92FC /* MBLAccelerometerBMA255.h in Headers */, - 0990E6F8EC21448A02065F70372BEC80 /* MBLAccelerometerBMA255MotionEvent+Private.h in Headers */, - 3D21A5DDD36F2C43299A5780310A8293 /* MBLAccelerometerBMA255MotionEvent.h in Headers */, - F1A0A2B8FB0603CB5A9433866E39D30A /* MBLAccelerometerBMI160+Private.h in Headers */, - 7E3B24C295EBC2BBC8E20BC5CEACC884 /* MBLAccelerometerBMI160.h in Headers */, - 80D7EFBA7C79F7141CFCF7BB77870EF0 /* MBLAccelerometerBMI160MotionEvent+Private.h in Headers */, - FA0F4508C96D32E0D165B5D3838B0C1F /* MBLAccelerometerBMI160MotionEvent.h in Headers */, - 6BF096396E204FFBBC2023A9C6C82EAC /* MBLAccelerometerBMI160StepEvent.h in Headers */, - B91B241FD4C56EB4D9ACFB94B7F88437 /* MBLAccelerometerBosch+Private.h in Headers */, - B5A32519D123D709B98B5CD80F0EA959 /* MBLAccelerometerBosch.h in Headers */, - 7FADB3AECFC87EEB07F713D87D1E1F90 /* MBLAccelerometerBoschAxisReadyEvent.h in Headers */, - 4E8145F83D5EBE2A738BA7A9E0D83706 /* MBLAccelerometerBoschDataReadyEvent.h in Headers */, - 684D981E4DBC60AA3887DD2216075E96 /* MBLAccelerometerBoschFlatData+Private.h in Headers */, - 9BD3C946A5DAE5B62AAE9D48CF3CA4F5 /* MBLAccelerometerBoschFlatData.h in Headers */, - 8BB04DA6529A2160563389B9E9DB54E5 /* MBLAccelerometerBoschFlatEvent+Private.h in Headers */, - 3C66D0B6739F35A356E91F917A8D21DB /* MBLAccelerometerBoschFlatEvent.h in Headers */, - 8D153374F1EC7D559C7B19FF8B6423A2 /* MBLAccelerometerBoschFlatFormat.h in Headers */, - 252234E5BB2DCC6BC3C2234938B8D15F /* MBLAccelerometerBoschFormat.h in Headers */, - 7990FEA346BCE460F0AE07A41F24B78D /* MBLAccelerometerBoschLowOrHighGEvent+Private.h in Headers */, - 66D388936A8BFD38E14D31339A2475B3 /* MBLAccelerometerBoschLowOrHighGEvent.h in Headers */, - 61CC761CBB3107E94C1CC7FEB1110451 /* MBLAccelerometerBoschOrientationEvent.h in Headers */, - AD5D734F057A6EF1F45C9D7923A8D3D7 /* MBLAccelerometerBoschOrientationFormat.h in Headers */, - 18E3BD82D02E6EAAAFE5B73EAEACEBA8 /* MBLAccelerometerBoschPackedDataReadyEvent.h in Headers */, - 9256D46411C0C23723479C74273A7FC5 /* MBLAccelerometerBoschRMSFormat.h in Headers */, - 2B0CF436D0B084627B6040CFD1DAC455 /* MBLAccelerometerBoschTapEvent+Private.h in Headers */, - 16EEEE7F4D6ACCF3A652F02A8A09EA8E /* MBLAccelerometerBoschTapEvent.h in Headers */, - 5A146F72BD70659C73578951CF098A0E /* MBLAccelerometerData+Private.h in Headers */, - 6B3367F7BC41652DD987A10550070F41 /* MBLAccelerometerData.h in Headers */, - 056874E995CD6DA3F55C40AAFC656DCE /* MBLAccelerometerDataReadyEvent.h in Headers */, - BAE97C81EC71B5A34108398957968514 /* MBLAccelerometerFreeFallEvent.h in Headers */, - 00C0D8776DA62FC9382C79B1C81BE913 /* MBLAccelerometerMMA8452Q+Private.h in Headers */, - 0F6F04A40588C03B6EC7574E5B4C0A3B /* MBLAccelerometerMMA8452Q.h in Headers */, - 4BDBCAA2C01653D947902C87157BB48A /* MBLAccelerometerMMA8452QFormat.h in Headers */, - B30DB0DE574645D8CE24772A98A553A3 /* MBLAccelerometerMMA8452QOrientationFormat.h in Headers */, - 01C3B136C7E32FE2262B3CD7E42EEE41 /* MBLAccelerometerMMA8452QRMSFormat.h in Headers */, - 41922A4CCCBA17D6B36881DBC7101680 /* MBLAccelerometerOrientationEvent.h in Headers */, - 6AD4325293BBFA5AC934DA49B74DF825 /* MBLAccelerometerPackedDataReadyEvent.h in Headers */, - A1E7C96DB4F45380B6F2FE7FD69B705F /* MBLAccelerometerShakeEvent.h in Headers */, - 8C7C44858004769D35CD0932F5951609 /* MBLAccelerometerTapEvent.h in Headers */, - 5F0D87525F96A4C913496C6F10B29782 /* MBLAmbientLight+Private.h in Headers */, - 87711A85C354CA2E6339B22EDA01BC64 /* MBLAmbientLight.h in Headers */, - 202194E42F1F6B3FF36A747DC172D7A4 /* MBLAmbientLightLTR329.h in Headers */, - 86EC5C6B9BA6F9A487708AD304B2346A /* MBLAnalytics.h in Headers */, - ABC7F4032121266B66EC37EB78F2FA78 /* MBLANCS.h in Headers */, - 551C0576F4E0D10959B68FA0285B0FF9 /* MBLANCSEventData+Private.h in Headers */, - D081EF2BC46D6928AE5B081A37850624 /* MBLANCSEventData.h in Headers */, - E5CBD0E5C5F62F35AA4E84AD2EC29158 /* MBLAnonymousEvent+Private.h in Headers */, - A06903AACC3A503BA808BEEB1B635B98 /* MBLAnonymousEvent.h in Headers */, - 641DBB3B3C2C488229CA7A3169C061D8 /* MBLBarometer+Private.h in Headers */, - 1086A24837D37955068B2D6B95B2882A /* MBLBarometer.h in Headers */, - E97B9B89AAE299E4E3996F41D4F8F6DE /* MBLBarometerBME280.h in Headers */, - D16FE5304634AC7E4575CB3086DA4AB2 /* MBLBarometerBMP280.h in Headers */, - 58DF473B30F40AB6DDDA9E17E3F3486F /* MBLBarometerBosch+Private.h in Headers */, - 00D10D7F9C39ABADF84177B299DE0DF7 /* MBLBarometerBosch.h in Headers */, - 84B50E85314757A7D6826340002DD997 /* MBLBarometerBoschPeriodicAltitudeEvent.h in Headers */, - FD96611DC5024A5BA022A51CE76D1282 /* MBLBarometerBoschPeriodicPressureEvent.h in Headers */, - DE1DDCF3285986FF026AEE36549D462C /* MBLBitmaskEvent.h in Headers */, - 326F2D8885F626A785223AFDE0E34C3E /* MBLBluetoothCentral.h in Headers */, - 4FE417A08D9D179D296D8BE6EFDCB438 /* MBLBluetoothCentralMock.h in Headers */, - 115C7C68CE11CA439B24F5F34FB3A781 /* MBLBluetoothPeripheral.h in Headers */, - C1D705A00FD9CF3E242178C813B6C090 /* MBLBluetoothPeripheralMock.h in Headers */, - 01EE7393188F3D5F59BFCB78C8FD882A /* MBLCategoryLoader.h in Headers */, - 3254CC6AE08F338ABA332274A02A5D07 /* MBLCommand.h in Headers */, - 1108F215FCBC2BF74316E7837C978EA8 /* MBLConductance.h in Headers */, - C0DB58302504B8B0B7E7F1A65EFD54C8 /* MBLConductanceData.h in Headers */, - 3556B83D18707AC386DC1D1E8355248B /* MBLConstants+Private.h in Headers */, - FEB96753E0D5E0D325E2A96303F52532 /* MBLConstants.h in Headers */, - 0F822D2B59CD1FB7B38A046FB2887C09 /* MBLConversion.h in Headers */, - F20894BC320F16D07B879D775515B15A /* MBLCorrectedFormat.h in Headers */, - E0B78EC5508E6E026A9DC6E332D17489 /* MBLData+Private.h in Headers */, - ADDF55FC103B6FF0ED3765FA404ADB2A /* MBLData.h in Headers */, - 70B6316231CF711B117C0C8DEC8CAF73 /* MBLDataProcessor.h in Headers */, - 03BCCB9D790D54D373EE86D4A56AB689 /* MBLDataSample+Private.h in Headers */, - F73D4E9E704F69E27D254F2CF5EDAB2B /* MBLDataSample.h in Headers */, - 5CBD4754410EA108E9FEE0CC4A049739 /* MBLDataSwitch.h in Headers */, - F6FD2475485887A4E71D0CD90451FF29 /* MBLDependentData.h in Headers */, - F60190ED8281DA9EEF4B9B5C0026F6ED /* MBLDeviceInfo.h in Headers */, - 1884E7E848371AA88625FF6C9487F3AE /* MBLDeviceLookup.h in Headers */, - B2AE3676C015F2B637C510894D25E874 /* MBLDispatchQueue.h in Headers */, - 2CB67C93C5C5BB684995095D65BA6790 /* MBLDownloadOnlyEvent.h in Headers */, - BFFF9AF9D619A71B72556ADB917778FE /* MBLEntityEvent+Private.h in Headers */, - 96BD6CAFCA9DAE9CA7891D612FA502C4 /* MBLEntityEvent.h in Headers */, - 2DE6D33EC00D301B0207FEE59F0B2AD5 /* MBLEntityModule+Private.h in Headers */, - 8ADF13DB8FEFA931CBDE9792B1AE1753 /* MBLEntityModule.h in Headers */, - 40D5071817517F53C028BB945D076073 /* MBLEulerAngleData+Private.h in Headers */, - 4272D07F99AF4D70AE09E11161F41E30 /* MBLEulerAngleData.h in Headers */, - 891DC0DDF6B7D997B348B6B7B8793159 /* MBLEulerFormat.h in Headers */, - 173F27F86D557710683C3877F92D9E63 /* MBLEvent+Private.h in Headers */, - 362F8C61DF5363837BB3A18BA187CC59 /* MBLEvent.h in Headers */, - 9B24F54F86D5592A401D3F2B0FBE45BB /* MBLExternalThermistor.h in Headers */, - 8DD1ED4745C0808A71199609780E54D3 /* MBLExternalThermistor0.h in Headers */, - 5023AF74E7FDA0539F7F757735A5D0C1 /* MBLExternalThermistor1.h in Headers */, - 18C409E5AC14E6D3AE70719A00F9E6AC /* MBLFilter+Private.h in Headers */, - CB847B20CD230DAAB4AFBE63453FD7AD /* MBLFilter.h in Headers */, - 9083768CD6FE1EC28FE5042A8F6CD7FD /* MBLFirmwareBuild.h in Headers */, - EB88D4E1542D24A2313B9C0CBE69D1F7 /* MBLFirmwareUpdateInfo.h in Headers */, - CAA4338AB95AC776701BAE050934A4A2 /* MBLFirmwareUpdateManager.h in Headers */, - 3CA34A6DE73FC27AEC828A716C8DC356 /* MBLFormat.h in Headers */, - FE4DE314A897BB36CC094A946A5DA1CD /* MBLGPIO+Private.h in Headers */, - F4B1EFD7510C82D83F2B8551075D6F9F /* MBLGPIO.h in Headers */, - BD55E4193D097EEBA6AC155B145BA45B /* MBLGPIOData.h in Headers */, - FBB7A5411A92CED59B10B5DEC552FEFE /* MBLGPIOPin+Private.h in Headers */, - A9D5CEBAB0B6686335488CCC12554812 /* MBLGPIOPin.h in Headers */, - 16A8BF9AF6BFD6334E0C902EC2EF01E8 /* MBLGPIOPinChangeEvent.h in Headers */, - CA19215A5CC40C4D1CA8CC05D8347B6F /* MBLGravityFormat.h in Headers */, - EA4BC31E17AF4A0804E743C07CAF9D34 /* MBLGyro+Private.h in Headers */, - 62BF7DE0580C15D4D4628A1835E96163 /* MBLGyro.h in Headers */, - 11D2423EBB09EE63FFD04A74D600A80A /* MBLGyroBMI160+Private.h in Headers */, - 5141E43AFE96D420E3DD7CEB8673A601 /* MBLGyroBMI160.h in Headers */, - BC6E0485F61D7F160D8C4325DE6706D8 /* MBLGyroBMI160AxisReadyEvent.h in Headers */, - D7327683306B5AD240A7B39B86C81E10 /* MBLGyroBMI160DataReadyEvent.h in Headers */, - 47BA9EFF6713CB4F63822AC2FE68114D /* MBLGyroBMI160Format.h in Headers */, - 4F62B76C4AF81D6C9B34142C2CAA0805 /* MBLGyroBMI160PackedDataReadyEvent.h in Headers */, - 0633BB2F7E7AD46B97A37492D76B37F7 /* MBLGyroData+Private.h in Headers */, - 24115C81696A22509B46744B4404DC3D /* MBLGyroData.h in Headers */, - EE8E8EF32DD797D90E14EA5A0578F7DB /* MBLHapticBuzzer.h in Headers */, - CBC59352833F83ADC29D8D2EA56B8049 /* MBLHygrometer+Private.h in Headers */, - E9DA32838467DF1A67577DCFF2E3736D /* MBLHygrometer.h in Headers */, - 3101C58516BAAD495CF262E9556CCC1A /* MBLHygrometerBME280.h in Headers */, - 0A5970F6BA0F5DDECD284EBB2A130409 /* MBLHygrometerBME280PeriodicHumidityEvent.h in Headers */, - 84C7AE56F1373ED3EB28B9A37CEDB9E8 /* MBLI2C.h in Headers */, - 6BCA4F65EF8D43C0412D130CAA4A6780 /* MBLI2CData+Private.h in Headers */, - BC8252FA55C3D4BA1B8058D4DEDAA5AC /* MBLI2CData.h in Headers */, - A5F814D3EB26345FEADF879B613AF930 /* MBLiBeacon.h in Headers */, - 9BB2211AD91F7A9461EBEA72795CF75C /* MBLLED+Private.h in Headers */, - C836EC792B1B85074C6F6F47589610A8 /* MBLLED.h in Headers */, - 8E86990ED31B25428377E919CF6511BD /* MBLLogger.h in Headers */, - C300A20754F3566C5D5A4C0D6E59DD4E /* MBLLogging.h in Headers */, - F8B35563C037D31EEFB6E052E02D2836 /* MBLLoggingV0.h in Headers */, - 63002B60D13F850109F2A7EC7DCACF21 /* MBLLoggingV1.h in Headers */, - F69269A19213DA89AC3C81F8C3FA22ED /* MBLLoggingV2.h in Headers */, - 2B35C4D876F0883B33AFB19AB65F575E /* MBLMacAddressFormat.h in Headers */, - EF295922EF31CAD8F0E39E25A399C296 /* MBLMacro.h in Headers */, - CD7A52946934E6EB8223240D42282520 /* MBLMagnetometer+Private.h in Headers */, - 8A1A106595D4CACC10CA76BA60B7E0A4 /* MBLMagnetometer.h in Headers */, - 5FBF24B890629E6DBD16B084E70C8691 /* MBLMagnetometerBMM150+Private.h in Headers */, - 91C465D2DFF02E0316CE74BA644AEFEF /* MBLMagnetometerBMM150.h in Headers */, - CCBAFF2639668805879F7C32134D91A8 /* MBLMagnetometerBMM150Format.h in Headers */, - ED9952489A2AC1EB21D4CEF4D3EC41CA /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.h in Headers */, - 724355A3E01DB817A0E1C3701AE452C1 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.h in Headers */, - D9C483395C146AEF894A6FD2A63AA733 /* MBLMagnetometerData+Private.h in Headers */, - 92278D28B85517AA856652A72D0EDF86 /* MBLMagnetometerData.h in Headers */, - 63019887C967B34870ABD77DF28DF5B1 /* MBLMechanicalSwitch.h in Headers */, - 06697F99A1ED141E5EE2C2DE58DBD95E /* MBLMetaWear+Private.h in Headers */, - F4B0E419158EE00D9C048F4A91CA9D3A /* MBLMetaWear.h in Headers */, - CAD03DB1275D3C04D5AA6BEB32825EA4 /* MBLMetaWearManager+Private.h in Headers */, - 9677E4ADAEB33D0CE6DE2C33EB1A1D7B /* MBLMetaWearManager.h in Headers */, - 2DB77DFF503803ABC141622982C7250B /* MBLMockPeripheralFactory.h in Headers */, - 5ADEF81E0A57E9EC64020581A077E430 /* MBLMockUtils.h in Headers */, - 4DFB1E5DAC2D4824F02964A6564CCC25 /* MBLModule+Private.h in Headers */, - F9AA4F1ADD3FB9DCAEC8673A3726D10B /* MBLModule.h in Headers */, - 0AE33F1B4AC881B4810D0FAE120CB2E0 /* MBLModuleInfo.h in Headers */, - 5687D5A91A60B3E9D713E694F8F5B1D9 /* MBLModuleMock.h in Headers */, - D241B6AF2AEEFF591507B2C511E3CA9D /* MBLMovingAverage.h in Headers */, - 7612A78E53B9FFEE3CEF001C19EEF633 /* MBLNeopixel+Private.h in Headers */, - 36A5F6F292CEB4EA0157CF3B5163EE58 /* MBLNeopixel.h in Headers */, - 6D09EC46FBF867F81A769BD3B4D43E7C /* MBLNeopixelStrand+Private.h in Headers */, - D61BAB5624242B932AF6FAD268F87308 /* MBLNeopixelStrand.h in Headers */, - 8B90556E1F21BF79FC80D5C14899200E /* MBLNonVolatileState.h in Headers */, - AF37709CF2A5783C838BF8F4856E1FF1 /* MBLNumericData+Private.h in Headers */, - 7139F5063C4629A188D980C9E3421265 /* MBLNumericData.h in Headers */, - EEB96B7050E7DFD68676FAE8EC4C35CF /* MBLNumericFormatter.h in Headers */, - 2617E166D2F6D3E7EF6847DDEABE7583 /* MBLOnDieTemperature0.h in Headers */, - 09BADE6E4396019B0E68E36890DE75AF /* MBLOrientationData+Private.h in Headers */, - 1FEC8F0EF7FA87813324461E67C7B10A /* MBLOrientationData.h in Headers */, - 07C4E2D0B0F91AFBEFA7D0B1E91CA900 /* MBLPhotometer+Private.h in Headers */, - AF400D10A1410150C8D288FC33F6B998 /* MBLPhotometer.h in Headers */, - F3E86288D1AF51082A0952597E7E1313 /* MBLPhotometerTCS3472.h in Headers */, - 1EA010232B0FF1DEC4AE0C159A988FF7 /* MBLPhotometerTCS3472Format.h in Headers */, - DF84C672F8A0F23B1D191878C4115916 /* MBLProximity+Private.h in Headers */, - BE1351CE5FEFD5FB4E69236EEF1B9BE7 /* MBLProximity.h in Headers */, - F55449B787240C37E111FB2DBB0C8CA2 /* MBLProximityTSL2671.h in Headers */, - 9494D3322D450C849A5713CD3620719C /* MBLQuaternionData+Private.h in Headers */, - 29B48CE4C1B8726C0BF9CEA5EFC394B0 /* MBLQuaternionData.h in Headers */, - 511A54CE8A073686A3AF22AAA922FABF /* MBLQuaternionFormat.h in Headers */, - 88E22E3713ADBA6824130CE6170B1642 /* MBLRegister+Private.h in Headers */, - D0502A128F833C5A3017BEC64AE8D248 /* MBLRegister.h in Headers */, - A86A33CC1CAE17D252FC57771F3823B4 /* MBLRGBData+Private.h in Headers */, - 880FB83B15AD09B64C12EFBC1D2FD372 /* MBLRGBData.h in Headers */, - 0FA60738F8B91DF83022CC398E5BFD4A /* MBLRMSAccelerometerData+Private.h in Headers */, - 09D593070F455C6FF7A095D51CCE4CB0 /* MBLRMSAccelerometerData.h in Headers */, - 1C8A5A74FA30EF234CC40119E3F83941 /* MBLSensorFusion+Private.h in Headers */, - B8D7BB464210CCC43EF44393C3FBBF3A /* MBLSensorFusion.h in Headers */, - D5AAB81D05C720C4BD4C570C2FC6E44A /* MBLSerial+Private.h in Headers */, - 3A47544B9DF716773B610CA7D86EF0CB /* MBLSerial.h in Headers */, - 51B43DF2E84C5C4D1448A9AF68A3FB4D /* MBLSettings+Private.h in Headers */, - ABFC423CF307FC51464D3740AD896671 /* MBLSettings.h in Headers */, - E4AA73FB5D5DA0AFE17C316732B9C284 /* MBLSPIData+Private.h in Headers */, - EDA6BE3AB1F64461B5E95C9BD0F219C1 /* MBLSPIData.h in Headers */, - E1D1865CC21561036DECB053F4A1AD13 /* MBLStringData+Private.h in Headers */, - B51B128D7EDF459BFB52B248920E209E /* MBLStringData.h in Headers */, - C8657598D93E936FC9F971F88860884A /* MBLTemperature+Private.h in Headers */, - D4BD4B7BE297C09E0FBC0718F59318B8 /* MBLTemperature.h in Headers */, - 07E3CD3DF6ABE5C924CF495443421875 /* MBLTemperatureV0.h in Headers */, - C98E664B1FAFDCA7A35D19C1EE7A2139 /* MBLTemperatureV1.h in Headers */, - BC14F2B12F319F67CF58B02F713C700A /* MBLTestDebug.h in Headers */, - 36A3B6B71131E2F17C90512B3379E36D /* MBLTimer+Private.h in Headers */, - F85A0163CA730759AD57FDE7B4E02766 /* MBLTimer.h in Headers */, - 641C5F1BD0FD20B4F55B62DC4B68F415 /* MBLTimerEvent+Private.h in Headers */, - 9F77905DB46D2742912514473A0F7CE0 /* MBLTimerEvent.h in Headers */, - 327153BFA447F21BD4011C43E11BFA23 /* MBLTriggeredRead.h in Headers */, - FE3B35889ECC237B1841AB30986490B4 /* MetaWear-iOS-umbrella.h in Headers */, - C13EA6E9D9F2F9D640ED35EE4C837F18 /* MetaWear.h in Headers */, - 5F361933A91CC7487B0FEB1D877F9353 /* mma8452q.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 054F5C0D34A7FBCCDAD12A03CB8F61E1 /* MetaWear-macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = C182E036D9E6F3D07BEC97EC9F43D014 /* Build configuration list for PBXNativeTarget "MetaWear-macOS" */; - buildPhases = ( - BCD6BC115E657B520579DC260D2A4A0E /* Sources */, - D0EA1F7B07303F58C575AB04F4BA79C1 /* Frameworks */, - B8D32931AD728459BE84F26C643E2435 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 6252D94FC29354CA861E62C974A76FD5 /* PBXTargetDependency */, - 1597A811706FED0987AC15935B1EE747 /* PBXTargetDependency */, - ); - name = "MetaWear-macOS"; - productName = "MetaWear-macOS"; - productReference = EC71AAB2A59E4F4EA43F2599557BDE1D /* MetaWear.framework */; - productType = "com.apple.product-type.framework"; - }; - 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 21252E6CE3D099A3BE867C48DE81CB0E /* Build configuration list for PBXNativeTarget "Bolts-tvOS" */; - buildPhases = ( - 6DD82737306C9AF8FB58651E9367AF01 /* Sources */, - 80D69EF943238FEBF67C35FF9B6A0488 /* Frameworks */, - D61DA1B92893F982FE24E15F65581810 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "Bolts-tvOS"; - productName = "Bolts-tvOS"; - productReference = E8BE0A8C865C4E839B99B2117E684133 /* Bolts.framework */; - productType = "com.apple.product-type.framework"; - }; - 287F4D040AB4AF27E5717EA5E34B1666 /* Pods-Starter-macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 33233CD65B0248346DE14856072347B8 /* Build configuration list for PBXNativeTarget "Pods-Starter-macOS" */; - buildPhases = ( - 73E7493F2CFA23894422E13877D004FC /* Sources */, - 20FB0981ACB7205DDC4D674DAC0C9BCE /* Frameworks */, - 76BABAB7A33481009079ACEA60AFAFFD /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 01364613FCC40E7EC448CA087261DED2 /* PBXTargetDependency */, - E01EEA2B8636B3EEF6709E1A172D9A89 /* PBXTargetDependency */, - 5191C8417573275CA9C5B7CAB7366933 /* PBXTargetDependency */, - ); - name = "Pods-Starter-macOS"; - productName = "Pods-Starter-macOS"; - productReference = 3ECE22CD2A3739824E6A6A6A9BD7DD4D /* Pods_Starter_macOS.framework */; - productType = "com.apple.product-type.framework"; - }; - 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = 409DF430E10DE59723D94565356B7AA8 /* Build configuration list for PBXNativeTarget "FastCoding-macOS" */; - buildPhases = ( - DA979A71CEF2468548B91196081D39D3 /* Sources */, - D4FCB708E30657BCF8E37542457C1C2F /* Frameworks */, - C2D43615CEB0FBE03506176F41A6F738 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "FastCoding-macOS"; - productName = "FastCoding-macOS"; - productReference = 93345218814D92BAF1F110638E52FB97 /* FastCoding.framework */; - productType = "com.apple.product-type.framework"; - }; - 4D9B457DC2D0A7DCADF739A8E0788C7A /* MetaWear-iOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = EF60F40F8CA7A40CFE4D8B71564E3318 /* Build configuration list for PBXNativeTarget "MetaWear-iOS" */; - buildPhases = ( - 73622519DAAE224EE51F5920821DF2D0 /* Sources */, - 36219BDF7509BF0A61A53E45F84DA51D /* Frameworks */, - EC77E9D1F54292B5FA57A643F30CF1D2 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - 6699FD0872B2885157B77B0F64AC0494 /* PBXTargetDependency */, - 071FC7211B0A2863F91BF3FB79703057 /* PBXTargetDependency */, - ); - name = "MetaWear-iOS"; - productName = "MetaWear-iOS"; - productReference = 6AB0A30D75B2F089043CF05965D6BF48 /* MetaWear.framework */; - productType = "com.apple.product-type.framework"; + name = "Pods-Starter-tvOS"; + productName = "Pods-Starter-tvOS"; + productReference = 26CCE0191F2361E7AB9EE12589BA02B3 /* Pods_Starter_tvOS.framework */; + productType = "com.apple.product-type.framework"; }; 6E496AE0DE14DA07A9CB5BF71633B177 /* MBProgressHUD-tvOS */ = { isa = PBXNativeTarget; @@ -4217,7 +1319,7 @@ ); name = "MBProgressHUD-tvOS"; productName = "MBProgressHUD-tvOS"; - productReference = 650639AB0823B2C98626B8A130A09A8B /* MBProgressHUD.framework */; + productReference = A38D6F688CF7790163295776066F18ED /* MBProgressHUD.framework */; productType = "com.apple.product-type.framework"; }; 721899F715C3ED9FF1C98348F4817567 /* MBProgressHUD-iOS */ = { @@ -4234,136 +1336,113 @@ ); name = "MBProgressHUD-iOS"; productName = "MBProgressHUD-iOS"; - productReference = 71F3674C7728465F6E2F69D1B3047D78 /* MBProgressHUD.framework */; - productType = "com.apple.product-type.framework"; - }; - 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */ = { - isa = PBXNativeTarget; - buildConfigurationList = D75ADFF3CA2C855E2C240F7340ADB3FF /* Build configuration list for PBXNativeTarget "FastCoding-tvOS" */; - buildPhases = ( - AC6E6FD4BBA54120F9B283E112CC4EBB /* Sources */, - FA02C51B412143161CAD4336E9E6AF43 /* Frameworks */, - 1318B4E9F403951124EC17FEE7972598 /* Headers */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "FastCoding-tvOS"; - productName = "FastCoding-tvOS"; - productReference = 9F8ED2337CB9E8BB6E170FC8CE9AEADE /* FastCoding.framework */; + productReference = 842A202188A000EC5EBB50C80C529FE2 /* MBProgressHUD.framework */; productType = "com.apple.product-type.framework"; }; - A34A5EBB8C6257BA9E83617163D63F06 /* Pods-Starter-iOS */ = { + 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = F7AA0A2914B0F1E0453DFC3BF09093B3 /* Build configuration list for PBXNativeTarget "Pods-Starter-iOS" */; + buildConfigurationList = C15248F9A568EEF86060A82785EBEB09 /* Build configuration list for PBXNativeTarget "Bolts-Swift-iOS" */; buildPhases = ( - 83F876D971B886C563BE9B84B846B3BF /* Sources */, - E9C9A26B41A33A916E23EAA7D9B4645C /* Frameworks */, - 901E929FFD2FE719C13FAF3667627695 /* Headers */, + E244A48ACFC423444B26D2E57E4B4326 /* Sources */, + 5E6AB88245DF515BF76A21E7F07A551C /* Frameworks */, + F417407C0B6EA3CDF6393834844740BE /* Headers */, ); buildRules = ( ); dependencies = ( - 0D5AC32A3896109EBB28ADA7DECF87A9 /* PBXTargetDependency */, - 9CDE872A0D15ADD903AC19A6069CF0DE /* PBXTargetDependency */, - DD7E5BF7F701B916D6E9954832337065 /* PBXTargetDependency */, - 8612B17D8841D958D67038398DD95713 /* PBXTargetDependency */, ); - name = "Pods-Starter-iOS"; - productName = "Pods-Starter-iOS"; - productReference = BBCBFC44DF32989632F95C6BDF11D6BD /* Pods_Starter_iOS.framework */; + name = "Bolts-Swift-iOS"; + productName = "Bolts-Swift-iOS"; + productReference = 705CAAE99B961363ADFAAA8A1048FD4B /* BoltsSwift.framework */; productType = "com.apple.product-type.framework"; }; - B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */ = { + 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 1D0004B7C8634CA30AE87A84B60F0E6B /* Build configuration list for PBXNativeTarget "Bolts-macOS" */; + buildConfigurationList = E4A6F070BCD73543FD7F22BD026494C8 /* Build configuration list for PBXNativeTarget "Bolts-Swift-tvOS" */; buildPhases = ( - 5584C05C82F95701ADF6E947DB5DFCB9 /* Sources */, - 3114F932C15CCEE243E3B7B0D909C109 /* Frameworks */, - 0848440AEE145491D062FA1D98F3ABF9 /* Headers */, + 730F33B4A4949B0B90944F7DB99AC28D /* Sources */, + 52D8007792955226E299963CE6E7B2B0 /* Frameworks */, + A0F34AB220B3CD87EDD9F987E0DC9DA3 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "Bolts-macOS"; - productName = "Bolts-macOS"; - productReference = 06D67AF6BC1F66232FB78A8FA0A5E904 /* Bolts.framework */; + name = "Bolts-Swift-tvOS"; + productName = "Bolts-Swift-tvOS"; + productReference = 5B90B7868113EDFBF9D11063CBB69049 /* BoltsSwift.framework */; productType = "com.apple.product-type.framework"; }; - BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */ = { + C3D9BB9778384C2046D6CCE0C9D9204E /* Pods-Starter-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = 295ECAA9B3954089BEFDC23B1D2C2730 /* Build configuration list for PBXNativeTarget "Bolts-iOS" */; + buildConfigurationList = 2DF4C123980DF1B99FDE556863958B83 /* Build configuration list for PBXNativeTarget "Pods-Starter-macOS" */; buildPhases = ( - 7D378469AAF08AC6A2C71003EBABC48F /* Sources */, - 5A0702E4EAE9DE569AF175068C4A2AEC /* Frameworks */, - 712CB9A4E0F17BD01F9E04F8A6098DA6 /* Headers */, + 8267FB127D7400FC78F847E40AD24034 /* Sources */, + B0ABC1EEC63E3376029E9FF7250C1AE7 /* Frameworks */, + 43DC4D6637F222DF4A5146276A01EA23 /* Headers */, ); buildRules = ( ); dependencies = ( + 33B3BF9A9D48551D9939BF3B08AA65F7 /* PBXTargetDependency */, + 280DE175F52FAD6EFE6D011C7DBE02F4 /* PBXTargetDependency */, ); - name = "Bolts-iOS"; - productName = "Bolts-iOS"; - productReference = 1F3E02924944EC129D9F55288F3C097B /* Bolts.framework */; + name = "Pods-Starter-macOS"; + productName = "Pods-Starter-macOS"; + productReference = 34C9FACD4A56F513121B81EAF1DEF1F7 /* Pods_Starter_macOS.framework */; productType = "com.apple.product-type.framework"; }; - CA8AA6F3311DB2A57368ABF575A65347 /* Pods-Starter-tvOS */ = { + E1A2C54E075045370CF68755E67F5C6F /* MetaWear-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = FB9434B617755392472AB2D8A37BE1BA /* Build configuration list for PBXNativeTarget "Pods-Starter-tvOS" */; + buildConfigurationList = 965F1DF3D567AD276B40466A5FE67385 /* Build configuration list for PBXNativeTarget "MetaWear-macOS" */; buildPhases = ( - 3DF42185465ECC528749B6A82B6D5601 /* Sources */, - 2E629FFD21BA3B411C7008EBE335A9FE /* Frameworks */, - CCD0C10F8DEC5BFCB97D09729C43C312 /* Headers */, + 37B7FB5D285F8977D23AB75380465449 /* Sources */, + C107DC355B3A2C4AE7A9EA0E49987443 /* Frameworks */, + 6F802F724AC8C8F22B2B26A6649CBC97 /* Headers */, ); buildRules = ( ); dependencies = ( - 9A28B34056FA77419461500852E91020 /* PBXTargetDependency */, - 4F34344B92754609272A2C28169C10A5 /* PBXTargetDependency */, - 287B4EE15F13E6FEFADA60118A2E2D40 /* PBXTargetDependency */, - 6B911B3392743A7165BE25BCF4856AF0 /* PBXTargetDependency */, + BCF770EC99CC441D0488D50C6DFCB766 /* PBXTargetDependency */, ); - name = "Pods-Starter-tvOS"; - productName = "Pods-Starter-tvOS"; - productReference = E65D997E60AC492A1A89BED6F624EEC3 /* Pods_Starter_tvOS.framework */; + name = "MetaWear-macOS"; + productName = "MetaWear-macOS"; + productReference = 51DA3B6E8BBC481F15FF2D11EED48B8B /* MetaWear.framework */; productType = "com.apple.product-type.framework"; }; - E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */ = { + ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */ = { isa = PBXNativeTarget; - buildConfigurationList = C1BAFA6DF62F72E7F34D56E69C8D6CC6 /* Build configuration list for PBXNativeTarget "FastCoding-iOS" */; + buildConfigurationList = 1E0D707402CA1F63E60BDEC50D3F5F4C /* Build configuration list for PBXNativeTarget "Bolts-Swift-macOS" */; buildPhases = ( - FB9D8559345AF64666D887C62EC8A6C2 /* Sources */, - B658E63502323819E88FF6D622A873AF /* Frameworks */, - A9478911E511B433B6592F07786789C1 /* Headers */, + B31CC50D099135A887F320844A2E875D /* Sources */, + 7E400A6572B56DC43FB793B930A064E3 /* Frameworks */, + 158AC36B1ACA55F00A3C0F319B775655 /* Headers */, ); buildRules = ( ); dependencies = ( ); - name = "FastCoding-iOS"; - productName = "FastCoding-iOS"; - productReference = AA7C05508944F117B8B5C00303909183 /* FastCoding.framework */; + name = "Bolts-Swift-macOS"; + productName = "Bolts-Swift-macOS"; + productReference = DD52F8BEAA10A37AF470D939730D0BB5 /* BoltsSwift.framework */; productType = "com.apple.product-type.framework"; }; - FC67B740EA48FAF3B42E481045B53E2E /* MetaWear-tvOS */ = { + FBCDB923BFEC9B087B78F572C6D26ABF /* MetaWear-iOS */ = { isa = PBXNativeTarget; - buildConfigurationList = FCDF7EAFCBBFE641E4584EAC0907121B /* Build configuration list for PBXNativeTarget "MetaWear-tvOS" */; + buildConfigurationList = 7B28A40CD46B75284864D77B8591DDD8 /* Build configuration list for PBXNativeTarget "MetaWear-iOS" */; buildPhases = ( - 19DB3DCC9D22734DA113EB3D7A6D6329 /* Sources */, - 859D369993CAFB5165ABD844B8DCC34B /* Frameworks */, - 8EBF31835A0E3C1C54B6840AEEDBA6C0 /* Headers */, + DAC4344AB541C2E1FE3B3D5692ACF811 /* Sources */, + 7D118543057A5154EB9012CBCAFF8236 /* Frameworks */, + EE5AA391C20B727D4ED945CE924D7EB3 /* Headers */, ); buildRules = ( ); dependencies = ( - 800C872E98875760CC60C5C153DB5F94 /* PBXTargetDependency */, - 6F01A1C573CBE1E028729F5B2C2C7E60 /* PBXTargetDependency */, + EBE57F65497DC291F159BFC758190F7F /* PBXTargetDependency */, ); - name = "MetaWear-tvOS"; - productName = "MetaWear-tvOS"; - productReference = 504242EFAD31C868C2B5F8AC3471669D /* MetaWear.framework */; + name = "MetaWear-iOS"; + productName = "MetaWear-iOS"; + productReference = 97E01BEBA7EBC898B3E81DF6073F7623 /* MetaWear.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ @@ -4372,8 +1451,8 @@ D41D8CD98F00B204E9800998ECF8427E /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0830; - LastUpgradeCheck = 0700; + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; }; buildConfigurationList = 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 3.2"; @@ -4383,190 +1462,102 @@ en, ); mainGroup = 7DB346D0F39D3F0E887471402A8071AB; - productRefGroup = FACF3047AF8E7C81EA633448F0D28C88 /* Products */; + productRefGroup = 9D18BCDB8BA397A99D68C7EEA19F73DA /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( - BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */, - B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */, - 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */, - E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */, - 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */, - 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */, + 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */, + ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */, + 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */, 721899F715C3ED9FF1C98348F4817567 /* MBProgressHUD-iOS */, 6E496AE0DE14DA07A9CB5BF71633B177 /* MBProgressHUD-tvOS */, - 4D9B457DC2D0A7DCADF739A8E0788C7A /* MetaWear-iOS */, - 054F5C0D34A7FBCCDAD12A03CB8F61E1 /* MetaWear-macOS */, - FC67B740EA48FAF3B42E481045B53E2E /* MetaWear-tvOS */, - A34A5EBB8C6257BA9E83617163D63F06 /* Pods-Starter-iOS */, - 287F4D040AB4AF27E5717EA5E34B1666 /* Pods-Starter-macOS */, - CA8AA6F3311DB2A57368ABF575A65347 /* Pods-Starter-tvOS */, + FBCDB923BFEC9B087B78F572C6D26ABF /* MetaWear-iOS */, + E1A2C54E075045370CF68755E67F5C6F /* MetaWear-macOS */, + 1CF10E2AEEEB932120CC7181BD88C40C /* MetaWear-tvOS */, + 17DFF68AAE741C208291E2C6EE2A3587 /* Pods-Starter-iOS */, + C3D9BB9778384C2046D6CCE0C9D9204E /* Pods-Starter-macOS */, + 3232B77B1F5CCC46816C499A0BA13E15 /* Pods-Starter-tvOS */, ); }; /* End PBXProject section */ /* Begin PBXSourcesBuildPhase section */ - 19DB3DCC9D22734DA113EB3D7A6D6329 /* Sources */ = { + 2DF4740AD1E04C3A2BD1BEB000106A01 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A106F35930C112C4933814AFCCB55600 /* BFTask+MBLExtensions.m in Sources */, - 7EECBC4494387CC394932DFC60B56E4A /* BFTask+MBLPrivate.m in Sources */, - 0838652626DF4DF0D8BA4CF0321CFB98 /* MBLAccelerometer.m in Sources */, - 0D4966532746B0EBD685C33BEB8B6F85 /* MBLAccelerometerAxisReadyEvent.m in Sources */, - F1B7D282DB145FB22CFEEF928F8501B0 /* MBLAccelerometerBMA255.m in Sources */, - BFDE25953277AB06846272F696F25625 /* MBLAccelerometerBMA255MotionEvent.m in Sources */, - 5FEA641C5134BF419967CB60C691AE35 /* MBLAccelerometerBMI160.m in Sources */, - 5259E11019505444D487134A70A6CB5B /* MBLAccelerometerBMI160MotionEvent.m in Sources */, - BA3AA1016F39C2D75CC8CF5924C931DC /* MBLAccelerometerBMI160StepEvent.m in Sources */, - 6D8C00DE53E684C6E33892D24D3346C7 /* MBLAccelerometerBosch.m in Sources */, - 89748C0A277182B3FFC8CCCB7678F184 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */, - 4739EFC106481427C7B0E8A153B95F5A /* MBLAccelerometerBoschDataReadyEvent.m in Sources */, - E4CAB5C597052EA735335C12D195EEA5 /* MBLAccelerometerBoschFlatData.m in Sources */, - 32D649F49F782E519B9F11A8E885E8C6 /* MBLAccelerometerBoschFlatEvent.m in Sources */, - 018707828F66FFDAD824EB2CC6594AAE /* MBLAccelerometerBoschFlatFormat.m in Sources */, - 339F6F56F2DEA345CA975165BF0BD372 /* MBLAccelerometerBoschFormat.m in Sources */, - EF95C644905F52ECCC75AA35F0676F35 /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */, - 83E996AE3CAE2D33BDAAFE89AF0003CE /* MBLAccelerometerBoschOrientationEvent.m in Sources */, - 1A7639922F5EFD267C27F5DF651EAAC2 /* MBLAccelerometerBoschOrientationFormat.m in Sources */, - F310557D5565A0453EBBFCDE5FA06E78 /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */, - 752A59251A92A1E1F5D7A5FF483CABD6 /* MBLAccelerometerBoschRMSFormat.m in Sources */, - 3F228097E731C3C17AFD51E89DBB688E /* MBLAccelerometerBoschTapEvent.m in Sources */, - F3121E4F44FEF8E9D55D660C64268C0F /* MBLAccelerometerData.m in Sources */, - FAF82FBA7B3AE956CC28059B5479E47F /* MBLAccelerometerDataReadyEvent.m in Sources */, - 7F548E1DD10D34E7B9C54824C36C8622 /* MBLAccelerometerFreeFallEvent.m in Sources */, - D583DCA8DF0ED48B9F40D55954B89BFF /* MBLAccelerometerMMA8452Q.m in Sources */, - 9CB61C61C59A6B5DD2A621A00DFE3945 /* MBLAccelerometerMMA8452QFormat.m in Sources */, - 06A454588CF8176103530DB26A4418F5 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */, - 130ECF256BB78A590629D34025336F90 /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */, - 2C408C20CE82360088003FE4C729137C /* MBLAccelerometerOrientationEvent.m in Sources */, - 55930F0C0205010A2B623DDCBFBD83FA /* MBLAccelerometerPackedDataReadyEvent.m in Sources */, - 6ECFDEC701314BAC13754EC5F4C637CE /* MBLAccelerometerShakeEvent.m in Sources */, - A8C5378CF817BFD387618E414387B7B4 /* MBLAccelerometerTapEvent.m in Sources */, - 047D8202411B0D9D39C6E91E2728EE28 /* MBLAmbientLight.m in Sources */, - 5F474BB6555A38A1599FF5885678B8B1 /* MBLAmbientLightLTR329.m in Sources */, - 943687131D8073AF9ADB952F06D6142B /* MBLAnalytics.m in Sources */, - 6714DFB35EF4E35D6ABC2EBD83BA3497 /* MBLANCS.m in Sources */, - 138118CE22A7DD1D5157AA6807134F40 /* MBLANCSEventData.m in Sources */, - CC0C284EC5A5A547EBB4A4FC3BB74163 /* MBLAnonymousEvent.m in Sources */, - 9F66B051664D101EFC3C19D2C19B6C30 /* MBLBarometer.m in Sources */, - 0357FA7328CE79C263359412EDBB5351 /* MBLBarometerBME280.m in Sources */, - 6EB5DD63D3E6606F94FA1D9DF580A63B /* MBLBarometerBMP280.m in Sources */, - 781C83F8943D76C79ED517A946E224F8 /* MBLBarometerBosch.m in Sources */, - 8858258AC4DE755A889456524A7DCE95 /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */, - D5312F9F3818AC8E134D6C150B6A1C5F /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */, - DDCA5E95770F7C1415E6445AE5D99233 /* MBLBitmaskEvent.m in Sources */, - DAB21ACA797BDF4883DC0F3A16B48846 /* MBLBluetoothCentralMock.m in Sources */, - A4381D9BE8BE0F3338C04E3692CB03A6 /* MBLBluetoothPeripheralMock.m in Sources */, - C7F0CC0D5641E492D52B8722D9398912 /* MBLCategoryLoader.m in Sources */, - 94ADC9F0B8840254116D5138CDEE3C1D /* MBLCommand.m in Sources */, - 8505C5427B44C5F8F970B1DD48B2652E /* MBLConductance.m in Sources */, - 0482099FFA08CE7F03A139E68F64B042 /* MBLConductanceData.m in Sources */, - 63AEE0922A218535A759F08B26A2AFCD /* MBLConstants.m in Sources */, - FB64F35B3687214FD23E129F8A2DC7F7 /* MBLConversion.m in Sources */, - 6A73B7310F2098D08F29D7FF9E8C0CB9 /* MBLCorrectedFormat.m in Sources */, - F0510417BB05E2CAAC00A2A40A4D514F /* MBLData.m in Sources */, - 4E3982064D322CA9A4D2D38A094C0E2A /* MBLDataProcessor.m in Sources */, - 6A8A19F3950C61B15DEEE3A673DCC105 /* MBLDataSample.m in Sources */, - 57F286CBB6ACBC070188E3F37EBA8ADB /* MBLDataSwitch.m in Sources */, - B7806E036B01ED2C005CD98FC706FA1F /* MBLDependentData.m in Sources */, - 77D6656F98B1C3F45FDE60AA882BD791 /* MBLDeviceInfo.m in Sources */, - A779A9F7678461D260E67691F7E11626 /* MBLDeviceLookup.m in Sources */, - 16491DE660C29D0387338693834CCA4B /* MBLDispatchQueue.m in Sources */, - 22443624992BCE5C75A8C7575559959E /* MBLDownloadOnlyEvent.m in Sources */, - 0B1D56452FE79C121AFE12C902E24B35 /* MBLEntityEvent.m in Sources */, - C1C503CE0B9854D7D1C69D195EE530E7 /* MBLEntityModule.m in Sources */, - D665C33AD8F7964D0E1B711B65500F0A /* MBLEulerAngleData.m in Sources */, - 280947584C042DD7CE224BCE39BD77B5 /* MBLEulerFormat.m in Sources */, - BD610D08819E65E5FABA0EF11130F092 /* MBLEvent.m in Sources */, - 94F13C84ABAA557DA39C59CBC3AD11F8 /* MBLExternalThermistor.m in Sources */, - E438B0DE0F98644A76EAEBF606E365F3 /* MBLExternalThermistor0.m in Sources */, - 64AB206CD732F9EEA82E66B7A887AEB8 /* MBLExternalThermistor1.m in Sources */, - 5A513B626707AAA7B6149C1C9FFD4638 /* MBLFilter.m in Sources */, - 8165706D31A9C1A561768413B6004282 /* MBLFirmwareBuild.m in Sources */, - 911C5F3DFC8E6DEC9F7E822851F19B7C /* MBLFirmwareUpdateInfo.m in Sources */, - D82D31FD3E2B0BCDC621ECEE903264E3 /* MBLFirmwareUpdateManager.m in Sources */, - F65E1D04CCB66F391DE78AE2BEE903F0 /* MBLFormat.m in Sources */, - 80DD485BA0C888E0414707DFF64DBDD3 /* MBLGPIO.m in Sources */, - CB84A1E2CD09CAF4CCA11C849CCB02F9 /* MBLGPIOData.m in Sources */, - 35456420EB057908F094E171CE9F4580 /* MBLGPIOPin.m in Sources */, - C7EEDA681FB9B4A6279F10DF80357EFC /* MBLGPIOPinChangeEvent.m in Sources */, - 2CB42E7672975839E2821FB722924294 /* MBLGravityFormat.m in Sources */, - BA0C43FFFE32C51A5024D58E37AE043F /* MBLGyro.m in Sources */, - 8A459BE9D777B409FE80AE9417AD8B5D /* MBLGyroBMI160.m in Sources */, - 77B2E4BDBDD7BBFF81CB9336CDAAC6BB /* MBLGyroBMI160AxisReadyEvent.m in Sources */, - AE9005CAB99F511D46509F34946AE34E /* MBLGyroBMI160DataReadyEvent.m in Sources */, - 6CD8DB7C2826074BDD9C8310129005AF /* MBLGyroBMI160Format.m in Sources */, - F0D0F67B34CA52DDC32AEFC12B4BEBCA /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */, - 9DE18A4C558536E2F56EA3D8E15D55C9 /* MBLGyroData.m in Sources */, - 2BBEE7F05D5A3AE8D625D0BDAA9F6086 /* MBLHapticBuzzer.m in Sources */, - A65E1E9DA469B4A9241C26327A232CCA /* MBLHygrometer.m in Sources */, - CBD36AC84B422086039EE1CB54A323F6 /* MBLHygrometerBME280.m in Sources */, - 98C3BD9CCF0D7E2C34DE4B312DB394CF /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */, - CEA576A54D53E971B00367F2E7058441 /* MBLI2C.m in Sources */, - 6534CA8165287486C69E7E07F9261806 /* MBLI2CData.m in Sources */, - 209FADE609951DEB783C949F19C2FA79 /* MBLiBeacon.m in Sources */, - F7C83B6BBAD175479AB0759CCFFE1384 /* MBLLED.m in Sources */, - AC03ABC86F3B83459E765B854660DF48 /* MBLLogger.m in Sources */, - 49C30556C8C540BB9734EDE068E3FFAC /* MBLLogging.m in Sources */, - 461AF67A9414C8EDF296B5A98DBE5987 /* MBLLoggingV0.m in Sources */, - E78FECBD5793124F2014FA535B3D20A6 /* MBLLoggingV1.m in Sources */, - 4EC01C7EDF8ABCD1A4C30FB932A3BE73 /* MBLLoggingV2.m in Sources */, - 2768518B7F6A55E5AC790D16F601FD52 /* MBLMacAddressFormat.m in Sources */, - 94433C82B25173EA50478480623A6FB0 /* MBLMacro.m in Sources */, - 420BC8D5322B13DD5F13332375293B37 /* MBLMagnetometer.m in Sources */, - F33AD5EC66A906E8894BAF984C8F6EFD /* MBLMagnetometerBMM150.m in Sources */, - AF9EBA084B8E23C2CEA3424C8A553F96 /* MBLMagnetometerBMM150Format.m in Sources */, - 4121D8CB18F318C85650309AA6424861 /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */, - 537E630FC0718F5088AF8A95568D3B28 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */, - EFDC1E905A756D1C170915BC2345312B /* MBLMagnetometerData.m in Sources */, - D53750D2D5F09D6022CC08CD1A52F12C /* MBLMechanicalSwitch.m in Sources */, - C1D017A38DE62D2C2F5FA86AF6444CEF /* MBLMetaWear.m in Sources */, - AA8DF2D5FF6FFD2E3C8DCCA39C604FD5 /* MBLMetaWearManager.m in Sources */, - 2B15C965342E2362D0EAE3FBC21063AB /* MBLMockPeripheralFactory.m in Sources */, - 29826E4B17F00492FB8DFBC88A51CC4C /* MBLMockUtils.m in Sources */, - 5B993B94839060087A7D4B99AEB163A1 /* MBLModule.m in Sources */, - F9BEDB426E426BF3F0482C18D37E6600 /* MBLModuleInfo.m in Sources */, - C0209F41D7FB4970B1D793816C5D4F17 /* MBLModuleMock.m in Sources */, - 143665E529D073BE98C784DF9F3926EF /* MBLMovingAverage.m in Sources */, - 26873FCD7E76937A1FE7BBF82D8869B9 /* MBLNeopixel.m in Sources */, - B2CD020AD473FC97C7D31DE371E6607C /* MBLNeopixelStrand.m in Sources */, - A0216C7C2A45F9A445B4A7BB219D38C2 /* MBLNonVolatileState.m in Sources */, - C8E9B9B86605B84403A71D265100D235 /* MBLNumericData.m in Sources */, - F375002B224DE82B7EA47F75696AF19C /* MBLNumericFormatter.m in Sources */, - 29EB0F8305B96EB3E4E245D551D2ED84 /* MBLOnDieTemperature0.m in Sources */, - 744194B10AFB26D3C439DBCF5DA11D88 /* MBLOrientationData.m in Sources */, - 9127D5CD43DB209E81CA4103EF599473 /* MBLPhotometer.m in Sources */, - 820FBC94190F9628468C86728F1090D8 /* MBLPhotometerTCS3472.m in Sources */, - F6C60E61D7D4FEF0B6F006B4B488D153 /* MBLPhotometerTCS3472Format.m in Sources */, - 0A31FF5D1FEE21A05D8FBC40341CE7BC /* MBLProximity.m in Sources */, - AC1D1160C9F8F3C32EB69A07834A632C /* MBLProximityTSL2671.m in Sources */, - BA5D2E5E313D50EC2CF0D28DFAF4B06F /* MBLQuaternionData.m in Sources */, - 7C466BF65CE8273751E0A9A6FD8A274A /* MBLQuaternionFormat.m in Sources */, - 595FB84AAD611DD71645CF8414F96602 /* MBLRegister.m in Sources */, - 68896861D99A6B79623978187F83CDBE /* MBLRGBData.m in Sources */, - 345A8B20E435551E1D2115F460921A85 /* MBLRMSAccelerometerData.m in Sources */, - F628B82BBAC10EF0C0B6677D9D765CF8 /* MBLSensorFusion.m in Sources */, - 90229477C14C2CB81927B7C99DAE670D /* MBLSerial.m in Sources */, - 1EBFF5114884178DD262F512653A1034 /* MBLSettings.m in Sources */, - 6C87674A4063AE1ADB0B8432561A041D /* MBLSPIData.m in Sources */, - E752FF738A3E0D2A8C69057EE4C37B3F /* MBLStringData.m in Sources */, - E591714DE14861ACB5D3890FADC058E9 /* MBLTemperature.m in Sources */, - 3E41B1AEC781A645ECB4612982CBE5CC /* MBLTemperatureV0.m in Sources */, - 3A8C1B056831746A5963A7F2C8C53629 /* MBLTemperatureV1.m in Sources */, - 2608A2B732BEAB17360E29B17B7F87EF /* MBLTestDebug.m in Sources */, - 4B54C18DA0FB2DCBBA080973FC2DE3F2 /* MBLTimer.m in Sources */, - 465F6C7BF68B40BB4A9F7CAE6E7B48D7 /* MBLTimerEvent.m in Sources */, - 10E99514ABABE27921AFCB96748A9F51 /* MBLTriggeredRead.m in Sources */, - 56AC87082416F428093779FA87657620 /* MetaWear-tvOS-dummy.m in Sources */, + 6977812480B1886DDC3B3A44533981C7 /* Pods-Starter-tvOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 3DF42185465ECC528749B6A82B6D5601 /* Sources */ = { + 37B7FB5D285F8977D23AB75380465449 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7FE66DABB00124A400D0EBB803CE27CF /* Pods-Starter-tvOS-dummy.m in Sources */, + DA3F350B744C33BD5A8E27AF1C6818D0 /* accelerometer.cpp in Sources */, + 6AE63282F26D28DDE38D7E4B4FA9E160 /* accelerometer_bosch.cpp in Sources */, + D86C11DF52CE5A9936E235E11C6FFADA /* accelerometer_mma8452q.cpp in Sources */, + 0CD9A408A38DB07CD03B5057FDEE1F93 /* ambientlight_ltr329.cpp in Sources */, + 10F1FF609A52EB8BB9C14417698CC429 /* anonymous_datasignal.cpp in Sources */, + 439B2A08739129FE38B9DE710BB9F02A /* async_creator.cpp in Sources */, + C9D3CDD56F0072FF03F931477E04E747 /* barometer_bosch.cpp in Sources */, + DA28FF858EC3EC0B7ED1CB10E8CC15B4 /* Bridging.swift in Sources */, + 1D169C4F8C8B4895B8AF7C9031CC3D85 /* cbindings.swift in Sources */, + 0DCC1A33EB453E9E3857277F50C30D53 /* CBUUID.swift in Sources */, + C20D68005BC723DF51F8BD098FC7341B /* colordetector_tcs34725.cpp in Sources */, + 440DB983EB1327D48044ED94E49C4BC5 /* conductance.cpp in Sources */, + 70F04BDD0BF8A3B0327457AC50804FE8 /* datainterpreter.cpp in Sources */, + E0BB6956AC8E8F75E4F16C246270196C /* dataprocessor.cpp in Sources */, + A581011B05D55BC22AA20D140B50614B /* dataprocessor_config.cpp in Sources */, + B0A11F7D4845244337B599B93A0BECEF /* datasignal.cpp in Sources */, + AF408C4D0187D267F500841DC16A1D39 /* debug.cpp in Sources */, + 9AB14ACE30AE5AB1149309687C276BB3 /* DeviceInformation.swift in Sources */, + 6B48387430277C5DFAEC35298FDADA59 /* dfu_operations.cpp in Sources */, + 5583AD9C6F3ED35CCF868C8F8DFA5798 /* dfu_operations_details.cpp in Sources */, + 24B4606535FEB6EC4D219338BF388ED6 /* dfu_utility.cpp in Sources */, + 7F19C10F02F40A1F3600319FA762953C /* event.cpp in Sources */, + 9AA0EDF2EE9E628B14BD44D9AB4EC17D /* file_operations.cpp in Sources */, + E8E0E10105BCB4FD3CCAB875D2681EFC /* FirmwareBuild.swift in Sources */, + A6BD42E9D017575E641733091CF164BD /* FirmwareServer.swift in Sources */, + 5DF085815D183D5BE6F1EB009E71CE95 /* gpio.cpp in Sources */, + 243D9C6E69C43AE953D651BBC12D2E32 /* gyro_bmi160.cpp in Sources */, + 34BA9F35FCF51D81D8FE5F6ABC16FC92 /* haptic.cpp in Sources */, + B0EBEFE3F9239D7E66CB3D0CDF6D7B5F /* humidity_bme280.cpp in Sources */, + 01F47C0378E434E2BEA38F0C76A3B84E /* ibeacon.cpp in Sources */, + EB4F1D2BAA763F9AE33BEADC8033B194 /* led.cpp in Sources */, + 1107234C5F163B99252F243B1F5628B1 /* LogDelegate.swift in Sources */, + 8165EECAAA8F4978A41A735AE0DB1560 /* logging.cpp in Sources */, + 44B09C0FB98A2341319C4019C0FAAF17 /* macro.cpp in Sources */, + CBF6FA683DC3FB7EE181AACA61F362B1 /* magnetometer_bmm150.cpp in Sources */, + 89698CDC89515B7CDABEC412E2A59E37 /* MblMwDataSignal+Async.swift in Sources */, + 2085605EEDD6E9675B8C390091E51B5D /* MblMwEvent+Async.swift in Sources */, + 33E4E4C4E95DEC1AB430466D0F930FB0 /* MblMwGattChar.swift in Sources */, + 09E1DF17D9B1FB5242CB00D468314C7E /* memory.cpp in Sources */, + CA55EB2E81D9AF9B17195DA40F21B63C /* MetaBootFinder.swift in Sources */, + 02B9CB54C3C7B2A022F33728BDA8E446 /* MetaWear+Async.swift in Sources */, + FAF33737CD78054A95E0B3D429DB34E9 /* MetaWear+LED.swift in Sources */, + A7C6528BE6DCD25F2DB961037F8509E3 /* MetaWear-macOS-dummy.m in Sources */, + 03FC206D57B151C395D81C77C62EBCC1 /* MetaWear.swift in Sources */, + 4179E2055AE7C9C81533E6C9F26732C6 /* metawearboard.cpp in Sources */, + DAB2FD05EC76E13DEF4365F2E16D3FB5 /* MetaWearData.swift in Sources */, + 0E2FDF4F00A9CEE558A9F30CB6932392 /* MetaWearScanner.swift in Sources */, + FF49E187067EDA057B5433EE485033DE /* miniz.cpp in Sources */, + 00AA40F26D612F771F2D41BEC07A7823 /* moduleinfo.cpp in Sources */, + 75575244EA2B673776253BF0D3B5759B /* multichanneltemperature.cpp in Sources */, + FA00D5671B5AFAB439624A9339DBEAD1 /* neopixel.cpp in Sources */, + C4C7F2E6D7CF2E59D67833C69AF4687D /* proximity_tsl2671.cpp in Sources */, + D603BE82C43C0FF0BC43441451A457A4 /* responseheader.cpp in Sources */, + CF1BFB8B634FA88CB548C39D5F4D3F29 /* ScannerModel.swift in Sources */, + 36AAC9BA6756E7C56BE17C15BBEBB2B9 /* sensor_fusion.cpp in Sources */, + 4BFFFCE73BCEF0C0D796E13B5B96907E /* serialpassthrough.cpp in Sources */, + 58C8FC4F9EA4A5C525EE6F9410CF060D /* settings.cpp in Sources */, + 31840425CE7BEDA4C9B1DCAFAC592F81 /* String+VersionCompare.swift in Sources */, + 2B961611FCCBC8763F2F6D6E5E0D0116 /* switch.cpp in Sources */, + 1855EB32E386F17FC0B35545157AEDB7 /* task.cpp in Sources */, + 18B714E1FF569E44BBF144FA68FE6466 /* threadpool.cpp in Sources */, + CC97B980CECD0DFDD6CA9F40EE6E1D90 /* timer.cpp in Sources */, + C5E0390ACB19ED47D3158CFADEC5049C /* utils.cpp in Sources */, + 57DF8EFA040AA1660BD1454A1F69B844 /* version.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4579,223 +1570,106 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 5584C05C82F95701ADF6E947DB5DFCB9 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - B48A409B6F0F125B05C55AE6A3051C62 /* BFCancellationToken.m in Sources */, - B6EF16CEB707294E1AFD32F00FFEC41F /* BFCancellationTokenRegistration.m in Sources */, - AB44EB4F0F86C31F4D5770DD705B0F60 /* BFCancellationTokenSource.m in Sources */, - 29408C09F08ECC7C4FA6CBAA842A3A2D /* BFExecutor.m in Sources */, - 6722A06F5DC3CAF3D6DD69A2F61F1F77 /* BFTask+Exceptions.m in Sources */, - 1EDF498579F01D17226D1373A1AF521E /* BFTask.m in Sources */, - C6226BFA7CA08D6F7602E45A28EFD2CD /* BFTaskCompletionSource.m in Sources */, - DCBEA3494D9F6B4AA99C96D52B16AC6E /* Bolts-macOS-dummy.m in Sources */, - 5BA14C990FBECA5929BDC7B694B4E43D /* Bolts.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 6DD82737306C9AF8FB58651E9367AF01 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - C6721CCD9F32EC0A0CF471D9F5412F93 /* BFCancellationToken.m in Sources */, - 3FE1D60563D69EC6A0878B4D19877336 /* BFCancellationTokenRegistration.m in Sources */, - C57A70AF286B0007FB3510A2FF46E2E9 /* BFCancellationTokenSource.m in Sources */, - A4514A1C10FC771A2C34CB2DE8E16575 /* BFExecutor.m in Sources */, - 046CEBDD8D9326BC344D84A651071897 /* BFTask+Exceptions.m in Sources */, - 637996777DE2D8D921DFBD1211B58FC1 /* BFTask.m in Sources */, - 9CB18EB11A75024E7E85B719B846693C /* BFTaskCompletionSource.m in Sources */, - 78913813A0934F595F9250D0EE01F52C /* Bolts-tvOS-dummy.m in Sources */, - 254CCE6F46947D196F937F326C3B132D /* Bolts.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 73622519DAAE224EE51F5920821DF2D0 /* Sources */ = { + 5E8EA83B2030A870BAA46235B1B0FBF3 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 33D1412A1A69DFE227D3AFFE062D8D94 /* BFTask+MBLExtensions.m in Sources */, - 8F7B8DB218C7C4BFBA549C3BE827287B /* BFTask+MBLPrivate.m in Sources */, - E33E5CE42FEB6C2C7093BCF1FC80A0EB /* MBLAccelerometer.m in Sources */, - D1CB6BD0DC26A9A74404230D3649DDC4 /* MBLAccelerometerAxisReadyEvent.m in Sources */, - 06E79CB8874D925C04B1CEBCF5142780 /* MBLAccelerometerBMA255.m in Sources */, - 1DCE35ADC3F86E93B18EC9932B9FAFBF /* MBLAccelerometerBMA255MotionEvent.m in Sources */, - 0C478C11AA543C802EC73CCACA336701 /* MBLAccelerometerBMI160.m in Sources */, - D99F69C2D2C5DF58EE23E817CA9F5720 /* MBLAccelerometerBMI160MotionEvent.m in Sources */, - 75D44F69F5D5A4059EC9608EF1ED4276 /* MBLAccelerometerBMI160StepEvent.m in Sources */, - 555967E96EBED672D1DCFCF21F896940 /* MBLAccelerometerBosch.m in Sources */, - 5078B818A1E7C97718D71A584CAF9C77 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */, - 4715F528021766A0C2DFBFC0DDCE8B16 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */, - ABB429FA1469B931EB1DA42372FE51A5 /* MBLAccelerometerBoschFlatData.m in Sources */, - 99D97CC6EB5948C403B51D58E2B9D129 /* MBLAccelerometerBoschFlatEvent.m in Sources */, - 1B6FA1EB71F39B9C8FE081506F21AD08 /* MBLAccelerometerBoschFlatFormat.m in Sources */, - A3E9B31A5A9B5A0C1C731312242D96EF /* MBLAccelerometerBoschFormat.m in Sources */, - 1AF35D798F76AB4EEA83FBF5E9803BA9 /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */, - 5EF72128C1015FB28DC442DE3EF9A7BE /* MBLAccelerometerBoschOrientationEvent.m in Sources */, - FB3D4B55F8DCFD751BBB23743D3D5E45 /* MBLAccelerometerBoschOrientationFormat.m in Sources */, - 117621719C75A193F9C4378074F1FCA5 /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */, - E9932869E328D226FBEC62F3EB13278F /* MBLAccelerometerBoschRMSFormat.m in Sources */, - 9CF52EC747E005BBE6D2896CCCB87E43 /* MBLAccelerometerBoschTapEvent.m in Sources */, - CE8AEE4419CD779023EB1389924A21CF /* MBLAccelerometerData.m in Sources */, - E0EFC7801776B88B0397D0F93B46ACCB /* MBLAccelerometerDataReadyEvent.m in Sources */, - 3FD16EA9AA4715A5B972852648B5F67D /* MBLAccelerometerFreeFallEvent.m in Sources */, - C41508DB88BFF09F1B765A6F4D8D08E9 /* MBLAccelerometerMMA8452Q.m in Sources */, - 1130F099490C4FE71C3DEA4AE1B2EB39 /* MBLAccelerometerMMA8452QFormat.m in Sources */, - 95D8697500A7D6B932E8FCBFDDB2EBB2 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */, - 853FF707B1BEFE4FE8F603B2A5E5C17E /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */, - 02D9114B6C63546D882B6EEB94977976 /* MBLAccelerometerOrientationEvent.m in Sources */, - F94DEBF52F8530CC3323696CB4512B4E /* MBLAccelerometerPackedDataReadyEvent.m in Sources */, - 6B66B425EC0E39CE2F8A58B2922828C3 /* MBLAccelerometerShakeEvent.m in Sources */, - E7CB4303ED58F21EAC00A8DBF5F2B52F /* MBLAccelerometerTapEvent.m in Sources */, - F5DBB15964C5531AD4237F9A41ACE5EB /* MBLAmbientLight.m in Sources */, - E8148DE25911050ABDBBC51A2FEEDE7B /* MBLAmbientLightLTR329.m in Sources */, - 7C3F69EF5C7DB9C2CC44E16D056F2948 /* MBLAnalytics.m in Sources */, - C49FB07F49BB9375411D6633AA705AFF /* MBLANCS.m in Sources */, - F9E35E58B17CCECB2AB549D7EDF39881 /* MBLANCSEventData.m in Sources */, - BF9C451A354CDA6FD85327EACA583159 /* MBLAnonymousEvent.m in Sources */, - 19B9EA746720828F076A4F592650933F /* MBLBarometer.m in Sources */, - 8645438749D5D7785D9BB50559645683 /* MBLBarometerBME280.m in Sources */, - 1F849E5A46B41DADB32D0A55BF89BFAE /* MBLBarometerBMP280.m in Sources */, - E23F3BBFCB514305C8F2B08F5A3417E8 /* MBLBarometerBosch.m in Sources */, - 70EFCFA1FB27C83BF1CE48066F886D95 /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */, - E9958129438979A28AAB83F974CF41A2 /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */, - 2CEDFFEB09ED092B27C85E9A3043DDA8 /* MBLBitmaskEvent.m in Sources */, - 5CE99307D564CB9D8B073D4A984E04FB /* MBLBluetoothCentralMock.m in Sources */, - 06C6F5AB79D6964167973306E6140CB3 /* MBLBluetoothPeripheralMock.m in Sources */, - EC7DD62F6C9B5A55940FCBCC2F2916B4 /* MBLCategoryLoader.m in Sources */, - A1AFC3934E737186C809345E1DC3B397 /* MBLCommand.m in Sources */, - 388A205B3CE7589B4C95CB9A80C01DA4 /* MBLConductance.m in Sources */, - E5759AD5C31FA3164867702627E69B9A /* MBLConductanceData.m in Sources */, - 65E59B3D0CF5314B971913A850D80610 /* MBLConstants.m in Sources */, - 59A3F0E928C90E782CEE4FA1F8B31A9D /* MBLConversion.m in Sources */, - 2FCF3D03C78C81181AA551D24EFEC502 /* MBLCorrectedFormat.m in Sources */, - 6148A4AFAA0F4ACE3E37FEC8DAD6C202 /* MBLData.m in Sources */, - 5C3FC37C4CA1B3A4975C3ED04CAB6317 /* MBLDataProcessor.m in Sources */, - F682C92A9C1B4A1C17803E6A8C74111C /* MBLDataSample.m in Sources */, - C41155C6FCF0558D35D5A0422E918483 /* MBLDataSwitch.m in Sources */, - 319DFCE42E1BE851B2C20F3F334DD6F4 /* MBLDependentData.m in Sources */, - 3DCBE8FA5FC59E401F1BCB0EF44760FB /* MBLDeviceInfo.m in Sources */, - 6822B1DF407E9B3C59736ED8524A477F /* MBLDeviceLookup.m in Sources */, - 890B8A444F4356E37B1BB6D312C8D61C /* MBLDispatchQueue.m in Sources */, - F3F3C7D31D2CDB55BBC399D99E432358 /* MBLDownloadOnlyEvent.m in Sources */, - 137E9F681D6303248F0F5DFD076D9E19 /* MBLEntityEvent.m in Sources */, - D88ED6E37D1C7A9B0C1BDEBE98BEC3B0 /* MBLEntityModule.m in Sources */, - 1957D848BFE70BEF89ECE674E564EB32 /* MBLEulerAngleData.m in Sources */, - 31BE8E6FD90F018BA39D1CB46B8C1957 /* MBLEulerFormat.m in Sources */, - 686A14B7DDF4CA581BD0A078A0DB0830 /* MBLEvent.m in Sources */, - 2B4C6F67A9738437D0585749FFF9D7F3 /* MBLExternalThermistor.m in Sources */, - 2AEC7EEBE8B3818F123317579FB5F702 /* MBLExternalThermistor0.m in Sources */, - 9DD55DDD25DE04F99F5847FD12E5189E /* MBLExternalThermistor1.m in Sources */, - 3D329D47374A0BDD9D982902F08EB650 /* MBLFilter.m in Sources */, - 5314C1591BACDE231683623AE457C0FA /* MBLFirmwareBuild.m in Sources */, - 93D2DCA99D8EE7E38079242DFC0C53CA /* MBLFirmwareUpdateInfo.m in Sources */, - 2A0606C29B1A1429EF8104518C962317 /* MBLFirmwareUpdateManager.m in Sources */, - 9139187598353BCB66A4601BFFF4B133 /* MBLFormat.m in Sources */, - 72B486BCCFE03454BE007434698E725C /* MBLGPIO.m in Sources */, - 5367C76D7FFD7281CAA23206E9AEFF64 /* MBLGPIOData.m in Sources */, - 616715322FD145FF2E8A455F253A935D /* MBLGPIOPin.m in Sources */, - FDFDECCDB222A235F13F184634AE4D71 /* MBLGPIOPinChangeEvent.m in Sources */, - D90015858A35995F4CBD41A56E6E44E7 /* MBLGravityFormat.m in Sources */, - 7A538E478B370BF3C50EC4DCAC639201 /* MBLGyro.m in Sources */, - 328EFCF1807CB98BC92392985C26BE6B /* MBLGyroBMI160.m in Sources */, - 6E69B8D77921C94ED8C90120800EF45C /* MBLGyroBMI160AxisReadyEvent.m in Sources */, - D4687178DA82579EEDAFF787F599BDEC /* MBLGyroBMI160DataReadyEvent.m in Sources */, - 25402D1EA49A28ADF599A27820333568 /* MBLGyroBMI160Format.m in Sources */, - D90E7EC83B25E6C27BD2526D68DBA549 /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */, - 12123103B1106D8EC10B68333174E6D4 /* MBLGyroData.m in Sources */, - B632CE947446D6378A8131A2A657DF50 /* MBLHapticBuzzer.m in Sources */, - 1F20B4873A6190061D845DB8731DA24E /* MBLHygrometer.m in Sources */, - E2F21F0DA1762D617EDF9AD84EFEA1F1 /* MBLHygrometerBME280.m in Sources */, - 7F5F0CE8A0D1123248D19D86CDB6A19B /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */, - AFDC78C03FED9399A73F2D6FFDF7AF21 /* MBLI2C.m in Sources */, - 8913E584C4F6FDF13A2E3AADB0F03CB3 /* MBLI2CData.m in Sources */, - 1D3E27DE12C010B75C797DDA6013B4AE /* MBLiBeacon.m in Sources */, - 213E27EB1EA48B0D5A51E5ADF413DF82 /* MBLLED.m in Sources */, - 41488489BC887FC280584349E11364E0 /* MBLLogger.m in Sources */, - 6B4DDA22139A6A43F65F9204015B388B /* MBLLogging.m in Sources */, - 8933BF62884AAF9DC664DD1A0F8CA1F3 /* MBLLoggingV0.m in Sources */, - 9DD1A8D3E74D653E3D54EE1D923B20E7 /* MBLLoggingV1.m in Sources */, - 1D97F6B078C80889883AD3D1CBCDB6AE /* MBLLoggingV2.m in Sources */, - 25EB0FBA30E094568C065E1BC4BA4696 /* MBLMacAddressFormat.m in Sources */, - F2D0933A6F6CFFB7CE8348341FFCFBCB /* MBLMacro.m in Sources */, - ECDE4151B3ED878A4B820A2F8075189C /* MBLMagnetometer.m in Sources */, - 76331E4A5EE1D3F8951A2C17F610167F /* MBLMagnetometerBMM150.m in Sources */, - 6E2119DA273C355C81BD3EB34D494418 /* MBLMagnetometerBMM150Format.m in Sources */, - A0FF541F7E1DF9018EBE1D3A4C31985E /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */, - BDC67E9BC42F55D39A6798A481304071 /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */, - 195276FC91950470CEFDC3B929DC01F4 /* MBLMagnetometerData.m in Sources */, - AAB7CA1058406A900930DC1396BD5306 /* MBLMechanicalSwitch.m in Sources */, - 76404633A761490CC03A8D554FDE47E5 /* MBLMetaWear.m in Sources */, - F4C11FD2743E3B0FC49C3F870D81AA97 /* MBLMetaWearManager.m in Sources */, - 2E4063B403662958F2FF9CA3DB16ADAD /* MBLMockPeripheralFactory.m in Sources */, - 5A64A7465E17F48155FAF021E1B3E000 /* MBLMockUtils.m in Sources */, - BA42D63F8939B81AC035BD2372D7818F /* MBLModule.m in Sources */, - 40466D153DB3F737F39155AC6013B331 /* MBLModuleInfo.m in Sources */, - 2630BEE87165E7AA06DA5E94E4556FFF /* MBLModuleMock.m in Sources */, - A13CBDA03FFDE6A867FC76AC952E9FB8 /* MBLMovingAverage.m in Sources */, - 179A16B937582359FF4A4011E358CAC5 /* MBLNeopixel.m in Sources */, - 33D851F6E22642FDA677CBC3F8097BC4 /* MBLNeopixelStrand.m in Sources */, - DF73DD9B22E471A2511F663DE39C7A94 /* MBLNonVolatileState.m in Sources */, - 2FF9B04C002990A888715522023CF806 /* MBLNumericData.m in Sources */, - 89E38D90D76AFAE6621D33BB481B2744 /* MBLNumericFormatter.m in Sources */, - A49E3F0877296D69DC8072CFA30DB600 /* MBLOnDieTemperature0.m in Sources */, - 34138D1188F9D8A502998D18E54D5782 /* MBLOrientationData.m in Sources */, - 61353C96639CE1D106F470B94DE768CE /* MBLPhotometer.m in Sources */, - 3EAE76DA5324E7BF3907946988395C8B /* MBLPhotometerTCS3472.m in Sources */, - 06EA24E33D9774729D9E174E6E61CC4B /* MBLPhotometerTCS3472Format.m in Sources */, - 3837B939212B40969CD7BC5D0D5AA5B4 /* MBLProximity.m in Sources */, - 0DB6D8CB4D06B9251D66914573CC927E /* MBLProximityTSL2671.m in Sources */, - 2E9F7F56E9D3E554F4F29333D8BE943C /* MBLQuaternionData.m in Sources */, - A20D5024C9B3B230EA4DC6FA2417BB91 /* MBLQuaternionFormat.m in Sources */, - A97D730D835292AF44A280EA62F1D550 /* MBLRegister.m in Sources */, - 85E4AD14B0D5E6B10C9F2EFFA2DB0477 /* MBLRGBData.m in Sources */, - C68E0C854C974F0A2A5042AAAAA22333 /* MBLRMSAccelerometerData.m in Sources */, - BBF1809F639C6BAC81A7E5969D5C248F /* MBLSensorFusion.m in Sources */, - 2F98E395547233A7BCDEA10B45779823 /* MBLSerial.m in Sources */, - 031B559C34052F802BF87B08AA027008 /* MBLSettings.m in Sources */, - 1A0E8C176BDF5300C23B0255524130DB /* MBLSPIData.m in Sources */, - A114BE58C5004B7ABA46200EEC457D97 /* MBLStringData.m in Sources */, - 8C01269496E76D94BAD7C573922318A6 /* MBLTemperature.m in Sources */, - B6AC88B8838BDB10B88C5B5F9958272B /* MBLTemperatureV0.m in Sources */, - 5B195DCCD325820371AE96FF4F33AE18 /* MBLTemperatureV1.m in Sources */, - D312BCE2CB30D3FC301BE0B82EA5B12D /* MBLTestDebug.m in Sources */, - C6AEB2650431E12A89A1AEF5C071F9E4 /* MBLTimer.m in Sources */, - B3D2BAC79EC2E7A48B24FB6E505C7D4A /* MBLTimerEvent.m in Sources */, - 3AFB659BBC277EF5752A2E3F855D6CD6 /* MBLTriggeredRead.m in Sources */, - 4105636F0F38EFD6756FA79B845D3D8E /* MetaWear-iOS-dummy.m in Sources */, + 3658E8637546C4407D2D8E453734E60B /* Pods-Starter-iOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 73E7493F2CFA23894422E13877D004FC /* Sources */ = { + 730F33B4A4949B0B90944F7DB99AC28D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8385251D1448DBEECFA56D1B356CC706 /* Pods-Starter-macOS-dummy.m in Sources */, + 8E24184B3FE1955E7E5BE11F93FACA1D /* Bolts-Swift-tvOS-dummy.m in Sources */, + F8E9358B45053FEA1707208937B23C29 /* Errors.swift in Sources */, + A0A589753D6E30B528687EEDF919CCFB /* Executor.swift in Sources */, + B20686A480E9EEA1425DDDF4D9BD0EA7 /* Task+ContinueWith.swift in Sources */, + BA24BA3DD363B4DDF5EC6760EEE8D192 /* Task+Delay.swift in Sources */, + 599DF4151C07E6AFD0C01B22BDC368AE /* Task+WhenAll.swift in Sources */, + 80187C20199FBB70BED85C68277F6CC0 /* Task+WhenAny.swift in Sources */, + 28284DE59A477A53FCB24FAFC5F04671 /* Task.swift in Sources */, + 05CCD262D39E111E53164DA1E236C954 /* TaskCompletionSource.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 7D378469AAF08AC6A2C71003EBABC48F /* Sources */ = { + 8069B1CC2721F90BA2C01B8059E6E527 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 76079A2943369454D7765952AA604B87 /* BFCancellationToken.m in Sources */, - 00C6D900C7849201DDF56DD4CE31DF30 /* BFCancellationTokenRegistration.m in Sources */, - 9B758184F6C5CF29E6BA196CA0F13116 /* BFCancellationTokenSource.m in Sources */, - 9B0EDE0A419A66C3ED79CEEE9A3760D4 /* BFExecutor.m in Sources */, - D6D48914E583F6E111C68172DA1E0C27 /* BFTask+Exceptions.m in Sources */, - 3682C829A785BC1BBD85DF997D5A815E /* BFTask.m in Sources */, - 3ACC1A4721E0420C37FE3A129551B71F /* BFTaskCompletionSource.m in Sources */, - A731ADAD169347FF7E5B549C1356F151 /* Bolts-iOS-dummy.m in Sources */, - 3DCCB929EF3A458A8E52E988E290B7F4 /* Bolts.m in Sources */, + 6DE5C190E083A170512267E1E3EEBEBF /* accelerometer.cpp in Sources */, + 2F3DEBBE370C678EFB97A8414061B17B /* accelerometer_bosch.cpp in Sources */, + 890BB982B0B51456DE2CB27E0A0FE773 /* accelerometer_mma8452q.cpp in Sources */, + CB7AD1C65CAE5EB0D6BC5F9A59DF20E5 /* ambientlight_ltr329.cpp in Sources */, + 3ACFC78174B60F610877D301FE8B3602 /* anonymous_datasignal.cpp in Sources */, + 578FF1EE1C615C93ABA8786DB7D014B0 /* async_creator.cpp in Sources */, + FA1DC63B536E91ADBA8F6D353B2B17A0 /* barometer_bosch.cpp in Sources */, + 13E906FFA9FF76393ACC4005988D87C9 /* Bridging.swift in Sources */, + 2A0584DB80D0415029506E71593D9AFD /* cbindings.swift in Sources */, + 1EB2062FFB9DD960719FDDFAA831A26E /* CBUUID.swift in Sources */, + D00F87C833657660EABBFEA9765491EC /* colordetector_tcs34725.cpp in Sources */, + C42ABAEA4DDAE4FC5776AFAC72562A4A /* conductance.cpp in Sources */, + 850ADD47A49F935A96E5E9F0F056FCF9 /* datainterpreter.cpp in Sources */, + ECE41EEB88CB5FDCCAFC87D4873569A5 /* dataprocessor.cpp in Sources */, + 0204CA96A8401DD93D9D19D1176C39CE /* dataprocessor_config.cpp in Sources */, + 1C4A8AF667BCB1C0420D40771F040E1F /* datasignal.cpp in Sources */, + 94CF0946977C2B3747D9731E58AF766C /* debug.cpp in Sources */, + D7AFEEF71D449A6A91FAE7FC5DE597BD /* DeviceInformation.swift in Sources */, + 65EAF8EACE041FB1666F8DD7C0711FAB /* dfu_operations.cpp in Sources */, + 4EA58A2CB9C716A151E69E25B3B15A4B /* dfu_operations_details.cpp in Sources */, + 14D9733934BB3A089D231D0A6EEF544A /* dfu_utility.cpp in Sources */, + 8DAB5528699FB3F50611211F42EBD241 /* event.cpp in Sources */, + 51285A539BD82969A7175C2D250747DE /* file_operations.cpp in Sources */, + BC2177DC7CE451AD18F2F815A421FBA5 /* FirmwareBuild.swift in Sources */, + 9943D61C6104A9F571DCCC462A408BF9 /* FirmwareServer.swift in Sources */, + 5DD9788396623FC1FAD106AEAEF3F7F7 /* gpio.cpp in Sources */, + D9615341D1910D462CA6B8B8B2C216F4 /* gyro_bmi160.cpp in Sources */, + 4BAC134A349E0F21ADEB527C1C717FB0 /* haptic.cpp in Sources */, + 3B52BEE544254223D8B4DBED4D82FCCA /* humidity_bme280.cpp in Sources */, + 645A4D1E939175D19701DE18C2216FDC /* ibeacon.cpp in Sources */, + 552CD4D1CC87A83892FC02A18670238A /* led.cpp in Sources */, + E1AF0CD0888066D186AEA5922BA41AC2 /* LogDelegate.swift in Sources */, + 8C8AD17CA7484FC06B4BCE5EDEEE6719 /* logging.cpp in Sources */, + B5EA71ADAFE551E022B241A2D207B801 /* macro.cpp in Sources */, + 580AF1955287A6FECCB09B452B790E44 /* magnetometer_bmm150.cpp in Sources */, + 289F8D4CE9C2B250BCAEEEB5AB470AF6 /* MblMwDataSignal+Async.swift in Sources */, + F443F12CF4DE9F0EB92D037B53A219B7 /* MblMwEvent+Async.swift in Sources */, + 3EC76AEEDA9CD3FE92B8C210CD5358E4 /* MblMwGattChar.swift in Sources */, + FACFB54045A99F069AAC8AA100923EB1 /* memory.cpp in Sources */, + 8D87DE99183BAF387BE553BAD32528E6 /* MetaBootFinder.swift in Sources */, + 247D566A02CD02A693E29EF813DB47AD /* MetaWear+Async.swift in Sources */, + 2B542D8D8FC2635341941C27DA18A526 /* MetaWear+LED.swift in Sources */, + C99810D894A80459FA43D10572E8C7C4 /* MetaWear-tvOS-dummy.m in Sources */, + B33B31BC4484B4E47F8E0D5B15AF5890 /* MetaWear.swift in Sources */, + 735DBDB30E1AA8AF512426813204CD0B /* metawearboard.cpp in Sources */, + 2D1EE656694E195748608F858413504E /* MetaWearData.swift in Sources */, + 5647322C1F12138CA499F3047A51E06D /* MetaWearScanner.swift in Sources */, + 6C8644E1469B8A0E8DB50151DD4938A8 /* miniz.cpp in Sources */, + F94EDF3F14B1DEAD3CCCE720499480F3 /* moduleinfo.cpp in Sources */, + A6B5330932DF153D7DB8F798652D2A3A /* multichanneltemperature.cpp in Sources */, + 10CA49691E011DC9340451D068C7DAFF /* neopixel.cpp in Sources */, + 977B1CEED3BA8C9DF9D50B141BF3DE34 /* proximity_tsl2671.cpp in Sources */, + 051BB894CCF08D223FEEDB3DC118E921 /* responseheader.cpp in Sources */, + 251F11BDE6742EBACBF6486D99550034 /* ScannerModel.swift in Sources */, + 034F09D6D06D1D88731054B110D11E46 /* sensor_fusion.cpp in Sources */, + 24A159AF7A28BB5DCBC0092807B0B03E /* serialpassthrough.cpp in Sources */, + 1BDB17D8445A86BAC3856886A766E617 /* settings.cpp in Sources */, + F7C5E4909F714AF06A2BB5D44CA7CC3E /* String+VersionCompare.swift in Sources */, + 400D163D4D8A186D843F9B78258B4630 /* switch.cpp in Sources */, + A04FE8BA5EF1C31B1A2CC9E15881A5C9 /* task.cpp in Sources */, + 9326B17393A4E384D19E32D360B10830 /* threadpool.cpp in Sources */, + 0AF5CFDE46039F06B54ADD854A0A22F1 /* timer.cpp in Sources */, + 11097C36437278F1507C48D5D4A41458 /* utils.cpp in Sources */, + 734057868E620DDBF54FDE3C3F9F4907 /* version.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - 83F876D971B886C563BE9B84B846B3BF /* Sources */ = { + 8267FB127D7400FC78F847E40AD24034 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1C7ADA7278632D8B54635091B5DE967F /* Pods-Starter-iOS-dummy.m in Sources */, + A6D5CF4196559DED4EECFF20766C2D1C /* Pods-Starter-macOS-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4808,487 +1682,186 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - AC6E6FD4BBA54120F9B283E112CC4EBB /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 563AACA761BA9910780CC56C7F192FD4 /* FastCoder.m in Sources */, - F8DD67B883144E11180D0BDE15DEE0E3 /* FastCoding-tvOS-dummy.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - BCD6BC115E657B520579DC260D2A4A0E /* Sources */ = { + B31CC50D099135A887F320844A2E875D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A35F515894C26F1DB116A3242FDF7DED /* BFTask+MBLExtensions.m in Sources */, - 3E1BA60085BE599210D66E446904476E /* BFTask+MBLPrivate.m in Sources */, - 5909B9C2604804C026E241095C78B8B2 /* MBLAccelerometer.m in Sources */, - E64C271956A9EAB243E28460099FF443 /* MBLAccelerometerAxisReadyEvent.m in Sources */, - 7B0E90830BCE718BDF61BA08F8083F30 /* MBLAccelerometerBMA255.m in Sources */, - 0FAD7AA5CF796DC301B76E2C79BB7481 /* MBLAccelerometerBMA255MotionEvent.m in Sources */, - 3BD25BDF68D95BC1FBC955FCCC5A3201 /* MBLAccelerometerBMI160.m in Sources */, - 031D6CD281D02EEC039D2551D6ABFA47 /* MBLAccelerometerBMI160MotionEvent.m in Sources */, - 7E46B7C888331B764B03EB41BE9560C5 /* MBLAccelerometerBMI160StepEvent.m in Sources */, - 94E232F660AAC4031B3F18E44ABD6C42 /* MBLAccelerometerBosch.m in Sources */, - 007A5F935E0FE09D37DCF0CE578020E5 /* MBLAccelerometerBoschAxisReadyEvent.m in Sources */, - 28B366DFB04605067F27311BC48F1FB0 /* MBLAccelerometerBoschDataReadyEvent.m in Sources */, - A056927B46EFAAA78D5700835AB52238 /* MBLAccelerometerBoschFlatData.m in Sources */, - B124594588856D43402477BFC74C0B79 /* MBLAccelerometerBoschFlatEvent.m in Sources */, - 5FDE9A59F76C827C0DE796B8E10335E9 /* MBLAccelerometerBoschFlatFormat.m in Sources */, - E44D2B463A0DBDE4973AC008BAF1E02F /* MBLAccelerometerBoschFormat.m in Sources */, - 8F20AA4E8162C9FE089FF3EE0AF9B515 /* MBLAccelerometerBoschLowOrHighGEvent.m in Sources */, - 4A8D97520171A89EA1AEFBF1C5784FD6 /* MBLAccelerometerBoschOrientationEvent.m in Sources */, - BD69D3B987F638C452685664917B7FED /* MBLAccelerometerBoschOrientationFormat.m in Sources */, - 58511B74A77EA833ECA1848AE112FA7A /* MBLAccelerometerBoschPackedDataReadyEvent.m in Sources */, - 6A433764CC7616DF19EBD1EC61E0FC06 /* MBLAccelerometerBoschRMSFormat.m in Sources */, - 76CFFFC09EFA58ABDC484D3BAE2C43D4 /* MBLAccelerometerBoschTapEvent.m in Sources */, - B7579BB969AD9278A37F4C2367104AB7 /* MBLAccelerometerData.m in Sources */, - C3C519659E719618F49F8E8B7DFE2D6F /* MBLAccelerometerDataReadyEvent.m in Sources */, - 36516646DF97E3D835937E8F655914FF /* MBLAccelerometerFreeFallEvent.m in Sources */, - 92D8163A15DCA3886748A5461FD95A10 /* MBLAccelerometerMMA8452Q.m in Sources */, - E1BB726533972B28239A5D829E56E687 /* MBLAccelerometerMMA8452QFormat.m in Sources */, - A339D453FB88682D0005AFD1730E0F74 /* MBLAccelerometerMMA8452QOrientationFormat.m in Sources */, - 7EBDB665D62C77B5F35E7D8BF496C01B /* MBLAccelerometerMMA8452QRMSFormat.m in Sources */, - 5DDF87542F489E6C28A726F6CDD79BAE /* MBLAccelerometerOrientationEvent.m in Sources */, - BC40F0C5E65CBA51B476EF437C653504 /* MBLAccelerometerPackedDataReadyEvent.m in Sources */, - 2A2DC6A81B318858B30DA7BC8C8EDC04 /* MBLAccelerometerShakeEvent.m in Sources */, - 61CB1C5E8BB05D56DB63FA64449F7581 /* MBLAccelerometerTapEvent.m in Sources */, - D36CCEE619D1C12DB36ECED0201D56EE /* MBLAmbientLight.m in Sources */, - 8233EF251F69A1DF948277DD9617C2FE /* MBLAmbientLightLTR329.m in Sources */, - 5287966850BCB5E476D3C70E82FA1783 /* MBLAnalytics.m in Sources */, - C0BE899A770D55152D48FC6A77DC5B37 /* MBLANCS.m in Sources */, - 9CE16107A970CD17F6A4631F3F156C94 /* MBLANCSEventData.m in Sources */, - 979D7C9B881C9EE9D1BE18A2286E3AA1 /* MBLAnonymousEvent.m in Sources */, - AC17038B6F375B824989F37A81EE06E5 /* MBLBarometer.m in Sources */, - 1887829CCEB945F82C1E24F20F2E908E /* MBLBarometerBME280.m in Sources */, - 92D20CEEA10B427FFCF44B98931E29AB /* MBLBarometerBMP280.m in Sources */, - F5765763390E99286831F188856B47AD /* MBLBarometerBosch.m in Sources */, - 6B24FB384CF3BC441355661BC1D3320A /* MBLBarometerBoschPeriodicAltitudeEvent.m in Sources */, - FA00EF4DD7DBDE1DF356A9CB22405E85 /* MBLBarometerBoschPeriodicPressureEvent.m in Sources */, - 18432B2373F051FC06EAAD817879D114 /* MBLBitmaskEvent.m in Sources */, - 638B85A008A44C3B2E657477F86D620E /* MBLBluetoothCentralMock.m in Sources */, - 888F405D5C461AACF1D5502DE9795BA7 /* MBLBluetoothPeripheralMock.m in Sources */, - 0A916CD5F577DA64668F53B8F396ECDA /* MBLCategoryLoader.m in Sources */, - 61C688EE7D2DCE7B8A0CA7DD60A103C0 /* MBLCommand.m in Sources */, - 290505F95D9BB5ACA7F297CCD5FC8820 /* MBLConductance.m in Sources */, - 550B53A8B080F8520CB618003D69BDB5 /* MBLConductanceData.m in Sources */, - F79142D45CA1CDC24F04B35F3F73BCD5 /* MBLConstants.m in Sources */, - 1656B2CEDB6A30CF8960BC12BEBA56CF /* MBLConversion.m in Sources */, - 2855D02234B0E92618B01337C04E9C0B /* MBLCorrectedFormat.m in Sources */, - 5E5A4D64B9373F2E0DA4BF9623B074E1 /* MBLData.m in Sources */, - FE530DE2E9AA57382B98E715518FF04A /* MBLDataProcessor.m in Sources */, - 3CB4FCAA6D1DDFEBCF1EF7B58DBF8096 /* MBLDataSample.m in Sources */, - 2B3016244C664AD89C93E8302CB7304F /* MBLDataSwitch.m in Sources */, - 26384010544EEB78D82A39090D605576 /* MBLDependentData.m in Sources */, - 5213157153A8F4A38E281EF70C85EDB0 /* MBLDeviceInfo.m in Sources */, - 1A7E1FDE13C9AFDC237D075BDFF21F3D /* MBLDeviceLookup.m in Sources */, - 588BC55B42FA7E6323117881099C91F7 /* MBLDispatchQueue.m in Sources */, - 49BFE992E3E2B4535318AAF195BCD88F /* MBLDownloadOnlyEvent.m in Sources */, - A226BC4D7152A7FC24037CBF51F4235F /* MBLEntityEvent.m in Sources */, - 9A5034D615CA648F7B784B7E1F45CB1E /* MBLEntityModule.m in Sources */, - A0A2455D176E6F2F7AC49B76A40FD5F9 /* MBLEulerAngleData.m in Sources */, - 8FBED563BDFF9899E46D7E4F9AA54978 /* MBLEulerFormat.m in Sources */, - DD9CB78034D463200F54489293ED7E32 /* MBLEvent.m in Sources */, - B89F8A2397FA7B1DA90D8A25E43F5921 /* MBLExternalThermistor.m in Sources */, - ACB30AD68E209A56911A06B638994792 /* MBLExternalThermistor0.m in Sources */, - 476FED7D76119169EDC651E40B3E9FAB /* MBLExternalThermistor1.m in Sources */, - 34D92F80164F754A335DA1151801E63E /* MBLFilter.m in Sources */, - 6537371BD78E9965D04ED028C667037B /* MBLFirmwareBuild.m in Sources */, - 9FA8A6D38BBDA58267B76A0FDB19F766 /* MBLFirmwareUpdateInfo.m in Sources */, - BB303467E628F82BC22849CF187C0294 /* MBLFirmwareUpdateManager.m in Sources */, - 72AC19C212795D650DB0F484C0571704 /* MBLFormat.m in Sources */, - CC4282D74C53B1846232288FCB900427 /* MBLGPIO.m in Sources */, - 1D41C0220539BCC48DEED8F8E2913B4B /* MBLGPIOData.m in Sources */, - 35487A67A799CE73E1704369374A4CE7 /* MBLGPIOPin.m in Sources */, - D817F0ACF420CD1784232F36625E1ED9 /* MBLGPIOPinChangeEvent.m in Sources */, - 90EC76EB5B6E414DC46B5793A71AE65B /* MBLGravityFormat.m in Sources */, - 7FA4C3879DF434D97C649AD5750FE5E0 /* MBLGyro.m in Sources */, - EFE960277C850FFB2A186B7F020CD92A /* MBLGyroBMI160.m in Sources */, - 7D4B5F50474051F58C8F57231BBD6413 /* MBLGyroBMI160AxisReadyEvent.m in Sources */, - 3A6E198E6E3BEE3F95DC8534E3094655 /* MBLGyroBMI160DataReadyEvent.m in Sources */, - 841C2F77B40173F35D3C9E1F7201F004 /* MBLGyroBMI160Format.m in Sources */, - 8D87922D4912B85065D5CA7ACC589607 /* MBLGyroBMI160PackedDataReadyEvent.m in Sources */, - 914708D2230805C01EB67559B464A6EE /* MBLGyroData.m in Sources */, - 940E056B928EB976EF16DDAE573B8FD9 /* MBLHapticBuzzer.m in Sources */, - 22222295D117BDAAE2EF7B7BD0E500FB /* MBLHygrometer.m in Sources */, - C325089A21B112F5E27FE0D008E89489 /* MBLHygrometerBME280.m in Sources */, - 22FAF3ED28FA0B3D624A06DB239E1A2D /* MBLHygrometerBME280PeriodicHumidityEvent.m in Sources */, - 26F20B97CD0ABA4C71256CEC3A7698FD /* MBLI2C.m in Sources */, - 355FB16581D0A7A798BD88591B55BD60 /* MBLI2CData.m in Sources */, - 982368F3586B8E80C225CFEFF7DACEB1 /* MBLiBeacon.m in Sources */, - D48AD058F984EFFEDE42725589820691 /* MBLLED.m in Sources */, - FFF1C2AE5758C0D478EA4547BE5708D8 /* MBLLogger.m in Sources */, - 1F013FB42FF60A5AEDC2B0D1A840055F /* MBLLogging.m in Sources */, - A8C2AF9499DDA3DA010D20282D830B8E /* MBLLoggingV0.m in Sources */, - C6D486039788EC4EA96D60A28FCFDB4E /* MBLLoggingV1.m in Sources */, - C8E9275930AF4D30518B3805FAD6EE64 /* MBLLoggingV2.m in Sources */, - 7BEB696154F07C14B59BE390CBD7B008 /* MBLMacAddressFormat.m in Sources */, - 4B5D6C2344DFAF25A3C14B280559BBF5 /* MBLMacro.m in Sources */, - BC05C43718D67A08803D7E9A85D375C9 /* MBLMagnetometer.m in Sources */, - 6D0637F3867F912A84677B049A6F1C27 /* MBLMagnetometerBMM150.m in Sources */, - D2C1D8C9B8C8DF992F51EB7EA312DEFF /* MBLMagnetometerBMM150Format.m in Sources */, - CFA2264965FD2CC02A3C109763EFE18E /* MBLMagnetometerBMM150PackedPeriodicMagneticFieldEvent.m in Sources */, - F099ABE001F6547425857CAAD11C22BC /* MBLMagnetometerBMM150PeriodicMagneticFieldEvent.m in Sources */, - BE3CACDC2610746BD9FB055906295E54 /* MBLMagnetometerData.m in Sources */, - 98AB498CB06BCBA986064EF3B00DDCAE /* MBLMechanicalSwitch.m in Sources */, - ECAB74EADABA243A4AF9CE1BA15CB52B /* MBLMetaWear.m in Sources */, - 53D53CC1BAEFFDE7A720C048CF63AD26 /* MBLMetaWearManager.m in Sources */, - 88BFEE1EA3A643988F43F83DD22D1389 /* MBLMockPeripheralFactory.m in Sources */, - 255049C34DF850BCC81B63EB27D15DAA /* MBLMockUtils.m in Sources */, - D009A05D50D483FAB57D536B3E16E280 /* MBLModule.m in Sources */, - ED7B26AFFA2AC89FAC57203B615466FA /* MBLModuleInfo.m in Sources */, - E7C28F3235C5181C59DF843386970E6E /* MBLModuleMock.m in Sources */, - 4A2A02D09727BE4D443C4997B12F03BC /* MBLMovingAverage.m in Sources */, - FE8C13A4B26155F3FAF8DF2969A4CAF4 /* MBLNeopixel.m in Sources */, - 9E1A815A4EB3001702DF8BA9D3723D67 /* MBLNeopixelStrand.m in Sources */, - C61F8727D0282D333DAFB156F1EA439C /* MBLNonVolatileState.m in Sources */, - E25225D3BA7D62E1002421948659CF12 /* MBLNumericData.m in Sources */, - 4FBFABB5E2973E50748F0B5262B54CF9 /* MBLNumericFormatter.m in Sources */, - C503E53C337C5F70AFBFE640D8C6BDDD /* MBLOnDieTemperature0.m in Sources */, - 1ADEBFAD28FED1ECAEE88CF663EB053B /* MBLOrientationData.m in Sources */, - F4E7E8F099B8B41393C3A13150BC86C0 /* MBLPhotometer.m in Sources */, - 30B7E2ECE58C50129A1644DEC830AE88 /* MBLPhotometerTCS3472.m in Sources */, - 9396F6A8A9632933F8FB229923A44C12 /* MBLPhotometerTCS3472Format.m in Sources */, - F9377B89B42A0364A115D2C4838A50B8 /* MBLProximity.m in Sources */, - 1F5348BEEA5B06F0FD5A9FB2C4914DE1 /* MBLProximityTSL2671.m in Sources */, - 8B47AAE8AECE7D4CD718DCC7AA9C5AAD /* MBLQuaternionData.m in Sources */, - 6B7B03CDD95A2DF8E5D0BF7865A00C44 /* MBLQuaternionFormat.m in Sources */, - 487AFE502A2DAB10AA68BFBE2F8145A7 /* MBLRegister.m in Sources */, - 455926B2567A109690A2969608677FAB /* MBLRGBData.m in Sources */, - 9EDEBB8B39774BF25EE2CFE5C749AE37 /* MBLRMSAccelerometerData.m in Sources */, - 61D45D596D7710BA9B4C6280ED10FB22 /* MBLSensorFusion.m in Sources */, - B0326ECBCB247946E1E939D3BFA44F57 /* MBLSerial.m in Sources */, - 68D795AEB4FBD42C84BA347F13878D3B /* MBLSettings.m in Sources */, - FA16CF834177CDE89E66CA8CA528CD80 /* MBLSPIData.m in Sources */, - FC3505C0AD37D2284D7D355A59608FB4 /* MBLStringData.m in Sources */, - F83C49EF623BE6E8D1EA803A8C685277 /* MBLTemperature.m in Sources */, - 2FEB35238B28742F4168CB847F09344D /* MBLTemperatureV0.m in Sources */, - 1751903853DF56C5374AC2BFD18A7A84 /* MBLTemperatureV1.m in Sources */, - 26D2944CEE0520BEA69089F331F4E142 /* MBLTestDebug.m in Sources */, - DE8655D2A4663C75EC27AB78D4ABBD5E /* MBLTimer.m in Sources */, - FF2A42DBF63CD6A6AAC4DAFC4AE74C2F /* MBLTimerEvent.m in Sources */, - 14E4944B5900DD472818E4F41344BCA4 /* MBLTriggeredRead.m in Sources */, - 17A2040A905F3CE230935C2970129C8C /* MetaWear-macOS-dummy.m in Sources */, + 2D038B9C3B370C2A38017299D43962D9 /* Bolts-Swift-macOS-dummy.m in Sources */, + CAE9B81CB587A0032DE0A55C30A2AF14 /* Errors.swift in Sources */, + 67611705539950453B74BF7938761B9C /* Executor.swift in Sources */, + 44A5D6118DFF5DAEFC3B557DF257B32A /* Task+ContinueWith.swift in Sources */, + 558E398E75C0CFDB6DDAB6D25DB62328 /* Task+Delay.swift in Sources */, + 2E36271E6AAA86B51D49DF7717B2F6D2 /* Task+WhenAll.swift in Sources */, + DC68ACE0D1E3FA0E3BAEE02F20E1D24F /* Task+WhenAny.swift in Sources */, + E3E018DD4CB7B9AAB17D73F2FA44DE0C /* Task.swift in Sources */, + 706D99627D7A9951C56B9D4348B6843C /* TaskCompletionSource.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - DA979A71CEF2468548B91196081D39D3 /* Sources */ = { + DAC4344AB541C2E1FE3B3D5692ACF811 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 25438E9EE2B4EDC394BB5DBAFD50B679 /* FastCoder.m in Sources */, - 5B26278E4C33DA300DCA4AE70B95063A /* FastCoding-macOS-dummy.m in Sources */, + 62DE7BFBF349E63640D447072FC2CFCD /* accelerometer.cpp in Sources */, + B2E7890422398BBF438AD0FD67CCEBD2 /* accelerometer_bosch.cpp in Sources */, + 3D7AA76F5A7E2316692C10C89C727D2E /* accelerometer_mma8452q.cpp in Sources */, + F381EB33BD22CEACC717B291DA23CC2C /* ambientlight_ltr329.cpp in Sources */, + 0E96B336DCE446511F82F03ADB00FD14 /* anonymous_datasignal.cpp in Sources */, + CF7AC7E85FE787C026884E217CA154C2 /* async_creator.cpp in Sources */, + 0651E57BFB12F301C7D0D4C87ED7051C /* barometer_bosch.cpp in Sources */, + E1BB0FEDD8C2C6D4D42257650B16DE83 /* Bridging.swift in Sources */, + 853E46F5BE217A7626282484577A47A9 /* cbindings.swift in Sources */, + A772A12C904AA875F7C7BF091FFD7F5C /* CBUUID.swift in Sources */, + 736F140699145F4F5FA7DD9CA5F273DC /* colordetector_tcs34725.cpp in Sources */, + 0FD23591DCB102F251D85DAB299469F8 /* conductance.cpp in Sources */, + 93E6D78493BFD7F37A996F60546204C6 /* datainterpreter.cpp in Sources */, + 8F1A18D2EACE3FA9AA264C9F35D9530C /* dataprocessor.cpp in Sources */, + 79582899033ABBFA0444FF828A603D90 /* dataprocessor_config.cpp in Sources */, + 6F2DBEBDD09DCEBF77377E56A8F17AF1 /* datasignal.cpp in Sources */, + 4A0876D17A183B94AB67952FD87FC957 /* debug.cpp in Sources */, + 5FD51292ADAFB0976520B15166F3D595 /* DeviceInformation.swift in Sources */, + 8552A6D816660802EEDCD983EE73B272 /* dfu_operations.cpp in Sources */, + 50CC4A4839ABF463158B0601D23DA08A /* dfu_operations_details.cpp in Sources */, + 22B49CEE4409E1CE01AE3583E5F294CD /* dfu_utility.cpp in Sources */, + 45BA96A5201B099C19EC431457EDAD7D /* event.cpp in Sources */, + 86F3208256FBF2A2B3490655E60F661F /* file_operations.cpp in Sources */, + A098975A1F1B9BFBD4937FC42C8FC587 /* FirmwareBuild.swift in Sources */, + E74C9B76049166213496FD948BC010DC /* FirmwareServer.swift in Sources */, + E199B911B549D28B33AEBB855EAD88A4 /* gpio.cpp in Sources */, + 2E40164EA751CA3F67666A14CDEF4EF3 /* gyro_bmi160.cpp in Sources */, + FA48B882ED106742C2D3592835BACD46 /* haptic.cpp in Sources */, + 9F4A06B50FD6B3C96387B2672ECBE931 /* humidity_bme280.cpp in Sources */, + 3FA634E744D6010D86493EAD0B7671A9 /* ibeacon.cpp in Sources */, + 392CD274B6617281FADB1CE19FACA318 /* led.cpp in Sources */, + 697D3DDDE8BF47767420A4925E36841B /* LogDelegate.swift in Sources */, + BE87B6B4E7B04556419CE4A1637DEEF4 /* logging.cpp in Sources */, + 08F2BD3E77B81276FC0BD2654F75BA1D /* macro.cpp in Sources */, + 91E2C6108129FAFB91F47CF0E5CEC3EA /* magnetometer_bmm150.cpp in Sources */, + 2EB360BCCDB4AF738ED5B103EBF7A19F /* MblMwDataSignal+Async.swift in Sources */, + E8C82D9C9AAC63281F3D32CC47361A81 /* MblMwEvent+Async.swift in Sources */, + E6D83A900D33C19CB6F175F6BB565A8E /* MblMwGattChar.swift in Sources */, + 58B1650AB76469C6BDF9810CD0C8A227 /* memory.cpp in Sources */, + 03C624A9AF2AA6989DFED8AFDFDED1F2 /* MetaBootFinder.swift in Sources */, + 53DA7FD054A77393E41C2B72297B59A7 /* MetaWear+Async.swift in Sources */, + A643441F5B717F4CBDD3E9949AC347B1 /* MetaWear+LED.swift in Sources */, + C5AA0A090625FD38CF6669891F19CB87 /* MetaWear-iOS-dummy.m in Sources */, + BD614830945C55AE9BFE7D80CD0688E1 /* MetaWear.swift in Sources */, + 609CD2C2810F1E529B25BE4A4927AB88 /* metawearboard.cpp in Sources */, + 154871F75D068545E3118830DC621593 /* MetaWearData.swift in Sources */, + 34F22C6369E0189D359A56370AD047A4 /* MetaWearScanner.swift in Sources */, + 6998BC571F24061C702AF96C32C908DC /* miniz.cpp in Sources */, + BBC043D6417E9997F3BD99B629C10E7E /* moduleinfo.cpp in Sources */, + C38F2EFF094FB5B713B3FCA1AA14210C /* multichanneltemperature.cpp in Sources */, + B2F9F8CC026C6E5C6FB83D0A0A2CA554 /* neopixel.cpp in Sources */, + 969AC01917B4EE478CE286F13E2290B0 /* proximity_tsl2671.cpp in Sources */, + 42AB3882D73051A60B4E31E4905E61B6 /* responseheader.cpp in Sources */, + 1170238395A8FB6544985CE6EA313BC6 /* ScannerModel.swift in Sources */, + 19845EA25D5A4AB1162E4C305445F148 /* sensor_fusion.cpp in Sources */, + 7BA67E822D9A5B96A3F2804BD52E786B /* serialpassthrough.cpp in Sources */, + 03AB6B72B97116D5374F40592A4A3B7C /* settings.cpp in Sources */, + B2B4994D2A912B440FD9395CA127CE22 /* String+VersionCompare.swift in Sources */, + 4057BC89C7592D7F20A58DF7572A1C74 /* switch.cpp in Sources */, + 93BADEC83FFE2EF2945C0772355CA1D4 /* task.cpp in Sources */, + 18E98C3C3265B0B2F137D8D87311B192 /* threadpool.cpp in Sources */, + 5DD87388D4349D8784CF40E22B33756A /* timer.cpp in Sources */, + 8E9E64490EBB4B97DB43CA421D6171BB /* utils.cpp in Sources */, + DBA354F38D644CBA7897DF739AC0037C /* version.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - FB9D8559345AF64666D887C62EC8A6C2 /* Sources */ = { + E244A48ACFC423444B26D2E57E4B4326 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5466835F96ACCB738F4799F906FEC98F /* FastCoder.m in Sources */, - DD98F8E8F994FE7FD1C78C4001CA8B5C /* FastCoding-iOS-dummy.m in Sources */, + 8CDBCE46BEE7ABD1E58EEAE1B19EA8C7 /* Bolts-Swift-iOS-dummy.m in Sources */, + 84AF0DAFE2FECBAF83A804323488EA8E /* Errors.swift in Sources */, + 49DE6A9DAFB4D84F3B2DC9DF56EF79F1 /* Executor.swift in Sources */, + EB2FA25E219327C62D3640B26C9215A6 /* Task+ContinueWith.swift in Sources */, + 9A90C6CFA64219E2A19250AFD48CEFAE /* Task+Delay.swift in Sources */, + 7DC07F76B8133E5B18D94E90084D4905 /* Task+WhenAll.swift in Sources */, + EF17C7D424539599B55417410D131AC4 /* Task+WhenAny.swift in Sources */, + 97397FFE16EE3B02C0753B3D3AF89500 /* Task.swift in Sources */, + EB225BEDE5CB70EC7A03AB6C991BE0EC /* TaskCompletionSource.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ - 01364613FCC40E7EC448CA087261DED2 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bolts-macOS"; - target = B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */; - targetProxy = 8B1181AF001FC92FFBE16D3961259C5D /* PBXContainerItemProxy */; - }; - 071FC7211B0A2863F91BF3FB79703057 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FastCoding-iOS"; - target = E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */; - targetProxy = E0753342082B342D4FF6AE08D10D08B2 /* PBXContainerItemProxy */; - }; - 0D5AC32A3896109EBB28ADA7DECF87A9 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bolts-iOS"; - target = BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */; - targetProxy = 7451BC2302D15A8B3DC48253A0630A54 /* PBXContainerItemProxy */; - }; - 1597A811706FED0987AC15935B1EE747 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FastCoding-macOS"; - target = 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */; - targetProxy = 9879D8AA2FF47C33D9F82C6FC27D4D49 /* PBXContainerItemProxy */; - }; - 287B4EE15F13E6FEFADA60118A2E2D40 /* PBXTargetDependency */ = { + 0496D9D602807CAC1EFF4FAE6C5788D4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "MBProgressHUD-tvOS"; - target = 6E496AE0DE14DA07A9CB5BF71633B177 /* MBProgressHUD-tvOS */; - targetProxy = 8679EB38165A6A3B0084A9366AC9FE0C /* PBXContainerItemProxy */; + name = "Bolts-Swift-iOS"; + target = 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */; + targetProxy = AE05E38E4133704EF9CF730903F1A251 /* PBXContainerItemProxy */; }; - 4F34344B92754609272A2C28169C10A5 /* PBXTargetDependency */ = { + 21208C4073EB8672A3452012D6B79BF4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "FastCoding-tvOS"; - target = 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */; - targetProxy = 919850CFA2FF4DB26F603C71ED7CED54 /* PBXContainerItemProxy */; + name = "MBProgressHUD-iOS"; + target = 721899F715C3ED9FF1C98348F4817567 /* MBProgressHUD-iOS */; + targetProxy = EFEB1E88BB5E991854C217479D45C420 /* PBXContainerItemProxy */; }; - 5191C8417573275CA9C5B7CAB7366933 /* PBXTargetDependency */ = { + 280DE175F52FAD6EFE6D011C7DBE02F4 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "MetaWear-macOS"; - target = 054F5C0D34A7FBCCDAD12A03CB8F61E1 /* MetaWear-macOS */; - targetProxy = 41B87E394DEC2D3AA980C8F03DDCAC89 /* PBXContainerItemProxy */; - }; - 6252D94FC29354CA861E62C974A76FD5 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bolts-macOS"; - target = B7B1C49CEEA710F4A292314D60602E07 /* Bolts-macOS */; - targetProxy = 1F614E8BE29E2F20407091AFBAAB2759 /* PBXContainerItemProxy */; - }; - 6699FD0872B2885157B77B0F64AC0494 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bolts-iOS"; - target = BD341F49E18D3D060A36A71E9278D5D7 /* Bolts-iOS */; - targetProxy = 11CF2E218E46CCAE3ED723F070D70E9A /* PBXContainerItemProxy */; - }; - 6B911B3392743A7165BE25BCF4856AF0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "MetaWear-tvOS"; - target = FC67B740EA48FAF3B42E481045B53E2E /* MetaWear-tvOS */; - targetProxy = 4351D094A8278F7979D5DF4BEE779429 /* PBXContainerItemProxy */; - }; - 6F01A1C573CBE1E028729F5B2C2C7E60 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FastCoding-tvOS"; - target = 78F9A65EF036F83C80909A18E9CDC417 /* FastCoding-tvOS */; - targetProxy = B6E9A924C1769F970E75935AA2D32450 /* PBXContainerItemProxy */; + target = E1A2C54E075045370CF68755E67F5C6F /* MetaWear-macOS */; + targetProxy = E0BDF4E7F134F9C18DFF938AC589CCBA /* PBXContainerItemProxy */; }; - 800C872E98875760CC60C5C153DB5F94 /* PBXTargetDependency */ = { + 33B3BF9A9D48551D9939BF3B08AA65F7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - name = "Bolts-tvOS"; - target = 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */; - targetProxy = 9527CF5C32663FA6D81A2BCC0EB604EA /* PBXContainerItemProxy */; + name = "Bolts-Swift-macOS"; + target = ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */; + targetProxy = 6A637E83CF60501123A8E9982117310E /* PBXContainerItemProxy */; }; - 8612B17D8841D958D67038398DD95713 /* PBXTargetDependency */ = { + 3CF73DF6AA928C1B3A77148B168C1493 /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = "MetaWear-iOS"; - target = 4D9B457DC2D0A7DCADF739A8E0788C7A /* MetaWear-iOS */; - targetProxy = 12220984601945CEE697C45D9EAB8F44 /* PBXContainerItemProxy */; - }; - 9A28B34056FA77419461500852E91020 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "Bolts-tvOS"; - target = 2492E2BFC7176958B328266A5BC1A534 /* Bolts-tvOS */; - targetProxy = 15192CB15A0486C73F22871285CA3DF4 /* PBXContainerItemProxy */; - }; - 9CDE872A0D15ADD903AC19A6069CF0DE /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FastCoding-iOS"; - target = E773E4C5ADD2729A88E77D8B9999761A /* FastCoding-iOS */; - targetProxy = 2C951976B5111F24A03DA143E91BDF34 /* PBXContainerItemProxy */; - }; - DD7E5BF7F701B916D6E9954832337065 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "MBProgressHUD-iOS"; - target = 721899F715C3ED9FF1C98348F4817567 /* MBProgressHUD-iOS */; - targetProxy = 15DE208E55D905FBB697C8E5CE51C491 /* PBXContainerItemProxy */; - }; - E01EEA2B8636B3EEF6709E1A172D9A89 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - name = "FastCoding-macOS"; - target = 3413DD54A59A17F67D7D63397D806BD5 /* FastCoding-macOS */; - targetProxy = F90F1B26FAD126A08914A4F8E46ECEC1 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin XCBuildConfiguration section */ - 113EF4B85425E8009655F15B0068AD21 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = ECB10F2A65A6BA5FB610B121361268F9 /* Pods-Starter-tvOS.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Starter-tvOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_tvOS; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 18D3CD5C2E1F82AAD664196EED2CE722 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 95C08C954E0D8EF805456D25B2423138 /* MetaWear-tvOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-tvOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; - PRODUCT_NAME = MetaWear; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 1A2DAA44EA7B725D622EE356CE73CF70 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 9B841F492579FFBA76A46D63F1082DD6 /* FastCoding-tvOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-tvOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap"; - PRODUCT_NAME = FastCoding; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 1BBE1C0881DCA20613651A1095812795 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 399DB060F7BC7DA67868EB5F087FF658 /* Pods-Starter-macOS.debug.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-Starter-macOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MODULEMAP_FILE = "Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_macOS; - SDKROOT = macosx; - SKIP_INSTALL = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 1C9728095846362F3FD48B9D9BD7AC45 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = FC053D434A06B030B7720431E4D9A87E /* MetaWear-iOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-iOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap"; - PRODUCT_NAME = MetaWear; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; - }; - 3D9EFAEA799F7CBEFC2DD73DE1693F73 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 6F1054E76077AB99235D202A108B4CFD /* FastCoding-iOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-iOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap"; - PRODUCT_NAME = FastCoding; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Debug; + target = FBCDB923BFEC9B087B78F572C6D26ABF /* MetaWear-iOS */; + targetProxy = 27B96F228D16505ECF30CBF131674B7D /* PBXContainerItemProxy */; }; - 4274679E05C16B0F873456CFED4DBA56 /* Release */ = { + 6B1910B8621AF2E511BC2D958A653172 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Bolts-Swift-tvOS"; + target = 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */; + targetProxy = 25F451D83A5AB85B1B507B1D894A4C48 /* PBXContainerItemProxy */; + }; + 7F34E37746DA256302CD8A74DC2D42BD /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MetaWear-tvOS"; + target = 1CF10E2AEEEB932120CC7181BD88C40C /* MetaWear-tvOS */; + targetProxy = 4DC3390C22A6FDA950A29AAC617F38BA /* PBXContainerItemProxy */; + }; + 91C9007E6ACE3C2FBD9BFAC1B54E7017 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Bolts-Swift-tvOS"; + target = 93860DEA49AB0A3DE8BED027017FADD3 /* Bolts-Swift-tvOS */; + targetProxy = C01AFDBA21FA5E01034E7A17D9ECF0A0 /* PBXContainerItemProxy */; + }; + BCF770EC99CC441D0488D50C6DFCB766 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Bolts-Swift-macOS"; + target = ED329C7FA29461934C2966993F55877D /* Bolts-Swift-macOS */; + targetProxy = 20BCC5CD831A1178AF1AEA4DED636CB0 /* PBXContainerItemProxy */; + }; + EBE57F65497DC291F159BFC758190F7F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "Bolts-Swift-iOS"; + target = 74D5A08CA458D0D62FA8EA0C7F810D3F /* Bolts-Swift-iOS */; + targetProxy = 25953C50C67F2120A5CCE5B4CF329862 /* PBXContainerItemProxy */; + }; + F89AE91039CFF7646A27546B81729D75 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = "MBProgressHUD-tvOS"; + target = 6E496AE0DE14DA07A9CB5BF71633B177 /* MBProgressHUD-tvOS */; + targetProxy = FFA7E639D9E1943C2C9CE29F2973CEC0 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 091A30BE3C8901FF823A3A7420AC9E7B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55FAB9391ACF241B471A12CD95470629 /* MBProgressHUD-tvOS.xcconfig */; + baseConfigurationReference = E714D8E62191DAAB6CE7AC6D2B63D314 /* Pods-Starter-tvOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -5298,58 +1871,34 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD-tvOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Starter-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; - PRODUCT_NAME = MBProgressHUD; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - 42EE56FCBF79012EFF331115F7439F59 /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 4CBA7A8D3F3F5E56E70FB807A8BCE453 /* MBProgressHUD-iOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD-iOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.modulemap"; - PRODUCT_NAME = MBProgressHUD; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TVOS_DEPLOYMENT_TARGET = 10.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 58B708AE92F3130AA0CAD2C774E5F2F5 /* Debug */ = { + 1583DB81AFBAEA5FDC3C681828BEBA15 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = EC38C841BA76F70D8272F3D7ADACADE2 /* Bolts-iOS.xcconfig */; + baseConfigurationReference = 2EECD9E4DBD4B75D6B2E9D730F83C3C1 /* Pods-Starter-iOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -5359,115 +1908,160 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-iOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Starter-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-iOS/Bolts-iOS.modulemap"; - PRODUCT_NAME = Bolts; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - 5BD00F6C1F8F02BC2637569C159407C2 /* Debug */ = { + 15B29B1E4423CA199B525579C595D244 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 55FAB9391ACF241B471A12CD95470629 /* MBProgressHUD-tvOS.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MBProgressHUD-tvOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; - PRODUCT_NAME = MBProgressHUD; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; + CODE_SIGNING_REQUIRED = NO; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + "POD_CONFIGURATION_RELEASE=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MTL_ENABLE_DEBUG_INFO = NO; + PRODUCT_NAME = "$(TARGET_NAME)"; + STRIP_INSTALLED_PRODUCT = NO; + SYMROOT = "${SRCROOT}/../build"; + TVOS_DEPLOYMENT_TARGET = 10.0; }; - name = Debug; + name = Release; }; - 5CB6D237CD609B7779236C006282BCF0 /* Debug */ = { + 1AAE076D81E526B98A20B076DDAFAD8B /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B9B8C91638C7B2907CDE68F9ACE11CB8 /* Bolts-tvOS.xcconfig */; + baseConfigurationReference = DF18F213E6414DEC9C5F267E671C6675 /* Pods-Starter-macOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-tvOS/Info.plist"; + FRAMEWORK_VERSION = A; + INFOPLIST_FILE = "Target Support Files/Pods-Starter-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = appletvos; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = macosx; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 7059B06E4146DC55EDC121FFCC734B5D /* Debug */ = { + 21F5DC35E585294687EDCFCF1EF5E57E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 919D35A89E71B8F6775DA7BEA072A0B9 /* Bolts-macOS.xcconfig */; + baseConfigurationReference = F0BD512EE716C3130CE6A20F47366614 /* MetaWear-iOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; - MODULEMAP_FILE = "Target Support Files/Bolts-macOS/Bolts-macOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = macosx; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - 7C7F3A23197A8A41D704572F6C2B40CA /* Release */ = { + 55BBA46F6B23E38ADE452AA421F7E5CC /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; @@ -5477,10 +2071,12 @@ CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -5488,6 +2084,7 @@ CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -5496,15 +2093,19 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGNING_ALLOWED = NO; CODE_SIGNING_REQUIRED = NO; COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - ENABLE_NS_ASSERTIONS = NO; + DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_RELEASE=1", + "POD_CONFIGURATION_DEBUG=1", + "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -5513,52 +2114,24 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MTL_ENABLE_DEBUG_INFO = NO; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; STRIP_INSTALLED_PRODUCT = NO; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SYMROOT = "${SRCROOT}/../build"; TVOS_DEPLOYMENT_TARGET = 10.0; }; - name = Release; - }; - 8A419D581B54E90009AB92616CBB3486 /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = EC38C841BA76F70D8272F3D7ADACADE2 /* Bolts-iOS.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-iOS/Bolts-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-iOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-iOS/Bolts-iOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; + name = Debug; }; - 99C67D658C7EEBF93D08DD190D6CEB1C /* Release */ = { + 655052479B798F62BA6F1B0C2C699174 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7F279045200258D9DDA4C0C786D212CB /* FastCoding-macOS.xcconfig */; + baseConfigurationReference = D8468FE86B85A9D95FF5DF8AFC02B3CE /* Pods-Starter-macOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -5570,25 +2143,29 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-macOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Starter-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.6; - MODULEMAP_FILE = "Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap"; - PRODUCT_NAME = FastCoding; + MACH_O_TYPE = staticlib; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = macosx; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - A7F51DB443FECE01C1E0FC97A4E39864 /* Release */ = { + 6B0EAC21206EBF8781B1098B928E32D0 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9B841F492579FFBA76A46D63F1082DD6 /* FastCoding-tvOS.xcconfig */; + baseConfigurationReference = CEDF199A08BA8C211410ACF7F9812A45 /* Bolts-Swift-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -5599,61 +2176,30 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-tvOS/FastCoding-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap"; - PRODUCT_NAME = FastCoding; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 9.0; - VALIDATE_PRODUCT = YES; - VERSIONING_SYSTEM = "apple-generic"; - VERSION_INFO_PREFIX = ""; - }; - name = Release; - }; - A9A974545C64FA11D9FD9F3E206DB4BA /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = D3201E3A006625BA636D039DAD71147E /* Pods-Starter-tvOS.release.xcconfig */; - buildSettings = { - CODE_SIGN_IDENTITY = ""; - "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; - "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - CURRENT_PROJECT_VERSION = 1; - DEFINES_MODULE = YES; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Starter-tvOS/Info.plist"; - INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_tvOS; - SDKROOT = appletvos; - SKIP_INSTALL = YES; - TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 10.0; - VALIDATE_PRODUCT = YES; + TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - AAE75EBDD0F859EE5F177401C3F3F0BB /* Release */ = { + 6E31FD92B79DAADC019ACF798BF2308A /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BC4FBF214D4B82375533FAFB243220B0 /* MetaWear-macOS.xcconfig */; + baseConfigurationReference = B4A86268DDA309F1DCD5BD12F9ECCE42 /* Bolts-Swift-macOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -5665,25 +2211,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-macOS/MetaWear-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; - MODULEMAP_FILE = "Target Support Files/MetaWear-macOS/MetaWear-macOS.modulemap"; - PRODUCT_NAME = MetaWear; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; - SWIFT_VERSION = 4.0; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - B8C284C7B5563023D5D264C74A754F45 /* Debug */ = { + 8147837CFC2260FEC49146114DF1F9B5 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 95C08C954E0D8EF805456D25B2423138 /* MetaWear-tvOS.xcconfig */; + baseConfigurationReference = A35DD3123E1FDD9A3C4EB60950116376 /* MetaWear-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -5699,10 +2247,12 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; PRODUCT_NAME = MetaWear; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = 3; TVOS_DEPLOYMENT_TARGET = 10.0; @@ -5711,10 +2261,44 @@ }; name = Debug; }; - BB44E5764AE50836A3E28A4FC590DE9C /* Release */ = { + 85B54205B6F739BDD17B95DA197AEE9D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CEDF199A08BA8C211410ACF7F9812A45 /* Bolts-Swift-tvOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-tvOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; + SDKROOT = appletvos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + 9379218D2B8BACB2D44AE2FF69E867B9 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 57145DDED2FD1272A4C456956BBE679D /* Pods-Starter-macOS.release.xcconfig */; + baseConfigurationReference = B4A86268DDA309F1DCD5BD12F9ECCE42 /* Bolts-Swift-macOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -5726,27 +2310,27 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; FRAMEWORK_VERSION = A; - INFOPLIST_FILE = "Target Support Files/Pods-Starter-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MODULEMAP_FILE = "Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_macOS; + MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; SDKROOT = macosx; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; - BC1CD90A40188B1FAC142134A3725388 /* Release */ = { + 963937E5C3E8ABCB38A843347B9C07F2 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4CBA7A8D3F3F5E56E70FB807A8BCE453 /* MBProgressHUD-iOS.xcconfig */; + baseConfigurationReference = 24F858DBC3552FC3A13626D490C08850 /* MBProgressHUD-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -5763,6 +2347,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; @@ -5775,72 +2360,43 @@ }; name = Release; }; - C8E5DFC78A2855E8803BDF63D968A27C /* Debug */ = { + A571011B08A00A44EA6CF87F7AC13999 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 87F5B491BB8BB90853BFA31254C11353 /* Bolts-Swift-iOS.xcconfig */; buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_NONNULL = YES; - CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_DOCUMENTATION_COMMENTS = YES; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - CODE_SIGNING_REQUIRED = NO; - COPY_PHASE_STRIP = NO; - DEBUG_INFORMATION_FORMAT = dwarf; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "POD_CONFIGURATION_DEBUG=1", - "DEBUG=1", - "$(inherited)", - ); - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; - MACOSX_DEPLOYMENT_TARGET = 10.12; - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = NO_SIGNING/; - STRIP_INSTALLED_PRODUCT = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; - SYMROOT = "${SRCROOT}/../build"; - TVOS_DEPLOYMENT_TARGET = 10.0; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-iOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; }; name = Debug; }; - D00B90631ED4358733E8CEE6AB7E30AF /* Release */ = { + A6215B0BBD97032DEB824202EF5655EA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6F1054E76077AB99235D202A108B4CFD /* FastCoding-iOS.xcconfig */; + baseConfigurationReference = F0BD512EE716C3130CE6A20F47366614 /* MetaWear-iOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -5850,16 +2406,18 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-iOS/FastCoding-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap"; - PRODUCT_NAME = FastCoding; + MODULEMAP_FILE = "Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -5868,9 +2426,9 @@ }; name = Release; }; - D2B5399C0AB25B3FC1F18DB9A28740D4 /* Release */ = { + AC92768290D99717AB866F31220FDB55 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC053D434A06B030B7720431E4D9A87E /* MetaWear-iOS.xcconfig */; + baseConfigurationReference = A35DD3123E1FDD9A3C4EB60950116376 /* MetaWear-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -5881,28 +2439,31 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/MetaWear-iOS/MetaWear-iOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/MetaWear-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/MetaWear-iOS/MetaWear-iOS.modulemap"; + MODULEMAP_FILE = "Target Support Files/MetaWear-tvOS/MetaWear-tvOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; PRODUCT_NAME = MetaWear; - SDKROOT = iphoneos; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - D2FBCBF0E9E75F02FC3602C1F08AF351 /* Debug */ = { + B0BC85DAD6CFBE45B3692D09FCA3E4F1 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = BC4FBF214D4B82375533FAFB243220B0 /* MetaWear-macOS.xcconfig */; + baseConfigurationReference = 1D062BDD247903E1640A8D1C172EE28C /* MetaWear-macOS.xcconfig */; buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -5918,83 +2479,123 @@ INFOPLIST_FILE = "Target Support Files/MetaWear-macOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.13; MODULEMAP_FILE = "Target Support Files/MetaWear-macOS/MetaWear-macOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; PRODUCT_NAME = MetaWear; SDKROOT = macosx; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Debug; + name = Release; }; - D7C502780A24A5717D54C20DA314F18A /* Debug */ = { + C157A9B32FE483E79BFFF73D92CAD4EB /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 7F279045200258D9DDA4C0C786D212CB /* FastCoding-macOS.xcconfig */; + baseConfigurationReference = 87F5B491BB8BB90853BFA31254C11353 /* Bolts-Swift-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/FastCoding-macOS/FastCoding-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/FastCoding-macOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/Bolts-Swift-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.6; - MODULEMAP_FILE = "Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap"; - PRODUCT_NAME = FastCoding; - SDKROOT = macosx; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap"; + PRODUCT_MODULE_NAME = BoltsSwift; + PRODUCT_NAME = BoltsSwift; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_VERSION = 3.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + C5B50572A5758F6B830B79AEF89C6A49 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F8EFE83433FAE9F82AF2BCFFBCBD7F6D /* MBProgressHUD-tvOS.xcconfig */; + buildSettings = { + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD-tvOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; + SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 9.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - DC8A33575EB2C1DB70E876190534C579 /* Release */ = { + E047939FD57204B9E9B64E5A2A9D5F05 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 919D35A89E71B8F6775DA7BEA072A0B9 /* Bolts-macOS.xcconfig */; + baseConfigurationReference = 5BAE2AE51522CFFAAC13455FB6C4C59A /* Pods-Starter-tvOS.release.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; - COMBINE_HIDPI_IMAGES = YES; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - FRAMEWORK_VERSION = A; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-macOS/Bolts-macOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-macOS/Info.plist"; + INFOPLIST_FILE = "Target Support Files/Pods-Starter-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.8; - MODULEMAP_FILE = "Target Support Files/Bolts-macOS/Bolts-macOS.modulemap"; - PRODUCT_NAME = Bolts; - SDKROOT = macosx; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MACH_O_TYPE = staticlib; + MODULEMAP_FILE = "Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.modulemap"; + OTHER_LDFLAGS = ""; + OTHER_LIBTOOLFLAGS = ""; + PODS_ROOT = "$(SRCROOT)"; + PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; + SDKROOT = appletvos; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.0; + TARGETED_DEVICE_FAMILY = 3; + TVOS_DEPLOYMENT_TARGET = 10.0; + VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; - E17E47ADCE7A0EF4E589B480B17EF3AD /* Release */ = { + EB100301D20F7864B2851389238B8EAA /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = B9B8C91638C7B2907CDE68F9ACE11CB8 /* Bolts-tvOS.xcconfig */; + baseConfigurationReference = F8EFE83433FAE9F82AF2BCFFBCBD7F6D /* MBProgressHUD-tvOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6005,12 +2606,13 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - GCC_PREFIX_HEADER = "Target Support Files/Bolts-tvOS/Bolts-tvOS-prefix.pch"; - INFOPLIST_FILE = "Target Support Files/Bolts-tvOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD-tvOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MODULEMAP_FILE = "Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap"; - PRODUCT_NAME = Bolts; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; SDKROOT = appletvos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; @@ -6023,9 +2625,9 @@ }; name = Release; }; - F2AA35B84B00C03EB6FD1621FACA3284 /* Debug */ = { + EC85B252CD015E9988B7A9C6DFAE5847 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A9000F0FF7A90A6F59B81BFB7F8D0A37 /* Pods-Starter-iOS.debug.xcconfig */; + baseConfigurationReference = 24F858DBC3552FC3A13626D490C08850 /* MBProgressHUD-iOS.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; @@ -6036,29 +2638,64 @@ DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; - INFOPLIST_FILE = "Target Support Files/Pods-Starter-iOS/Info.plist"; + GCC_PREFIX_HEADER = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MBProgressHUD-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; - MACH_O_TYPE = staticlib; - MODULEMAP_FILE = "Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.modulemap"; - OTHER_LDFLAGS = ""; - OTHER_LIBTOOLFLAGS = ""; - PODS_ROOT = "$(SRCROOT)"; - PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_iOS; + MODULEMAP_FILE = "Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.modulemap"; + PRODUCT_MODULE_NAME = MBProgressHUD; + PRODUCT_NAME = MBProgressHUD; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; - FA1E50584670A075363BD2CA6F416A91 /* Release */ = { + F95B71581F56840C1329954EB6D011A9 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 1D062BDD247903E1640A8D1C172EE28C /* MetaWear-macOS.xcconfig */; + buildSettings = { + CLANG_ENABLE_OBJC_WEAK = NO; + CODE_SIGN_IDENTITY = ""; + "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; + "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; + COMBINE_HIDPI_IMAGES = YES; + CURRENT_PROJECT_VERSION = 1; + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + FRAMEWORK_VERSION = A; + GCC_PREFIX_HEADER = "Target Support Files/MetaWear-macOS/MetaWear-macOS-prefix.pch"; + INFOPLIST_FILE = "Target Support Files/MetaWear-macOS/Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; + MACOSX_DEPLOYMENT_TARGET = 10.13; + MODULEMAP_FILE = "Target Support Files/MetaWear-macOS/MetaWear-macOS.modulemap"; + PRODUCT_MODULE_NAME = MetaWear; + PRODUCT_NAME = MetaWear; + SDKROOT = macosx; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + FAB3E566E6C5EE2FB49F18EF8A28201E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CB6F3AEB30C3D9BEC5BBD5C00EACADC8 /* Pods-Starter-iOS.release.xcconfig */; + baseConfigurationReference = 221599CD0871B0BD8DE9DCB149BAD456 /* Pods-Starter-iOS.debug.xcconfig */; buildSettings = { + ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; + CLANG_ENABLE_OBJC_WEAK = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; @@ -6070,7 +2707,7 @@ DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-Starter-iOS/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.modulemap"; @@ -6078,87 +2715,89 @@ OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; - PRODUCT_NAME = Pods_Starter_iOS; + PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; - name = Release; + name = Debug; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - 1D0004B7C8634CA30AE87A84B60F0E6B /* Build configuration list for PBXNativeTarget "Bolts-macOS" */ = { + 1E0D707402CA1F63E60BDEC50D3F5F4C /* Build configuration list for PBXNativeTarget "Bolts-Swift-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 7059B06E4146DC55EDC121FFCC734B5D /* Debug */, - DC8A33575EB2C1DB70E876190534C579 /* Release */, + 9379218D2B8BACB2D44AE2FF69E867B9 /* Debug */, + 6E31FD92B79DAADC019ACF798BF2308A /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 21252E6CE3D099A3BE867C48DE81CB0E /* Build configuration list for PBXNativeTarget "Bolts-tvOS" */ = { + 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5CB6D237CD609B7779236C006282BCF0 /* Debug */, - E17E47ADCE7A0EF4E589B480B17EF3AD /* Release */, + 55BBA46F6B23E38ADE452AA421F7E5CC /* Debug */, + 15B29B1E4423CA199B525579C595D244 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 295ECAA9B3954089BEFDC23B1D2C2730 /* Build configuration list for PBXNativeTarget "Bolts-iOS" */ = { + 2DF4C123980DF1B99FDE556863958B83 /* Build configuration list for PBXNativeTarget "Pods-Starter-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 58B708AE92F3130AA0CAD2C774E5F2F5 /* Debug */, - 8A419D581B54E90009AB92616CBB3486 /* Release */, + 1AAE076D81E526B98A20B076DDAFAD8B /* Debug */, + 655052479B798F62BA6F1B0C2C699174 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 2D8E8EC45A3A1A1D94AE762CB5028504 /* Build configuration list for PBXProject "Pods" */ = { + 7B28A40CD46B75284864D77B8591DDD8 /* Build configuration list for PBXNativeTarget "MetaWear-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - C8E5DFC78A2855E8803BDF63D968A27C /* Debug */, - 7C7F3A23197A8A41D704572F6C2B40CA /* Release */, + 21F5DC35E585294687EDCFCF1EF5E57E /* Debug */, + A6215B0BBD97032DEB824202EF5655EA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 33233CD65B0248346DE14856072347B8 /* Build configuration list for PBXNativeTarget "Pods-Starter-macOS" */ = { + 8571E09CFAF4D6DA510E6A8182A011D3 /* Build configuration list for PBXNativeTarget "MetaWear-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 1BBE1C0881DCA20613651A1095812795 /* Debug */, - BB44E5764AE50836A3E28A4FC590DE9C /* Release */, + 8147837CFC2260FEC49146114DF1F9B5 /* Debug */, + AC92768290D99717AB866F31220FDB55 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 409DF430E10DE59723D94565356B7AA8 /* Build configuration list for PBXNativeTarget "FastCoding-macOS" */ = { + 965F1DF3D567AD276B40466A5FE67385 /* Build configuration list for PBXNativeTarget "MetaWear-macOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - D7C502780A24A5717D54C20DA314F18A /* Debug */, - 99C67D658C7EEBF93D08DD190D6CEB1C /* Release */, + F95B71581F56840C1329954EB6D011A9 /* Debug */, + B0BC85DAD6CFBE45B3692D09FCA3E4F1 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C182E036D9E6F3D07BEC97EC9F43D014 /* Build configuration list for PBXNativeTarget "MetaWear-macOS" */ = { + A6687F0CC7B376A4906711FE374D193F /* Build configuration list for PBXNativeTarget "Pods-Starter-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - D2FBCBF0E9E75F02FC3602C1F08AF351 /* Debug */, - AAE75EBDD0F859EE5F177401C3F3F0BB /* Release */, + 091A30BE3C8901FF823A3A7420AC9E7B /* Debug */, + E047939FD57204B9E9B64E5A2A9D5F05 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - C1BAFA6DF62F72E7F34D56E69C8D6CC6 /* Build configuration list for PBXNativeTarget "FastCoding-iOS" */ = { + C15248F9A568EEF86060A82785EBEB09 /* Build configuration list for PBXNativeTarget "Bolts-Swift-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 3D9EFAEA799F7CBEFC2DD73DE1693F73 /* Debug */, - D00B90631ED4358733E8CEE6AB7E30AF /* Release */, + A571011B08A00A44EA6CF87F7AC13999 /* Debug */, + C157A9B32FE483E79BFFF73D92CAD4EB /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6166,8 +2805,8 @@ D15F450C46352209534CE932C303818F /* Build configuration list for PBXNativeTarget "MBProgressHUD-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 42EE56FCBF79012EFF331115F7439F59 /* Debug */, - BC1CD90A40188B1FAC142134A3725388 /* Release */, + EC85B252CD015E9988B7A9C6DFAE5847 /* Debug */, + 963937E5C3E8ABCB38A843347B9C07F2 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -6175,53 +2814,26 @@ D4FCC774EFF79AA8E4FE14428E4F3FF6 /* Build configuration list for PBXNativeTarget "MBProgressHUD-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 5BD00F6C1F8F02BC2637569C159407C2 /* Debug */, - 4274679E05C16B0F873456CFED4DBA56 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - D75ADFF3CA2C855E2C240F7340ADB3FF /* Build configuration list for PBXNativeTarget "FastCoding-tvOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1A2DAA44EA7B725D622EE356CE73CF70 /* Debug */, - A7F51DB443FECE01C1E0FC97A4E39864 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - EF60F40F8CA7A40CFE4D8B71564E3318 /* Build configuration list for PBXNativeTarget "MetaWear-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 1C9728095846362F3FD48B9D9BD7AC45 /* Debug */, - D2B5399C0AB25B3FC1F18DB9A28740D4 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - F7AA0A2914B0F1E0453DFC3BF09093B3 /* Build configuration list for PBXNativeTarget "Pods-Starter-iOS" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - F2AA35B84B00C03EB6FD1621FACA3284 /* Debug */, - FA1E50584670A075363BD2CA6F416A91 /* Release */, + C5B50572A5758F6B830B79AEF89C6A49 /* Debug */, + EB100301D20F7864B2851389238B8EAA /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FB9434B617755392472AB2D8A37BE1BA /* Build configuration list for PBXNativeTarget "Pods-Starter-tvOS" */ = { + E4A6F070BCD73543FD7F22BD026494C8 /* Build configuration list for PBXNativeTarget "Bolts-Swift-tvOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - 113EF4B85425E8009655F15B0068AD21 /* Debug */, - A9A974545C64FA11D9FD9F3E206DB4BA /* Release */, + 6B0EAC21206EBF8781B1098B928E32D0 /* Debug */, + 85B54205B6F739BDD17B95DA197AEE9D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - FCDF7EAFCBBFE641E4584EAC0907121B /* Build configuration list for PBXNativeTarget "MetaWear-tvOS" */ = { + F4FC46B3382FBE52DAD6983B3569DFCD /* Build configuration list for PBXNativeTarget "Pods-Starter-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( - B8C284C7B5563023D5D264C74A754F45 /* Debug */, - 18D3CD5C2E1F82AAD664196EED2CE722 /* Release */, + FAB3E566E6C5EE2FB49F18EF8A28201E /* Debug */, + 1583DB81AFBAEA5FDC3C681828BEBA15 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m new file mode 100644 index 0000000..744176b --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts_Swift_iOS : NSObject +@end +@implementation PodsDummy_Bolts_Swift_iOS +@end diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-prefix.pch b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/MetaWearPrivate-iOS/MetaWearPrivate-iOS-prefix.pch rename to StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-prefix.pch diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-umbrella.h b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-umbrella.h new file mode 100644 index 0000000..7acccef --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double BoltsSwiftVersionNumber; +FOUNDATION_EXPORT const unsigned char BoltsSwiftVersionString[]; + diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap new file mode 100644 index 0000000..3f8322f --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.modulemap @@ -0,0 +1,6 @@ +framework module BoltsSwift { + umbrella header "Bolts-Swift-iOS-umbrella.h" + + export * + module * { export * } +} diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig new file mode 100644 index 0000000..5dbf909 --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Bolts-Swift-iOS.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts-Swift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Info.plist b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Info.plist new file mode 100644 index 0000000..b6b2813 --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-iOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.3.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m new file mode 100644 index 0000000..ee545cf --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts_Swift_macOS : NSObject +@end +@implementation PodsDummy_Bolts_Swift_macOS +@end diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-prefix.pch b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/MetaWearPrivate-macOS/MetaWearPrivate-macOS-prefix.pch rename to StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-prefix.pch diff --git a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-umbrella.h b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h similarity index 59% rename from StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-umbrella.h rename to StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h index 3a89654..f09b19c 100644 --- a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-umbrella.h +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS-umbrella.h @@ -10,8 +10,7 @@ #endif #endif -#import "FastCoder.h" -FOUNDATION_EXPORT double FastCodingVersionNumber; -FOUNDATION_EXPORT const unsigned char FastCodingVersionString[]; +FOUNDATION_EXPORT double BoltsSwiftVersionNumber; +FOUNDATION_EXPORT const unsigned char BoltsSwiftVersionString[]; diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap new file mode 100644 index 0000000..3be9eae --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.modulemap @@ -0,0 +1,6 @@ +framework module BoltsSwift { + umbrella header "Bolts-Swift-macOS-umbrella.h" + + export * + module * { export * } +} diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig new file mode 100644 index 0000000..016ea0d --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Bolts-Swift-macOS.xcconfig @@ -0,0 +1,10 @@ +CODE_SIGN_IDENTITY = +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts-Swift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Info.plist b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Info.plist new file mode 100644 index 0000000..b6b2813 --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-macOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.3.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m new file mode 100644 index 0000000..610d2b1 --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-dummy.m @@ -0,0 +1,5 @@ +#import +@interface PodsDummy_Bolts_Swift_tvOS : NSObject +@end +@implementation PodsDummy_Bolts_Swift_tvOS +@end diff --git a/MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-prefix.pch b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch similarity index 100% rename from MetaWear/Pods/Target Support Files/MetaWearPrivate-tvOS/MetaWearPrivate-tvOS-prefix.pch rename to StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-prefix.pch diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h new file mode 100644 index 0000000..7acccef --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS-umbrella.h @@ -0,0 +1,16 @@ +#ifdef __OBJC__ +#import +#else +#ifndef FOUNDATION_EXPORT +#if defined(__cplusplus) +#define FOUNDATION_EXPORT extern "C" +#else +#define FOUNDATION_EXPORT extern +#endif +#endif +#endif + + +FOUNDATION_EXPORT double BoltsSwiftVersionNumber; +FOUNDATION_EXPORT const unsigned char BoltsSwiftVersionString[]; + diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap new file mode 100644 index 0000000..e1dd470 --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.modulemap @@ -0,0 +1,6 @@ +framework module BoltsSwift { + umbrella header "Bolts-Swift-tvOS-umbrella.h" + + export * + module * { export * } +} diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig new file mode 100644 index 0000000..6b00bea --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Bolts-Swift-tvOS.xcconfig @@ -0,0 +1,9 @@ +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS +GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_ROOT = ${SRCROOT} +PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts-Swift +PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} +SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Info.plist new file mode 100644 index 0000000..b6b2813 --- /dev/null +++ b/StarterProject/Pods/Target Support Files/Bolts-Swift-tvOS/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + ${PRODUCT_BUNDLE_IDENTIFIER} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.3.0 + CFBundleSignature + ???? + CFBundleVersion + ${CURRENT_PROJECT_VERSION} + NSPrincipalClass + + + diff --git a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-dummy.m b/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-dummy.m deleted file mode 100644 index 0893b48..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Bolts_iOS : NSObject -@end -@implementation PodsDummy_Bolts_iOS -@end diff --git a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-umbrella.h b/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-umbrella.h deleted file mode 100644 index 61c8a40..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS-umbrella.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" -#import "BFCancellationTokenSource.h" -#import "BFExecutor.h" -#import "BFTask+Exceptions.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "Bolts.h" - -FOUNDATION_EXPORT double BoltsVersionNumber; -FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; - diff --git a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.modulemap b/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.modulemap deleted file mode 100644 index db2b046..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts-iOS-umbrella.h" - - export * - module * { export * } -} diff --git a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.xcconfig b/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.xcconfig deleted file mode 100644 index a42f182..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-iOS/Bolts-iOS.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/Bolts-iOS/Info.plist b/StarterProject/Pods/Target Support Files/Bolts-iOS/Info.plist deleted file mode 100644 index db9e5d8..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-iOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.8.4 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-dummy.m b/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-dummy.m deleted file mode 100644 index 8c5fb2a..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Bolts_macOS : NSObject -@end -@implementation PodsDummy_Bolts_macOS -@end diff --git a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-umbrella.h b/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-umbrella.h deleted file mode 100644 index 5becf56..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS-umbrella.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" -#import "BFCancellationTokenSource.h" -#import "BFExecutor.h" -#import "BFTask+Exceptions.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "Bolts.h" - -FOUNDATION_EXPORT double BoltsVersionNumber; -FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; - diff --git a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.modulemap b/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.modulemap deleted file mode 100644 index 150ef2c..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts-macOS-umbrella.h" - - export * - module * { export * } -} diff --git a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.xcconfig b/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.xcconfig deleted file mode 100644 index 731d7b2..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-macOS/Bolts-macOS.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/Bolts-macOS/Info.plist b/StarterProject/Pods/Target Support Files/Bolts-macOS/Info.plist deleted file mode 100644 index db9e5d8..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-macOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.8.4 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-dummy.m b/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-dummy.m deleted file mode 100644 index 6e34fe8..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_Bolts_tvOS : NSObject -@end -@implementation PodsDummy_Bolts_tvOS -@end diff --git a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-umbrella.h b/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-umbrella.h deleted file mode 100644 index 61c8a40..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS-umbrella.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "BFCancellationToken.h" -#import "BFCancellationTokenRegistration.h" -#import "BFCancellationTokenSource.h" -#import "BFExecutor.h" -#import "BFTask+Exceptions.h" -#import "BFTask.h" -#import "BFTaskCompletionSource.h" -#import "Bolts.h" - -FOUNDATION_EXPORT double BoltsVersionNumber; -FOUNDATION_EXPORT const unsigned char BoltsVersionString[]; - diff --git a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap b/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap deleted file mode 100644 index 33bc224..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module Bolts { - umbrella header "Bolts-tvOS-umbrella.h" - - export * - module * { export * } -} diff --git a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.xcconfig b/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.xcconfig deleted file mode 100644 index 7d188a4..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Bolts-tvOS.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/Bolts -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/Bolts-tvOS/Info.plist deleted file mode 100644 index db9e5d8..0000000 --- a/StarterProject/Pods/Target Support Files/Bolts-tvOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 1.8.4 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-dummy.m b/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-dummy.m deleted file mode 100644 index 7d6642f..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FastCoding_iOS : NSObject -@end -@implementation PodsDummy_FastCoding_iOS -@end diff --git a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-umbrella.h b/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-umbrella.h deleted file mode 100644 index 5852db1..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FastCoder.h" - -FOUNDATION_EXPORT double FastCodingVersionNumber; -FOUNDATION_EXPORT const unsigned char FastCodingVersionString[]; - diff --git a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap b/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap deleted file mode 100644 index 748b4a1..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FastCoding { - umbrella header "FastCoding-iOS-umbrella.h" - - export * - module * { export * } -} diff --git a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.xcconfig b/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.xcconfig deleted file mode 100644 index d66c902..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-iOS/FastCoding-iOS.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FastCoding -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/FastCoding-iOS/Info.plist b/StarterProject/Pods/Target Support Files/FastCoding-iOS/Info.plist deleted file mode 100644 index 160d676..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-iOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.2.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-dummy.m b/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-dummy.m deleted file mode 100644 index c26d48b..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FastCoding_macOS : NSObject -@end -@implementation PodsDummy_FastCoding_macOS -@end diff --git a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap b/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap deleted file mode 100644 index d488a54..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FastCoding { - umbrella header "FastCoding-macOS-umbrella.h" - - export * - module * { export * } -} diff --git a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.xcconfig b/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.xcconfig deleted file mode 100644 index a5be12f..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-macOS/FastCoding-macOS.xcconfig +++ /dev/null @@ -1,10 +0,0 @@ -CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FastCoding -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/FastCoding-macOS/Info.plist b/StarterProject/Pods/Target Support Files/FastCoding-macOS/Info.plist deleted file mode 100644 index 160d676..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-macOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.2.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-dummy.m b/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-dummy.m deleted file mode 100644 index 7a27272..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-dummy.m +++ /dev/null @@ -1,5 +0,0 @@ -#import -@interface PodsDummy_FastCoding_tvOS : NSObject -@end -@implementation PodsDummy_FastCoding_tvOS -@end diff --git a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-umbrella.h b/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-umbrella.h deleted file mode 100644 index 5852db1..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS-umbrella.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifdef __OBJC__ -#import -#else -#ifndef FOUNDATION_EXPORT -#if defined(__cplusplus) -#define FOUNDATION_EXPORT extern "C" -#else -#define FOUNDATION_EXPORT extern -#endif -#endif -#endif - -#import "FastCoder.h" - -FOUNDATION_EXPORT double FastCodingVersionNumber; -FOUNDATION_EXPORT const unsigned char FastCodingVersionString[]; - diff --git a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap b/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap deleted file mode 100644 index a932e5c..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.modulemap +++ /dev/null @@ -1,6 +0,0 @@ -framework module FastCoding { - umbrella header "FastCoding-tvOS-umbrella.h" - - export * - module * { export * } -} diff --git a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.xcconfig b/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.xcconfig deleted file mode 100644 index ef99a06..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/FastCoding-tvOS.xcconfig +++ /dev/null @@ -1,9 +0,0 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS -GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) -PODS_ROOT = ${SRCROOT} -PODS_TARGET_SRCROOT = ${PODS_ROOT}/FastCoding -PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} -SKIP_INSTALL = YES diff --git a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/FastCoding-tvOS/Info.plist deleted file mode 100644 index 160d676..0000000 --- a/StarterProject/Pods/Target Support Files/FastCoding-tvOS/Info.plist +++ /dev/null @@ -1,26 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - ${PRODUCT_BUNDLE_IDENTIFIER} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - FMWK - CFBundleShortVersionString - 3.2.2 - CFBundleSignature - ???? - CFBundleVersion - ${CURRENT_PROJECT_VERSION} - NSPrincipalClass - - - diff --git a/StarterProject/Pods/Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.xcconfig b/StarterProject/Pods/Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.xcconfig index a07f899..a864af9 100644 --- a/StarterProject/Pods/Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.xcconfig +++ b/StarterProject/Pods/Target Support Files/MBProgressHUD-iOS/MBProgressHUD-iOS.xcconfig @@ -1,9 +1,8 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-iOS +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-iOS GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/MBProgressHUD PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} diff --git a/StarterProject/Pods/Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.xcconfig b/StarterProject/Pods/Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.xcconfig index f9ddd38..2b21559 100644 --- a/StarterProject/Pods/Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.xcconfig +++ b/StarterProject/Pods/Target Support Files/MBProgressHUD-tvOS/MBProgressHUD-tvOS.xcconfig @@ -1,9 +1,8 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-tvOS +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-tvOS GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" OTHER_LDFLAGS = -framework "CoreGraphics" -framework "QuartzCore" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/MBProgressHUD PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} diff --git a/StarterProject/Pods/Target Support Files/MetaWear-iOS/Info.plist b/StarterProject/Pods/Target Support Files/MetaWear-iOS/Info.plist index 6bb2a2f..4522675 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-iOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/MetaWear-iOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.10.0 + 3.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/StarterProject/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-umbrella.h b/StarterProject/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-umbrella.h index 4969a82..47e16ae 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-umbrella.h +++ b/StarterProject/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS-umbrella.h @@ -10,82 +10,6 @@ #endif #endif -#import "BFTask+MBLExtensions.h" -#import "MBLAnonymousEvent.h" -#import "MBLConstants.h" -#import "MBLData.h" -#import "MBLDataSample.h" -#import "MBLDataSwitch.h" -#import "MBLDeviceInfo.h" -#import "MBLEntityEvent.h" -#import "MBLEntityModule.h" -#import "MBLEvent.h" -#import "MBLFilter.h" -#import "MBLFirmwareUpdateInfo.h" -#import "MBLMetaWear.h" -#import "MBLMetaWearManager.h" -#import "MBLModule.h" -#import "MBLNumericData.h" -#import "MBLRegister.h" -#import "MBLStringData.h" -#import "MetaWear.h" -#import "MBLAccelerometerBMA255.h" -#import "MBLAccelerometerBMA255MotionEvent.h" -#import "MBLAccelerometerBMI160.h" -#import "MBLAccelerometerBMI160MotionEvent.h" -#import "MBLAccelerometerBosch.h" -#import "MBLAccelerometerBoschFlatData.h" -#import "MBLAccelerometerBoschFlatEvent.h" -#import "MBLAccelerometerBoschLowOrHighGEvent.h" -#import "MBLAccelerometerBoschTapEvent.h" -#import "MBLAccelerometer.h" -#import "MBLAccelerometerData.h" -#import "MBLOrientationData.h" -#import "MBLRMSAccelerometerData.h" -#import "MBLAccelerometerMMA8452Q.h" -#import "MBLAmbientLightLTR329.h" -#import "MBLAmbientLight.h" -#import "MBLANCS.h" -#import "MBLANCSEventData.h" -#import "MBLBarometerBME280.h" -#import "MBLBarometerBMP280.h" -#import "MBLBarometerBosch.h" -#import "MBLBarometer.h" -#import "MBLConductance.h" -#import "MBLGPIO.h" -#import "MBLGPIOPin.h" -#import "bmi160.h" -#import "MBLGyroBMI160.h" -#import "MBLGyro.h" -#import "MBLGyroData.h" -#import "MBLHapticBuzzer.h" -#import "MBLHygrometerBME280.h" -#import "MBLHygrometer.h" -#import "MBLI2C.h" -#import "MBLiBeacon.h" -#import "MBLLED.h" -#import "MBLMagnetometerBMM150.h" -#import "MBLMagnetometer.h" -#import "MBLMagnetometerData.h" -#import "MBLMechanicalSwitch.h" -#import "MBLNeopixel.h" -#import "MBLNeopixelStrand.h" -#import "MBLPhotometer.h" -#import "MBLRGBData.h" -#import "MBLPhotometerTCS3472.h" -#import "MBLProximity.h" -#import "MBLProximityTSL2671.h" -#import "MBLEulerAngleData.h" -#import "MBLQuaternionData.h" -#import "MBLSensorFusion.h" -#import "MBLI2CData.h" -#import "MBLSerial.h" -#import "MBLSPIData.h" -#import "MBLSettings.h" -#import "MBLExternalThermistor.h" -#import "MBLTemperature.h" -#import "MBLTimer.h" -#import "MBLTimerEvent.h" FOUNDATION_EXPORT double MetaWearVersionNumber; FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; diff --git a/StarterProject/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.xcconfig b/StarterProject/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.xcconfig index f0c1359..2318419 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.xcconfig +++ b/StarterProject/Pods/Target Support Files/MetaWear-iOS/MetaWear-iOS.xcconfig @@ -1,11 +1,14 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MetaWear-iOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreBluetooth" -framework "CoreData" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +HEADER_SEARCH_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +OTHER_LDFLAGS = -framework "CoreBluetooth" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +SWIFT_VERSION = 4.0 diff --git a/StarterProject/Pods/Target Support Files/MetaWear-macOS/Info.plist b/StarterProject/Pods/Target Support Files/MetaWear-macOS/Info.plist index 6bb2a2f..4522675 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-macOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/MetaWear-macOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.10.0 + 3.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/StarterProject/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-umbrella.h b/StarterProject/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-umbrella.h index c995bd6..c609c4e 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-umbrella.h +++ b/StarterProject/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS-umbrella.h @@ -10,82 +10,6 @@ #endif #endif -#import "BFTask+MBLExtensions.h" -#import "MBLAnonymousEvent.h" -#import "MBLConstants.h" -#import "MBLData.h" -#import "MBLDataSample.h" -#import "MBLDataSwitch.h" -#import "MBLDeviceInfo.h" -#import "MBLEntityEvent.h" -#import "MBLEntityModule.h" -#import "MBLEvent.h" -#import "MBLFilter.h" -#import "MBLFirmwareUpdateInfo.h" -#import "MBLMetaWear.h" -#import "MBLMetaWearManager.h" -#import "MBLModule.h" -#import "MBLNumericData.h" -#import "MBLRegister.h" -#import "MBLStringData.h" -#import "MetaWear.h" -#import "MBLAccelerometerBMA255.h" -#import "MBLAccelerometerBMA255MotionEvent.h" -#import "MBLAccelerometerBMI160.h" -#import "MBLAccelerometerBMI160MotionEvent.h" -#import "MBLAccelerometerBosch.h" -#import "MBLAccelerometerBoschFlatData.h" -#import "MBLAccelerometerBoschFlatEvent.h" -#import "MBLAccelerometerBoschLowOrHighGEvent.h" -#import "MBLAccelerometerBoschTapEvent.h" -#import "MBLAccelerometer.h" -#import "MBLAccelerometerData.h" -#import "MBLOrientationData.h" -#import "MBLRMSAccelerometerData.h" -#import "MBLAccelerometerMMA8452Q.h" -#import "MBLAmbientLightLTR329.h" -#import "MBLAmbientLight.h" -#import "MBLANCS.h" -#import "MBLANCSEventData.h" -#import "MBLBarometerBME280.h" -#import "MBLBarometerBMP280.h" -#import "MBLBarometerBosch.h" -#import "MBLBarometer.h" -#import "MBLConductance.h" -#import "MBLGPIO.h" -#import "MBLGPIOPin.h" -#import "bmi160.h" -#import "MBLGyroBMI160.h" -#import "MBLGyro.h" -#import "MBLGyroData.h" -#import "MBLHapticBuzzer.h" -#import "MBLHygrometerBME280.h" -#import "MBLHygrometer.h" -#import "MBLI2C.h" -#import "MBLiBeacon.h" -#import "MBLLED.h" -#import "MBLMagnetometerBMM150.h" -#import "MBLMagnetometer.h" -#import "MBLMagnetometerData.h" -#import "MBLMechanicalSwitch.h" -#import "MBLNeopixel.h" -#import "MBLNeopixelStrand.h" -#import "MBLPhotometer.h" -#import "MBLRGBData.h" -#import "MBLPhotometerTCS3472.h" -#import "MBLProximity.h" -#import "MBLProximityTSL2671.h" -#import "MBLEulerAngleData.h" -#import "MBLQuaternionData.h" -#import "MBLSensorFusion.h" -#import "MBLI2CData.h" -#import "MBLSerial.h" -#import "MBLSPIData.h" -#import "MBLSettings.h" -#import "MBLExternalThermistor.h" -#import "MBLTemperature.h" -#import "MBLTimer.h" -#import "MBLTimerEvent.h" FOUNDATION_EXPORT double MetaWearVersionNumber; FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; diff --git a/StarterProject/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.xcconfig b/StarterProject/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.xcconfig index d49e4ac..74ff1cb 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.xcconfig +++ b/StarterProject/Pods/Target Support Files/MetaWear-macOS/MetaWear-macOS.xcconfig @@ -1,12 +1,15 @@ CODE_SIGN_IDENTITY = -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MetaWear-macOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreBluetooth" -framework "CoreData" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +HEADER_SEARCH_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +OTHER_LDFLAGS = -framework "CoreBluetooth" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +SWIFT_VERSION = 4.0 diff --git a/StarterProject/Pods/Target Support Files/MetaWear-tvOS/Info.plist b/StarterProject/Pods/Target Support Files/MetaWear-tvOS/Info.plist index 6bb2a2f..4522675 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-tvOS/Info.plist +++ b/StarterProject/Pods/Target Support Files/MetaWear-tvOS/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 2.10.0 + 3.0.0 CFBundleSignature ???? CFBundleVersion diff --git a/StarterProject/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-umbrella.h b/StarterProject/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-umbrella.h index 4969a82..47e16ae 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-umbrella.h +++ b/StarterProject/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS-umbrella.h @@ -10,82 +10,6 @@ #endif #endif -#import "BFTask+MBLExtensions.h" -#import "MBLAnonymousEvent.h" -#import "MBLConstants.h" -#import "MBLData.h" -#import "MBLDataSample.h" -#import "MBLDataSwitch.h" -#import "MBLDeviceInfo.h" -#import "MBLEntityEvent.h" -#import "MBLEntityModule.h" -#import "MBLEvent.h" -#import "MBLFilter.h" -#import "MBLFirmwareUpdateInfo.h" -#import "MBLMetaWear.h" -#import "MBLMetaWearManager.h" -#import "MBLModule.h" -#import "MBLNumericData.h" -#import "MBLRegister.h" -#import "MBLStringData.h" -#import "MetaWear.h" -#import "MBLAccelerometerBMA255.h" -#import "MBLAccelerometerBMA255MotionEvent.h" -#import "MBLAccelerometerBMI160.h" -#import "MBLAccelerometerBMI160MotionEvent.h" -#import "MBLAccelerometerBosch.h" -#import "MBLAccelerometerBoschFlatData.h" -#import "MBLAccelerometerBoschFlatEvent.h" -#import "MBLAccelerometerBoschLowOrHighGEvent.h" -#import "MBLAccelerometerBoschTapEvent.h" -#import "MBLAccelerometer.h" -#import "MBLAccelerometerData.h" -#import "MBLOrientationData.h" -#import "MBLRMSAccelerometerData.h" -#import "MBLAccelerometerMMA8452Q.h" -#import "MBLAmbientLightLTR329.h" -#import "MBLAmbientLight.h" -#import "MBLANCS.h" -#import "MBLANCSEventData.h" -#import "MBLBarometerBME280.h" -#import "MBLBarometerBMP280.h" -#import "MBLBarometerBosch.h" -#import "MBLBarometer.h" -#import "MBLConductance.h" -#import "MBLGPIO.h" -#import "MBLGPIOPin.h" -#import "bmi160.h" -#import "MBLGyroBMI160.h" -#import "MBLGyro.h" -#import "MBLGyroData.h" -#import "MBLHapticBuzzer.h" -#import "MBLHygrometerBME280.h" -#import "MBLHygrometer.h" -#import "MBLI2C.h" -#import "MBLiBeacon.h" -#import "MBLLED.h" -#import "MBLMagnetometerBMM150.h" -#import "MBLMagnetometer.h" -#import "MBLMagnetometerData.h" -#import "MBLMechanicalSwitch.h" -#import "MBLNeopixel.h" -#import "MBLNeopixelStrand.h" -#import "MBLPhotometer.h" -#import "MBLRGBData.h" -#import "MBLPhotometerTCS3472.h" -#import "MBLProximity.h" -#import "MBLProximityTSL2671.h" -#import "MBLEulerAngleData.h" -#import "MBLQuaternionData.h" -#import "MBLSensorFusion.h" -#import "MBLI2CData.h" -#import "MBLSerial.h" -#import "MBLSPIData.h" -#import "MBLSettings.h" -#import "MBLExternalThermistor.h" -#import "MBLTemperature.h" -#import "MBLTimer.h" -#import "MBLTimerEvent.h" FOUNDATION_EXPORT double MetaWearVersionNumber; FOUNDATION_EXPORT const unsigned char MetaWearVersionString[]; diff --git a/StarterProject/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.xcconfig b/StarterProject/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.xcconfig index e022c50..d9737c9 100644 --- a/StarterProject/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.xcconfig +++ b/StarterProject/Pods/Target Support Files/MetaWear-tvOS/MetaWear-tvOS.xcconfig @@ -1,11 +1,14 @@ -CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/MetaWear-tvOS -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" +CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 -HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" -OTHER_LDFLAGS = -framework "CoreBluetooth" -framework "CoreData" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +HEADER_SEARCH_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +OTHER_LDFLAGS = -framework "CoreBluetooth" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES +SWIFT_INCLUDE_PATHS = $(inherited) $(PODS_TARGET_SRCROOT)/MetaWear/MetaWear-SDK-Cpp/src +SWIFT_VERSION = 4.0 diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-acknowledgements.markdown b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-acknowledgements.markdown index e6bc410..f3d39b0 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-acknowledgements.markdown +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,30 +34,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - ## MBProgressHUD Copyright © 2009-2016 Matej Bukovinski diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-acknowledgements.plist b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-acknowledgements.plist index af3fd65..f12d64a 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-acknowledgements.plist +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-frameworks.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-frameworks.sh index c8f0d84..fb68536 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-frameworks.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,18 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework" install_framework "${BUILT_PRODUCTS_DIR}/MBProgressHUD-iOS/MBProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework" install_framework "${BUILT_PRODUCTS_DIR}/MBProgressHUD-iOS/MBProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework" fi diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh index a7df440..fe3f9c7 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.debug.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.debug.xcconfig index 7a73a7b..7c50cf1 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.debug.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.debug.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-iOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-iOS/MBProgressHUD.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-iOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MBProgressHUD" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-iOS/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MBProgressHUD" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.release.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.release.xcconfig index 7a73a7b..7c50cf1 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.release.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS.release.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-iOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-iOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-iOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-iOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-iOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-iOS/MBProgressHUD.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-iOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MBProgressHUD" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-iOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-iOS/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-iOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MBProgressHUD" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-acknowledgements.markdown b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-acknowledgements.markdown index 618b91b..e538173 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-acknowledgements.markdown +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,30 +34,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - ## MetaWear See https://www.mbientlab.com/terms/ diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-acknowledgements.plist b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-acknowledgements.plist index 3ce35b2..7d1f2a8 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-acknowledgements.plist +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-frameworks.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-frameworks.sh index 4f8d38f..9397357 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-frameworks.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,17 +138,16 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework" install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework" install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh index a7df440..fe3f9c7 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig index 2377811..6e9dfce 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig @@ -1,10 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-macOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-macOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig index 2377811..6e9dfce 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig @@ -1,10 +1,12 @@ +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES CODE_SIGN_IDENTITY = -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-macOS" +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-macOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-macOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-macOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-macOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-macOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-acknowledgements.markdown b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-acknowledgements.markdown index e6bc410..f3d39b0 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-acknowledgements.markdown +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-acknowledgements.markdown @@ -1,13 +1,13 @@ # Acknowledgements This application makes use of the following third party libraries: -## Bolts +## Bolts-Swift BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -34,30 +34,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -## FastCoding - -FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - ## MBProgressHUD Copyright © 2009-2016 Matej Bukovinski diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-acknowledgements.plist b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-acknowledgements.plist index af3fd65..f12d64a 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-acknowledgements.plist +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-acknowledgements.plist @@ -16,9 +16,9 @@ FooterText BSD License -For Bolts software +For Bolts-Swift software -Copyright (c) 2013-present, Facebook, Inc. All rights reserved. +Copyright (c) 2016-present, Facebook, Inc. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -47,37 +47,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. License BSD Title - Bolts - Type - PSGroupSpecifier - - - FooterText - FastCoding - -Copyright (C) 2013 Charcoal Design - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - -1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - -2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - -3. This notice may not be removed or altered from any source distribution. - License - zlib - Title - FastCoding + Bolts-Swift Type PSGroupSpecifier diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-frameworks.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-frameworks.sh index 255b08f..9ba76a2 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-frameworks.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-frameworks.sh @@ -1,15 +1,28 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then + # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy + # frameworks to, so exit 0 (signalling the script phase was successful). + exit 0 +fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" +COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" +# Used as a return value for each invocation of `strip_invalid_archs` function. +STRIP_BINARY_RETVAL=0 + # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") +# Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then @@ -58,21 +71,40 @@ install_framework() fi } -# Copies the dSYM of a vendored framework +# Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then - echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DWARF_DSYM_FOLDER_PATH}\"" - rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DWARF_DSYM_FOLDER_PATH}" + # Copy the dSYM into a the targets temp dir. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" + + local basename + basename="$(basename -s .framework.dSYM "$source")" + binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" + + # Strip invalid architectures so "fat" simulator / device frameworks work on device + if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then + strip_invalid_archs "$binary" + fi + + if [[ $STRIP_BINARY_RETVAL == 1 ]]; then + # Move the stripped file into its final destination. + echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" + rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" + else + # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. + touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" + fi fi } # Signs a framework with the provided identity code_sign_if_enabled() { - if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then + if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identitiy echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" - local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" + local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" @@ -85,10 +117,18 @@ code_sign_if_enabled() { # Strip invalid architectures strip_invalid_archs() { binary="$1" - # Get architectures for current file - archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" + # Get architectures for current target binary + binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" + # Intersect them with the architectures we are building for + intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" + # If there are no archs supported by this binary then warn the user + if [[ -z "$intersected_archs" ]]; then + echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." + STRIP_BINARY_RETVAL=0 + return + fi stripped="" - for arch in $archs; do + for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" || exit 1 @@ -98,18 +138,17 @@ strip_invalid_archs() { if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi + STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework" install_framework "${BUILT_PRODUCTS_DIR}/MBProgressHUD-tvOS/MBProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then - install_framework "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework" - install_framework "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework" + install_framework "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework" install_framework "${BUILT_PRODUCTS_DIR}/MBProgressHUD-tvOS/MBProgressHUD.framework" install_framework "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework" fi diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh index a7df440..fe3f9c7 100755 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh @@ -1,5 +1,13 @@ #!/bin/sh set -e +set -u +set -o pipefail + +if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then + # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy + # resources to, so exit 0 (signalling the script phase was successful). + exit 0 +fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" @@ -12,7 +20,7 @@ XCASSET_FILES=() # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") -case "${TARGETED_DEVICE_FAMILY}" in +case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; @@ -92,7 +100,7 @@ if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then fi rm -f "$RESOURCES_TO_COPY" -if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] +if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) @@ -102,5 +110,9 @@ then fi done <<<"$OTHER_XCASSETS" - printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" + else + printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_BUILD_DIR}/assetcatalog_generated_info.plist" + fi fi diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.debug.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.debug.xcconfig index 0db7a4f..7ab5a42 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.debug.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.debug.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-tvOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-tvOS/MBProgressHUD.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-tvOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MBProgressHUD" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-tvOS/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MBProgressHUD" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig index 0db7a4f..7ab5a42 100644 --- a/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig +++ b/StarterProject/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig @@ -1,9 +1,11 @@ -FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-tvOS" "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-tvOS" +ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES +FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-tvOS" "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' -OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Bolts-tvOS/Bolts.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/FastCoding-tvOS/FastCoding.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MBProgressHUD-tvOS/MBProgressHUD.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/MetaWear-tvOS/MetaWear.framework/Headers" -OTHER_LDFLAGS = $(inherited) -framework "Bolts" -framework "FastCoding" -framework "MBProgressHUD" -framework "MetaWear" -PODS_BUILD_DIR = $BUILD_DIR -PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) +OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MBProgressHUD-tvOS/MBProgressHUD.framework/Headers" -iquote "${PODS_CONFIGURATION_BUILD_DIR}/MetaWear-tvOS/MetaWear.framework/Headers" +OTHER_LDFLAGS = $(inherited) -framework "BoltsSwift" -framework "MBProgressHUD" -framework "MetaWear" +OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" +PODS_BUILD_DIR = ${BUILD_DIR} +PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods diff --git a/StarterProject/Shared/AppDelegate.swift b/StarterProject/Shared/AppDelegate.swift index 00b8e50..ee4dd00 100644 --- a/StarterProject/Shared/AppDelegate.swift +++ b/StarterProject/Shared/AppDelegate.swift @@ -16,6 +16,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. + #if os(tvOS) + print("Due to application support directory not being avaliable on tvOS - this app currently crashes") + #endif return true } diff --git a/StarterProject/Shared/DeviceConfiguration.swift b/StarterProject/Shared/DeviceConfiguration.swift deleted file mode 100644 index 1274b87..0000000 --- a/StarterProject/Shared/DeviceConfiguration.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// DeviceConfiguration.swift -// iOS -// -// Created by Stephen Schiffli on 10/23/17. -// Copyright © 2017 MBIENTLAB, INC. All rights reserved. -// - -import MetaWear - -class DeviceConfiguration: NSObject, MBLRestorable { - // You must save any custom events/filters to @objc properties - // for the auto save/restore feature to work properly - @objc var temperatureFilter: MBLFilter? - - public func run(onDeviceBoot device: MBLMetaWear) { - // Create all custom filters in this function and assign to properties - temperatureFilter = device.temperature?.onDieThermistor.periodicRead(withPeriod: 1000).changeOfEvent(byDelta: 1.0, output: .absolute) - temperatureFilter?.startLoggingAsync() - } -} diff --git a/StarterProject/Shared/DeviceState.swift b/StarterProject/Shared/DeviceState.swift new file mode 100644 index 0000000..d57e025 --- /dev/null +++ b/StarterProject/Shared/DeviceState.swift @@ -0,0 +1,92 @@ +// +// DeviceState.swift +// StarterProject +// +// Created by Stephen Schiffli on 5/3/18. +// Copyright © 2018 MBIENTLAB, INC. All rights reserved. +// + +import Foundation +import MetaWear +import MetaWearCpp +import BoltsSwift + +protocol LogHandlers: class { + func temperatureEntry(_ device: MetaWear, timestamp: Date, entry: Float) +} + +class DeviceState: Codable { + // Supplied variables + let temperaturePeriodMsec: UInt32 + + // MetaWear ID's - saved from board response + var temperatureTimerId: UInt8 = 0xFF + var temperatureLogId: UInt8 = 0xFF + + // Entire c++ metawear board state + var serializedState: [UInt8] = [] + + init(temperaturePeriodMsec: UInt32) { + self.temperaturePeriodMsec = temperaturePeriodMsec + } + + func setup(_ device: MetaWear) -> Task<()> { + var thermistorSignal: OpaquePointer! + // Get a the onboard thermistor if it exists + return device.getThermistorSignal().continueOnSuccessWithTask { signal -> Task in + thermistorSignal = signal + // Create a timer that will be used to periodically read the temperature signal + return device.timerCreate(period: self.temperaturePeriodMsec) + }.continueOnSuccessWithTask { timer -> Task in + self.temperatureTimerId = mbl_mw_timer_get_id(timer) + // Start the timer, this even will fire every temperaturePeriodMsec + mbl_mw_timer_start(timer) + // Now put the SDK in recording mode, all SDK calls between + // mbl_mw_event_record_commands and eventEndRecord will be + // programmed to the MetaWear and invoked each time 'timer' fires + mbl_mw_event_record_commands(timer) + // All we want the timer to do is read the temperature + mbl_mw_datasignal_read(thermistorSignal) + // Finish up the event + return timer.eventEndRecord() + }.continueOnSuccessWithTask { _ -> Task in + // Now we setup the MetaWear to log all reads of thermistorSignal + return thermistorSignal.datasignalLog() + }.continueOnSuccessWith { logger in + self.temperatureLogId = mbl_mw_logger_get_id(logger) + // Enable the logging module + mbl_mw_logging_start(device.board, 0) + // Save the state of the MetaWear object on the Apple device so we can restore and download later + self.serializedState = device.serialize() + self.saveToUrl(device.uniqueUrl) + } + } + + class func loadForDevice(_ device: MetaWear) -> DeviceState? { + guard let data = try? Data(contentsOf: device.uniqueUrl) else { + return nil + } + return try? JSONDecoder().decode(DeviceState.self, from: data) + } + + func saveToUrl(_ url: URL) { + let data = try! JSONEncoder().encode(self) + try! data.write(to: url, options: [.atomic, .completeFileProtectionUntilFirstUserAuthentication]) + } +} + +// Helper functions that task-ify the C interface +extension MetaWear { + func getThermistorSignal() -> Task { + guard mbl_mw_metawearboard_lookup_module(board, MBL_MW_MODULE_TEMPERATURE) != MBL_MW_MODULE_TYPE_NA else { + return Task(error: MetaWearError.operationFailed(message: "No temperature module")) + } + for channel in 0..(tempSignal) + } + } + return Task(error: MetaWearError.operationFailed(message: "could not create conter")) + } +} diff --git a/StarterProject/Shared/DeviceViewController.swift b/StarterProject/Shared/DeviceViewController.swift index 012835e..c7f3e07 100644 --- a/StarterProject/Shared/DeviceViewController.swift +++ b/StarterProject/Shared/DeviceViewController.swift @@ -8,38 +8,96 @@ import UIKit import MetaWear +import MetaWearCpp class DeviceViewController: UIViewController { @IBOutlet weak var deviceStatus: UILabel! - var device: MBLMetaWear! + var device: MetaWear! override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated); - deviceStatus.text = "Connecting" - device.connectAsync().success { _ in - self.deviceStatus.text = "Connected" - print("We are connected") - self.device.led?.flashColorAsync(UIColor.green, withIntensity: 1.0, numberOfFlashes: 3) - if let configuration = self.device.configuration as? DeviceConfiguration { - self.deviceStatus.text = "Downloading" - configuration.temperatureFilter?.downloadLogAndStopLoggingAsync(false).success { array in - self.deviceStatus.text = "Connected" - array.forEach { print ($0) } - }.failure { error in + self.updateLabel("Restoring") + if let state = DeviceState.loadForDevice(device) { + // Initialize the device + device.deserialize(state.serializedState) + self.updateLabel("Connecting") + device.connectAndSetup().continueWith { t in + if let error = t.error { + // Sorry we couldn't connect self.deviceStatus.text = error.localizedDescription + } else { + // The result of a connectAndSetup call is a task which completes upon disconnection. + t.result!.continueWith { + state.serializedState = self.device.serialize() + state.saveToUrl(self.device.uniqueUrl) + self.updateLabel($0.error?.localizedDescription ?? "Disconnected") + } + + self.updateLabel("Connected") + self.device.flashLED(color: .green, intensity: 1.0, _repeat: 3) + + self.updateLabel("Downloading") + // Attach log download handlers for the data + let temperatureSignal = mbl_mw_logger_lookup_id(self.device.board, state.temperatureLogId) + mbl_mw_logger_subscribe(temperatureSignal, bridge(obj: self)) { (context, data) in + let _self: DeviceViewController = bridge(ptr: context!) + _self.didGetTemperature(timestamp: data!.pointee.timestamp, entry: data!.pointee.valueAs()) + } + + // Setup the handlers for events during the download + var handlers = MblMwLogDownloadHandler() + handlers.context = bridge(obj: self) + handlers.received_progress_update = { (context, entriesLeft, totalEntries) in + let _self: DeviceViewController = bridge(ptr: context!) + _self.progress(entriesLeft: entriesLeft, totalEntries: totalEntries) + } + handlers.received_unknown_entry = { (context, id, epoch, data, length) in + let _self: DeviceViewController = bridge(ptr: context!) + _self.unknownEntry(id: id, epoch: epoch, data: data, length: length) + } + handlers.received_unhandled_entry = { (context, data) in + let _self: DeviceViewController = bridge(ptr: context!) + _self.unhandledEntry(data: data) + } + + // Start the log download + mbl_mw_logging_download(self.device.board!, 100, &handlers) } } - }.failure { error in - self.deviceStatus.text = error.localizedDescription } } + + func updateLabel(_ msg: String) { + DispatchQueue.main.async { + self.deviceStatus.text = msg + } + } + + func didGetTemperature(timestamp: Date, entry: Float) { + print("temp: \(timestamp) \(entry)") + } + + func progress(entriesLeft: UInt32, totalEntries: UInt32) { + // Clear the in progress flag + if entriesLeft == 0 { + self.updateLabel("Finished download \(totalEntries) entries") + } + } + + func unknownEntry(id: UInt8, epoch: Int64, data: UnsafePointer?, length: UInt8) { + print("unknownEntry: \(epoch) \(String(describing: data)) \(length)") + } + + func unhandledEntry(data: UnsafePointer?) { + print("unhandledEntry: \(String(describing: data))") + } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) - device.led?.flashColorAsync(UIColor.red, withIntensity: 1.0, numberOfFlashes: 3) - device.disconnectAsync() + device.flashLED(color: .red, intensity: 1.0, _repeat: 3) + mbl_mw_debug_disconnect(device.board) } } diff --git a/StarterProject/Shared/MainTableViewController.swift b/StarterProject/Shared/MainTableViewController.swift index 64046be..8e3d40b 100644 --- a/StarterProject/Shared/MainTableViewController.swift +++ b/StarterProject/Shared/MainTableViewController.swift @@ -8,24 +8,34 @@ import UIKit import MetaWear +import MetaWearCpp +import MBProgressHUD +import BoltsSwift class MainTableViewController: UITableViewController, ScanTableViewControllerDelegate { - var devices: [MBLMetaWear] = [] + var devices: [MetaWear] = [] override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated); - MBLMetaWearManager.shared().retrieveSavedMetaWearsAsync().success { (array) in - self.devices = array as! [MBLMetaWear] + MetaWearScanner.shared.retrieveSavedMetaWearsAsync().continueOnSuccessWith(.mainThread) { + self.devices = $0 self.tableView.reloadData() } } // MARK: - Scan table view delegate - func scanTableViewController(_ controller: ScanTableViewController, didSelectDevice device: MBLMetaWear) { - device.rememberDevice() - _ = navigationController?.popViewController(animated: true) + func scanTableViewController(_ controller: ScanTableViewController, didSelectDevice device: MetaWear) { + navigationController?.popViewController(animated: true) + + let hud = MBProgressHUD.showAdded(to: UIApplication.shared.keyWindow!, animated: true) + hud.label.text = "Programming..." + device.initialDeviceSetup().continueWith(.mainThread) { + hud.mode = .text + hud.label.text = $0.error?.localizedDescription ?? "Success" + hud.hide(animated: true, afterDelay: 2.5) + } } // MARK: - Table view data source @@ -61,19 +71,15 @@ class MainTableViewController: UITableViewController, ScanTableViewControllerDel } override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { - // Return false if you do not want the specified item to be editable. + // Return false if you do not want the specified item to be editable.ƒ return indexPath.row < devices.count } override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if editingStyle == .delete { - let cur = devices[indexPath.row] - cur.forgetDevice() - cur.connect(withTimeoutAsync: 15.0).success { _ in - cur.setConfigurationAsync(nil) - } + devices[indexPath.row].eraseDevice() devices.remove(at: indexPath.row) - tableView.reloadSections([0], with: .automatic) + tableView.deleteRows(at: [indexPath], with: .automatic) } } @@ -84,9 +90,41 @@ class MainTableViewController: UITableViewController, ScanTableViewControllerDel // Get the new view controller using segue.destinationViewController. if let scanController = segue.destination as? ScanTableViewController { scanController.delegate = self - scanController.createConfiguration = DeviceConfiguration.init } else if let deviceController = segue.destination as? DeviceViewController { - deviceController.device = sender as! MBLMetaWear + deviceController.device = sender as! MetaWear + } + } +} + +extension MetaWear { + // Call once to setup a device + func initialDeviceSetup(temperaturePeriodMsec: UInt32 = 1000) -> Task<()> { + return eraseDevice().continueWithTask { _ -> Task> in + return self.connectAndSetup() + }.continueOnSuccessWithTask { _ -> Task<()> in + let state = DeviceState(temperaturePeriodMsec: temperaturePeriodMsec) + return state.setup(self) + }.continueWithTask { t -> Task<()> in + if !t.faulted { + self.remember() + } else { + self.eraseDevice() + } + return t + } + } + + // If you no longer need a device call this + @discardableResult + func eraseDevice() -> Task { + // Remove the on-disk state + try? FileManager.default.removeItem(at: uniqueUrl) + // Drop the device from the MetaWearScanner saved list + forget() + // Reset and clear all data from the device + return connectAndSetup().continueOnSuccessWithTask { + self.clearAndReset() + return $0 } } } diff --git a/StarterProject/Shared/ScanTableViewController.swift b/StarterProject/Shared/ScanTableViewController.swift index 6b595a3..c78748a 100644 --- a/StarterProject/Shared/ScanTableViewController.swift +++ b/StarterProject/Shared/ScanTableViewController.swift @@ -10,128 +10,119 @@ import MetaWear import MBProgressHUD protocol ScanTableViewControllerDelegate { - func scanTableViewController(_ controller: ScanTableViewController, didSelectDevice device: MBLMetaWear) + func scanTableViewController(_ controller: ScanTableViewController, didSelectDevice device: MetaWear) } class ScanTableViewController: UITableViewController { + var scannerModel: ScannerModel! + var selected: [ScannerModelItem] = [] var delegate: ScanTableViewControllerDelegate? - var createConfiguration: (() -> MBLRestorable)? - var devices: [MBLMetaWear]? - var selected: MBLMetaWear? + var hud: MBProgressHUD? override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated); - - MBLMetaWearManager.shared().startScan(forMetaWearsAllowDuplicates: true) { array in - self.devices = array - self.tableView.reloadData() - } + super.viewWillAppear(animated) + scannerModel = ScannerModel(delegate: self) + selected = [] + scannerModel.isScanning = true + tableView.reloadData() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) - - MBLMetaWearManager.shared().stopScan() + scannerModel.isScanning = false } // MARK: - Table view data source override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return devices?.count ?? 0 + return scannerModel.items.count } override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "MetaWearCell", for: indexPath) // Configure the cell... - if let cur = devices?[(indexPath as NSIndexPath).row] { - let uuid = cell.viewWithTag(1) as! UILabel - uuid.text = cur.mac ?? "Connect for MAC" - - let connected = cell.viewWithTag(3) as! UILabel - if cur.state == .connected { - connected.isHidden = false - } else { - connected.isHidden = true - } - - let name = cell.viewWithTag(4) as! UILabel - name.text = cur.name - - let rssi = cell.viewWithTag(2) as! UILabel - let signal = cell.viewWithTag(5) as! UIImageView - if let movingAverage = cur.averageRSSI?.doubleValue { - rssi.isHidden = false - rssi.text = cur.discoveryTimeRSSI?.stringValue ?? "" - - if movingAverage < -80.0 { - signal.image = UIImage(named: "wifi_d1") - } else if movingAverage < -70.0 { - signal.image = UIImage(named: "wifi_d2") - } else if movingAverage < -60.0 { - signal.image = UIImage(named: "wifi_d3") - } else if movingAverage < -50.0 { - signal.image = UIImage(named: "wifi_d4") - } else if movingAverage < -40.0 { - signal.image = UIImage(named: "wifi_d5") - } else { - signal.image = UIImage(named: "wifi_d6") - } + let cur = scannerModel.items[indexPath.row] + let uuid = cell.viewWithTag(1) as! UILabel + uuid.text = cur.device.mac ?? "Connect for MAC" + + let connected = cell.viewWithTag(3) as! UILabel + if cur.device.isConnectedAndSetup { + connected.isHidden = false + } else { + connected.isHidden = true + } + + let name = cell.viewWithTag(4) as! UILabel + name.text = cur.device.name + + let rssi = cell.viewWithTag(2) as! UILabel + let signal = cell.viewWithTag(5) as! UIImageView + if let movingAverage = cur.device.averageRSSI() { + rssi.isHidden = false + rssi.text = String(Int(movingAverage.rounded())) + if movingAverage < -80.0 { + signal.image = UIImage(named: "wifi_d1") + } else if movingAverage < -70.0 { + signal.image = UIImage(named: "wifi_d2") + } else if movingAverage < -60.0 { + signal.image = UIImage(named: "wifi_d3") + } else if movingAverage < -50.0 { + signal.image = UIImage(named: "wifi_d4") + } else if movingAverage < -40.0 { + signal.image = UIImage(named: "wifi_d5") } else { - signal.image = UIImage(named: "wifi_not_connected") - rssi.isHidden = true + signal.image = UIImage(named: "wifi_d6") } + } else { + signal.image = UIImage(named: "wifi_not_connected") + rssi.isHidden = true } return cell } - + override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView.deselectRow(at: indexPath, animated: true) - if let selected = devices?[(indexPath as NSIndexPath).row] { - let hud = MBProgressHUD.showAdded(to: UIApplication.shared.keyWindow!, animated: true) - hud.label.text = "Connecting..." + hud = MBProgressHUD.showAdded(to: UIApplication.shared.keyWindow!, animated: true) + hud?.label.text = "Connecting..." + + scannerModel.items[indexPath.row].toggleConnect() + } +} + + +extension ScanTableViewController: ScannerModelDelegate { + func scannerModel(_ scannerModel: ScannerModel, didAddItemAt idx: Int) { + DispatchQueue.main.async { + self.tableView.insertRows(at: [IndexPath(row: idx, section: 0)], with: .automatic) + } + } + + func scannerModel(_ scannerModel: ScannerModel, confirmBlinkingItem item: ScannerModelItem, callback: @escaping (Bool) -> Void) { + DispatchQueue.main.async { + self.hud?.hide(animated: true) + self.hud = nil - self.selected = selected - selected.connect(withTimeoutAsync: 15).success { _ in - hud.hide(animated: true) - selected.led?.flashColorAsync(UIColor.green, withIntensity: 1.0) - - let alert = UIAlertController(title: "Confirm Device", message: "Do you see a blinking green LED on the MetaWear", preferredStyle: UIAlertControllerStyle.alert) - alert.addAction(UIAlertAction(title: "No", style: .cancel, handler: { (action: UIAlertAction) -> Void in - selected.led?.setLEDOnAsync(false, withOptions: 1) - selected.disconnectAsync() - })) - alert.addAction(UIAlertAction(title: "Yes!", style: .default, handler: { (action: UIAlertAction) -> Void in - selected.led?.setLEDOnAsync(false, withOptions: 1) - guard let createConfiguration = self.createConfiguration else { - selected.disconnectAsync() - self.delegate?.scanTableViewController(self, didSelectDevice: selected) - return - } - let hud = MBProgressHUD.showAdded(to: UIApplication.shared.keyWindow!, animated: true) - hud.label.text = "Programming..." - selected.setConfigurationAsync(createConfiguration()).continueOnDispatch { t in - hud.hide(animated: true) - selected.disconnectAsync() - if let error = t.error { - self.showOKAlert("Error", message: error.localizedDescription) - } else { - self.delegate?.scanTableViewController(self, didSelectDevice: selected) - } - return nil - } - })) - self.present(alert, animated: true, completion: nil) - }.failure { error in - hud.label.text = error.localizedDescription - hud.hide(animated: true, afterDelay: 2.0) - } + let alert = UIAlertController(title: "Confirm Device", message: "Do you see a blinking green LED on the MetaWear", preferredStyle: UIAlertControllerStyle.alert) + alert.addAction(UIAlertAction(title: "No", style: .cancel) { _ in + callback(false) + }) + alert.addAction(UIAlertAction(title: "Yes!", style: .default) { _ in + callback(true) + self.delegate?.scanTableViewController(self, didSelectDevice: item.device) + }) + self.present(alert, animated: true, completion: nil) } } - func showOKAlert(_ title: String, message: String, handler: ((UIAlertAction) -> Void)? = nil) { - let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) - alertController.addAction(UIAlertAction(title: "OK", style: .default, handler: handler)) - present(alertController, animated: true) + func scannerModel(_ scannerModel: ScannerModel, errorDidOccur error: Error) { + DispatchQueue.main.async { + self.hud?.hide(animated: false) + self.hud = nil + + let alert = UIAlertController(title: "Error", message: error.localizedDescription, preferredStyle: .alert) + alert.addAction(UIAlertAction(title: "OK", style: .default)) + self.present(alert, animated: true) + } } } diff --git a/StarterProject/StarterProject.xcodeproj/project.pbxproj b/StarterProject/StarterProject.xcodeproj/project.pbxproj index d6bab74..bed42b5 100644 --- a/StarterProject/StarterProject.xcodeproj/project.pbxproj +++ b/StarterProject/StarterProject.xcodeproj/project.pbxproj @@ -24,13 +24,26 @@ 402973861DB839ED00EC8C32 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402973801DB839EA00EC8C32 /* AppDelegate.swift */; }; 402973871DB839ED00EC8C32 /* DeviceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402973811DB839EA00EC8C32 /* DeviceViewController.swift */; }; 402973881DB839ED00EC8C32 /* MainTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402973821DB839EA00EC8C32 /* MainTableViewController.swift */; }; - 402A1EB21F9E65C3001C2253 /* DeviceConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402A1EB11F9E65C3001C2253 /* DeviceConfiguration.swift */; }; - 402A1EB31F9E65C8001C2253 /* DeviceConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402A1EB11F9E65C3001C2253 /* DeviceConfiguration.swift */; }; + 40F7881D209B6D3E002D5E27 /* DeviceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F7881C209B6D3E002D5E27 /* DeviceState.swift */; }; + 40F7881E209B6D3E002D5E27 /* DeviceState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40F7881C209B6D3E002D5E27 /* DeviceState.swift */; }; A74CC4E904D4261827DB3639 /* Pods_Starter_macOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3CC4717E50B1C51696459B4 /* Pods_Starter_macOS.framework */; }; BC31A9FBED54BD932058B42E /* Pods_Starter_tvOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B810285FECA2430C1FAEF3F /* Pods_Starter_tvOS.framework */; }; E829A8A800A7AFC5A4C5DA7A /* Pods_Starter_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C3D37560DD979815A53DF1B /* Pods_Starter_iOS.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXCopyFilesBuildPhase section */ + 404057A1209A6D2400591D6B /* Embed Watch Content */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "$(CONTENTS_FOLDER_PATH)/Watch"; + dstSubfolderSpec = 16; + files = ( + ); + name = "Embed Watch Content"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ 0C3D37560DD979815A53DF1B /* Pods_Starter_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Starter_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1D38549A4A5D5B53A9AC0EDE /* Pods-Starter-macOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Starter-macOS.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.debug.xcconfig"; sourceTree = ""; }; @@ -54,7 +67,7 @@ 402973801DB839EA00EC8C32 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 402973811DB839EA00EC8C32 /* DeviceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DeviceViewController.swift; sourceTree = ""; }; 402973821DB839EA00EC8C32 /* MainTableViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainTableViewController.swift; sourceTree = ""; }; - 402A1EB11F9E65C3001C2253 /* DeviceConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceConfiguration.swift; sourceTree = ""; }; + 40F7881C209B6D3E002D5E27 /* DeviceState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeviceState.swift; sourceTree = ""; }; 4B810285FECA2430C1FAEF3F /* Pods_Starter_tvOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Starter_tvOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5831B849867AF94CA117AB75 /* Pods-Starter-macOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Starter-macOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS.release.xcconfig"; sourceTree = ""; }; BC9E019C266AD9823B5E877D /* Pods-Starter-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Starter-tvOS.release.xcconfig"; path = "Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS.release.xcconfig"; sourceTree = ""; }; @@ -119,7 +132,7 @@ 402973811DB839EA00EC8C32 /* DeviceViewController.swift */, 402973821DB839EA00EC8C32 /* MainTableViewController.swift */, 4029737D1DB839AF00EC8C32 /* ScanTableViewController.swift */, - 402A1EB11F9E65C3001C2253 /* DeviceConfiguration.swift */, + 40F7881C209B6D3E002D5E27 /* DeviceState.swift */, 402973281DB81F5A00EC8C32 /* Assets.xcassets */, ); path = Shared; @@ -190,7 +203,7 @@ 4029732A1DB81F5A00EC8C32 /* Frameworks */, 4029732B1DB81F5A00EC8C32 /* Resources */, 5D83398C0851483637B414DA /* [CP] Embed Pods Frameworks */, - B011AC4A4DC14E6A0A19D00B /* [CP] Copy Pods Resources */, + 404057A1209A6D2400591D6B /* Embed Watch Content */, ); buildRules = ( ); @@ -210,7 +223,6 @@ 4029733C1DB81F5B00EC8C32 /* Frameworks */, 4029733D1DB81F5B00EC8C32 /* Resources */, CD15F0F20FF43F2AB4E80A00 /* [CP] Embed Pods Frameworks */, - 67D79081B84C4ED8207F59E4 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -230,7 +242,6 @@ 4029734A1DB81F5B00EC8C32 /* Frameworks */, 4029734B1DB81F5B00EC8C32 /* Resources */, C67E85AC0C117CC6F47718CB /* [CP] Embed Pods Frameworks */, - 7962755DDA5797D024FA0406 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -247,8 +258,8 @@ 402973201DB81F5A00EC8C32 /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 0800; - LastUpgradeCheck = 0900; + LastSwiftUpdateCheck = 0930; + LastUpgradeCheck = 0930; ORGANIZATIONNAME = "MBIENTLAB, INC"; TargetAttributes = { 4029732C1DB81F5A00EC8C32 = { @@ -348,15 +359,13 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-iOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-iOS/FastCoding.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-iOS/BoltsSwift.framework", "${BUILT_PRODUCTS_DIR}/MBProgressHUD-iOS/MBProgressHUD.framework", "${BUILT_PRODUCTS_DIR}/MetaWear-iOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); @@ -365,36 +374,6 @@ shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 67D79081B84C4ED8207F59E4 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; - 7962755DDA5797D024FA0406 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; 988DD8E239A728AB41171C52 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -413,21 +392,6 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - B011AC4A4DC14E6A0A19D00B /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - name = "[CP] Copy Pods Resources"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Starter-iOS/Pods-Starter-iOS-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; C67E85AC0C117CC6F47718CB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -435,14 +399,12 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-Starter-macOS/Pods-Starter-macOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-macOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-macOS/FastCoding.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-macOS/BoltsSwift.framework", "${BUILT_PRODUCTS_DIR}/MetaWear-macOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); runOnlyForDeploymentPostprocessing = 0; @@ -457,15 +419,13 @@ ); inputPaths = ( "${SRCROOT}/Pods/Target Support Files/Pods-Starter-tvOS/Pods-Starter-tvOS-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/Bolts-tvOS/Bolts.framework", - "${BUILT_PRODUCTS_DIR}/FastCoding-tvOS/FastCoding.framework", + "${BUILT_PRODUCTS_DIR}/Bolts-Swift-tvOS/BoltsSwift.framework", "${BUILT_PRODUCTS_DIR}/MBProgressHUD-tvOS/MBProgressHUD.framework", "${BUILT_PRODUCTS_DIR}/MetaWear-tvOS/MetaWear.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Bolts.framework", - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FastCoding.framework", + "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/BoltsSwift.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MBProgressHUD.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/MetaWear.framework", ); @@ -500,7 +460,7 @@ buildActionMask = 2147483647; files = ( 402973851DB839EA00EC8C32 /* MainTableViewController.swift in Sources */, - 402A1EB21F9E65C3001C2253 /* DeviceConfiguration.swift in Sources */, + 40F7881D209B6D3E002D5E27 /* DeviceState.swift in Sources */, 402973831DB839EA00EC8C32 /* AppDelegate.swift in Sources */, 4029737E1DB839AF00EC8C32 /* ScanTableViewController.swift in Sources */, 402973841DB839EA00EC8C32 /* DeviceViewController.swift in Sources */, @@ -512,7 +472,7 @@ buildActionMask = 2147483647; files = ( 402973881DB839ED00EC8C32 /* MainTableViewController.swift in Sources */, - 402A1EB31F9E65C8001C2253 /* DeviceConfiguration.swift in Sources */, + 40F7881E209B6D3E002D5E27 /* DeviceState.swift in Sources */, 402973861DB839ED00EC8C32 /* AppDelegate.swift in Sources */, 4029737F1DB839B200EC8C32 /* ScanTableViewController.swift in Sources */, 402973871DB839ED00EC8C32 /* DeviceViewController.swift in Sources */, @@ -563,6 +523,7 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -570,6 +531,7 @@ CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -596,11 +558,14 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 3.0.1; + TVOS_DEPLOYMENT_TARGET = 10.0; + WATCHOS_DEPLOYMENT_TARGET = 4.0; }; name = Debug; }; @@ -617,6 +582,7 @@ CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; @@ -624,6 +590,7 @@ CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; @@ -644,9 +611,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 10.0; MTL_ENABLE_DEBUG_INFO = NO; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 3.0.1; + TVOS_DEPLOYMENT_TARGET = 10.0; + WATCHOS_DEPLOYMENT_TARGET = 4.0; }; name = Release; }; @@ -658,7 +628,6 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = iOS/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.mbientlab.StarterProject; PRODUCT_NAME = StarterProject; @@ -677,7 +646,6 @@ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = iOS/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = com.mbientlab.StarterProject; PRODUCT_NAME = StarterProject; @@ -703,7 +671,6 @@ SDKROOT = appletvos; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; - TVOS_DEPLOYMENT_TARGET = 10.0; }; name = Debug; }; @@ -721,7 +688,6 @@ SDKROOT = appletvos; SWIFT_SWIFT3_OBJC_INFERENCE = Default; SWIFT_VERSION = 4.0; - TVOS_DEPLOYMENT_TARGET = 10.0; VALIDATE_PRODUCT = YES; }; name = Release; @@ -736,7 +702,6 @@ DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = macOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.12; PRODUCT_BUNDLE_IDENTIFIER = com.mbientlab.StarterProject; PRODUCT_NAME = StarterProject; SDKROOT = macosx; @@ -755,7 +720,6 @@ DEVELOPMENT_TEAM = S2273LZ6GL; INFOPLIST_FILE = macOS/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 10.12; PRODUCT_BUNDLE_IDENTIFIER = com.mbientlab.StarterProject; PRODUCT_NAME = StarterProject; SDKROOT = macosx; diff --git a/StarterProject/StarterProject.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/StarterProject/StarterProject.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/StarterProject/StarterProject.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/StarterProject/macOS/AppDelegate.swift b/StarterProject/macOS/AppDelegate.swift index 41bbaf4..83e555d 100644 --- a/StarterProject/macOS/AppDelegate.swift +++ b/StarterProject/macOS/AppDelegate.swift @@ -10,9 +10,6 @@ import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { - - - func applicationDidFinishLaunching(_ aNotification: Notification) { // Insert code here to initialize your application } @@ -24,7 +21,4 @@ class AppDelegate: NSObject, NSApplicationDelegate { func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { return true } - - } - diff --git a/StarterProject/macOS/ScanViewController.swift b/StarterProject/macOS/ScanViewController.swift index e3bddbe..b4b8b3d 100644 --- a/StarterProject/macOS/ScanViewController.swift +++ b/StarterProject/macOS/ScanViewController.swift @@ -8,12 +8,12 @@ import Cocoa import MetaWear +import MetaWearCpp class ScanViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource { @IBOutlet weak var tableView: NSTableView! - var devices: [MBLMetaWear]? - + var scannerModel: ScannerModel? // MARK: View Life Cycle override func viewDidLoad() { @@ -22,44 +22,45 @@ class ScanViewController: NSViewController, NSTableViewDelegate, NSTableViewData tableView.target = self tableView.doubleAction = #selector(ScanViewController.tableViewDoubleClick(sender:)) } + + override func viewWillAppear() { + super.viewWillAppear() + scannerModel = ScannerModel(delegate: self) + scannerModel?.isScanning = true + } - override func viewDidAppear() { - super.viewDidAppear() - - MBLMetaWearManager.shared().logLevel = .info - MBLMetaWearManager.shared().startScan(forMetaWearsAllowDuplicates: true) { array in - self.devices = array - self.tableView.reloadData() - } + override func viewWillDisappear() { + super.viewWillDisappear() + scannerModel?.isScanning = false } + // MARK: NSTableViewDelegate func numberOfRows(in tableView: NSTableView) -> Int { - return devices?.count ?? 0 + return scannerModel?.items.count ?? 0 } func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { - guard let device = devices?[row] else { + guard let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "MetaWearCell"), owner: nil) as? NSTableCellView else { return nil } - guard let cell = tableView.make(withIdentifier: "MetaWearCell", owner: nil) as? NSTableCellView else { + guard let device = scannerModel?.items[row].device else { return nil } - let uuid = cell.viewWithTag(1) as! NSTextField - uuid.stringValue = device.identifier.uuidString + uuid.stringValue = device.peripheral.identifier.uuidString - if let rssiNumber = device.discoveryTimeRSSI { + if let rssiNumber = device.averageRSSI() { let rssi = cell.viewWithTag(2) as! NSTextField - rssi.stringValue = rssiNumber.stringValue + rssi.stringValue = String(Int(rssiNumber.rounded())) } let connected = cell.viewWithTag(3) as! NSTextField - if device.state == .connected { + if device.isConnectedAndSetup { connected.stringValue = "Connected!" connected.isHidden = false - } else if device.state == .connecting || device.state == .discovery { + } else if scannerModel!.items[row].isConnecting { connected.stringValue = "Connecting..." connected.isHidden = false } else { @@ -70,43 +71,60 @@ class ScanViewController: NSViewController, NSTableViewDelegate, NSTableViewData name.stringValue = device.name let signal = cell.viewWithTag(5) as! NSImageView - if let movingAverage = device.averageRSSI?.doubleValue { + if let movingAverage = device.averageRSSI() { if movingAverage < -80.0 { - signal.image = NSImage(named: "wifi_d1") + signal.image = #imageLiteral(resourceName: "wifi_d1") } else if movingAverage < -70.0 { - signal.image = NSImage(named: "wifi_d2") + signal.image = #imageLiteral(resourceName: "wifi_d2") } else if movingAverage < -60.0 { - signal.image = NSImage(named: "wifi_d3") + signal.image = #imageLiteral(resourceName: "wifi_d3") } else if movingAverage < -50.0 { - signal.image = NSImage(named: "wifi_d4") + signal.image = #imageLiteral(resourceName: "wifi_d4") } else if movingAverage < -40.0 { - signal.image = NSImage(named: "wifi_d5") + signal.image = #imageLiteral(resourceName: "wifi_d5") } else { - signal.image = NSImage(named: "wifi_d6") + signal.image = #imageLiteral(resourceName: "wifi_d6") } } else { - signal.image = NSImage(named: "wifi_not_connected") + signal.image = #imageLiteral(resourceName: "wifi_not_connected") } return cell } - func tableViewDoubleClick(sender: AnyObject) { - print("\(tableView.clickedRow) \(tableView.clickedColumn)") - guard let device = devices?[tableView.clickedRow] else { + @objc func tableViewDoubleClick(sender: AnyObject) { + guard let device = scannerModel?.items[tableView.clickedRow].device else { return } - if device.state == .connected { - device.led?.flashColorAsync(NSColor.red, withIntensity: 1.0, numberOfFlashes: 3) - device.disconnectAsync().success { _ in - self.tableView.reloadData() - } + if device.isConnectedAndSetup { + device.flashLED(color: .red, intensity: 1.0, _repeat: 3) + mbl_mw_debug_disconnect(device.board) } else { - device.connectAsync().success { _ in - device.led?.flashColorAsync(NSColor.green, withIntensity: 1.0, numberOfFlashes: 3) + device.logDelegate = ConsoleLogger.shared + device.connectAndSetup().continueOnSuccessWith { + $0.continueWith(.mainThread) { _ in + self.tableView.reloadData() + } + device.flashLED(color: .green, intensity: 1.0, _repeat: 3) self.tableView.reloadData() } self.tableView.reloadData() } } } + +extension ScanViewController: ScannerModelDelegate { + func scannerModel(_ scannerModel: ScannerModel, didAddItemAt idx: Int) { + DispatchQueue.main.async { + self.tableView.reloadData() + } + } + + func scannerModel(_ scannerModel: ScannerModel, confirmBlinkingItem item: ScannerModelItem, callback: @escaping (Bool) -> Void) { + } + + func scannerModel(_ scannerModel: ScannerModel, errorDidOccur error: Error) { + } +} + +