CAC_smartcushion
/
ADISense1000_Smartcushion_v1_ble_reply_over_usb2ser
Proswift with BLE EV-BL652ARDZ
Fork of ADISense1000_Example_FW by
Diff: main.cpp
- Revision:
- 1:25a2bf666957
- Parent:
- 0:76fed7dd9235
--- a/main.cpp Thu Jan 25 16:00:23 2018 +0000 +++ b/main.cpp Fri Aug 24 08:58:48 2018 +0000 @@ -2,144 +2,92 @@ ****************************************************************************** * file: main.cpp *----------------------------------------------------------------------------- - * -Copyright 2017 (c) 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. - - 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. - - Use of the software either in source or binary form, must be run - on or directly connected to an Analog Devices Inc. component. - -THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT, -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, 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 config; - -/* Change the following pointer to select any of the configurations above */ -static ADI_SENSE_CONFIG *pSelectedConfig = &config; +//additional libraries +#include "adisense1000_boot.h" +#include "ble_interface/ble_interface.h" +#include "myproswift_eval.h" +#include "eeprom_virtual/eeprom.h" +#include "myproswift_periph.h" +#include "led.h" +#include "bootloader.h" +#include "rcc_backup_registers.h" -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, - }, -}; +#ifdef BL652 +#include "ble_interface/bl652.h" +#endif -int main() + +int main( void ) { - ADI_SENSE_RESULT res; - ADI_SENSE_DEVICE_HANDLE hDevice; - ADI_SENSE_MEASUREMENT_MODE eMeasurementMode = ADI_SENSE_MEASUREMENT_MODE_NORMAL; - 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; + int ret = 1; + bool bleActive; + + // Indicate device is booting + Led_Boot(); + + // Check if device needs to enter bootloader function, this is set via a PC command + // Flag is stored in RTC registers that persist while vbat is powered + bool_t bBootLoader = Rcc_ReadBackupReg( BOOTLOADER_FLAG_BACKUP_REG ) == 1 ? true : false; + if( bBootLoader ) { + + // Let user know device is entering bootloader mode + Pc_ResetSuccess( bBootLoader ); + + // Jump to bootloader + Bootloader_Init(); } - /* - * ...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"); + + // Otherwise, boot main program + + // Boot the adisense1000 to a known state + ret = Adisense1000_Boot(); + bool adiSense1000Active = !ret; + +#ifdef BL652 + //boot BLE device + ret = Bl652_Boot(); + if (ret == 0) { + ADI_SENSE_LOG_INFO("BLE Boot success.."); + } else { + ADI_SENSE_LOG_INFO("BLE Boot unsuccessful.."); + } +#endif - /* - * 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; + // Set if ble is present or not + // If not, the PC interface can still be initialised + bleActive = !ret; + + // Check adisense has booted correctly + if( adiSense1000Active ) { + Pc_ResetSuccess( bBootLoader ); + ADI_SENSE_LOG_INFO("ADIsense boot successful..."); } - res = adi_sense_ApplyConfigUpdates(hDevice); - if (res != ADI_SENSE_SUCCESS) - { - ADI_SENSE_LOG_ERROR("Failed to apply device configuration"); - return res; + else { + // Cannot continue without adi_sense module + exit( 1 ); } - - /* - * Kick off the measurement cycle here - */ - ADI_SENSE_LOG_INFO("Configuration completed, starting measurement cycles"); - utils_runMeasurement(hDevice, eMeasurementMode); - - /* - * 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; + + // Set led on to indicate boot has completed + + ADI_SENSE_LOG_INFO("Set LED Idle..."); + Led_Idle(); + + // Begin main program + ADI_SENSE_LOG_INFO("Begin main program..."); + while(1) { + // Read in a command and handle appropriately + ret = MyProSwift_Command( bleActive ); + if( ret != 0 ) { + // Errors should be handled at lower levels, using reponse codes + // to the appropriate active interface + // exit(1); + } } - - return 0; }