Proswift with BLE EV-BL652ARDZ

Fork of ADISense1000_Example_FW by Analog Devices

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;
 }