Rohan Gurav
/
Sean_AdiSense1000_V21
ADISense1000 Version 2.1 code base
Fork of AdiSense1000_V21 by
Diff: main.cpp
- Revision:
- 12:97457cf77bcb
- Child:
- 13:176ca4f0ca20
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Nov 27 13:10:11 2017 +0000 @@ -0,0 +1,163 @@ +/* + ****************************************************************************** + * file: main.cpp + *----------------------------------------------------------------------------- + * +Copyright (c) 2017 Emutex Ltd. / Analog Devices, 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. + - Modified versions of the software must be conspicuously marked as such. + - This software is licensed solely and exclusively for use with processors + manufactured by or for Analog Devices, Inc. + - This software may not be combined or merged with other code in any manner + that would cause the software to become subject to terms and conditions + which differ from those listed here. + - Neither the name of Analog Devices, Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + - The use of this software may or may not infringe the patent rights of one + or more patent holders. This license does not release you from the + requirement that you obtain separate licenses from these patent holders + to use this software. + +THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. AND CONTRIBUTORS "AS IS" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, +TITLE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN +NO EVENT SHALL ANALOG DEVICES, INC. OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, +INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, DAMAGES ARISING OUT OF CLAIMS OF INTELLECTUAL +PROPERTY RIGHTS INFRINGEMENT; 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. + * + *****************************************************************************/ +#include "mbed.h" +#include "inc/adi_sense_api.h" +#include "inc/adi_sense_1000/adi_sense_1000_api.h" +#include "inc/adi_sense_log.h" +#include "common/utils.h" + +extern ADI_SENSE_CONFIG sensor0_rtd_2w_pt100_config; +extern ADI_SENSE_CONFIG sensor1_typeK_cjc1_config; +extern ADI_SENSE_CONFIG sensor1_rtd_3w_pt100_config; +extern ADI_SENSE_CONFIG sensor2_typeT_cjc0_config; +extern ADI_SENSE_CONFIG sensor2_bridge_6w_pressure_config; +extern ADI_SENSE_CONFIG sensor3_typeJ_cjc0_config; +extern ADI_SENSE_CONFIG sensor3_thermistor_10k_ntc_config; +extern ADI_SENSE_CONFIG voltage_honeywellPressure_config; +extern ADI_SENSE_CONFIG current_honeywellPressure_config; +extern ADI_SENSE_CONFIG i2c0_honeywellHumidity_config; +extern ADI_SENSE_CONFIG spi0_honeywellTrustability_config; +extern ADI_SENSE_CONFIG spi0_adiAdxl362_config; +extern ADI_SENSE_CONFIG multichannel_continuous_config; +extern ADI_SENSE_CONFIG multichannel_multicycle_config; +extern ADI_SENSE_CONFIG multichannel_singlecycle_config; + +/* Change the following pointer to select any of the configurations above */ +static ADI_SENSE_CONFIG *pSelectedConfig = &sensor0_rtd_2w_pt100_config; + +static ADI_SENSE_CONNECTION connectionInfo = { + .type = ADI_SENSE_CONNECTION_TYPE_SPI, + .spi = { + .mosiPin = SPI_MOSI, + .misoPin = SPI_MISO, + .sckPin = SPI_SCK, + .csPin = D10, + .maxSpeedHz = 2000000, + }, + .gpio = { + .resetPin = D6, + .errorPin = D3, + .alertPin = D4, + .datareadyPin = D5, + }, +}; + +int main() +{ + ADI_SENSE_RESULT res; + ADI_SENSE_DEVICE_HANDLE hDevice; + bool_t bHealthCheckMode = false; + bool_t bDeviceReady; + + /* + * Open an ADI Sense device instance. + */ + res = adi_sense_Open(0, &connectionInfo, &hDevice); + if (res != ADI_SENSE_SUCCESS) + { + ADI_SENSE_LOG_ERROR("Failed to open device instance"); + return res; + } + + /* + * Reset the given ADI Sense device.... + */ + ADI_SENSE_LOG_INFO("Resetting ADI Sense device, please wait..."); + res = adi_sense_Reset(hDevice); + if (res != ADI_SENSE_SUCCESS) + { + ADI_SENSE_LOG_ERROR("Failed to reset device"); + return res; + } + /* + * ...and wait until the device is ready. + */ + do { + wait_ms(100); + res = adi_sense_GetDeviceReadyState(hDevice, &bDeviceReady); + if (res != ADI_SENSE_SUCCESS) + { + ADI_SENSE_LOG_ERROR("Failed to get device ready-state"); + return res; + } + } while (! bDeviceReady); + ADI_SENSE_LOG_INFO("ADI Sense device ready"); + + /* + * Write configuration settings to the device registers. + * Settings are not applied until adi_sense_ApplyConfigUpdates() is called. + */ + ADI_SENSE_LOG_INFO("Setting device configuration"); + res = adi_sense_SetConfig(hDevice, pSelectedConfig); + if (res != ADI_SENSE_SUCCESS) + { + ADI_SENSE_LOG_ERROR("Failed to set device configuration"); + return res; + } + res = adi_sense_ApplyConfigUpdates(hDevice); + if (res != ADI_SENSE_SUCCESS) + { + ADI_SENSE_LOG_ERROR("Failed to apply device configuration"); + return res; + } + + /* + * Kick off the measurement cycle here + */ + ADI_SENSE_LOG_INFO("Configuration completed, starting measurement cycles"); + utils_runMeasurement(hDevice, bHealthCheckMode); + + /* + * Clean up and exit + */ + res = adi_sense_Close(hDevice); + if (res != ADI_SENSE_SUCCESS) + { + ADI_SENSE_LOG_ERROR("Failed to close device instance"); + return res; + } + + return 0; +} +