Complete interrupt based test application for the STMicrolectronics' X-NUCLEO-6180XA1 Proximity and ambient light sensor expansion board.

Dependencies:   X_NUCLEO_6180XA1 mbed

Fork of HelloWorld_6180XA1_AppExample by ST Expansion SW Team

Complete interrupt based test application for the STMicrolectronics' X-NUCLEO-6180XA1 Proximity and ambient light sensor expansion board.
The application reads the on board red switch and reports the measured ALS or range accordingly.
A demonstration of resources de-allocation and system restart is also provided by means of Blue Button press.

Revision:
4:84dfc00ae7b3
Parent:
3:d3719ebf51c4
diff -r d3719ebf51c4 -r 84dfc00ae7b3 main.cpp
--- a/main.cpp	Fri Mar 03 15:11:39 2017 +0000
+++ b/main.cpp	Mon Mar 13 19:14:32 2017 +0000
@@ -1,25 +1,34 @@
+/*
+   This VL6180X Expansion board test application performs a range measurement
+   and an als measurement in interrupt mode on the onboard embedded top sensor. 
+   The board red slider selects on the flight the measurement type as ALS or
+   RANGE; the measured data is diplayed on the on bord 4digits display.
+
+   User Blue button allows to stop current measurement and the entire program
+   releasing all the resources.
+   Reset button is used to restart the program.
+
+   Polling operating modes don`t require callback function that handles IRQ 
+   callbacks. IRQ functions are used only for measures that require interrupts.
+
+   Notes:
+   + get_measurement() is asynchronous! It returns NOT_READY if the measurement
+     value is not ready to be read from the corresponding register. So you need
+     to wait for the result to be ready.\
+*/
+
+
+/* Includes ------------------------------------------------------------------*/
+
 #include "mbed.h"
-#include "x_nucleo_6180xa1.h"
+#include "XNucleo6180XA1.h"
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <assert.h>
 
-/* This VL6180X Expansion board test application performs a range measurement and an als measurement in interrupt mode
-   on the onboard embedded top sensor. 
-   The board red slider select on the flight the measurement type as ALS or RANGE; the measured data is diplayed on the 
-   on bord 4digits display.
 
-   User Blue button allows to stop current measurement and the entire program releasing all the resources.
-   Reset button is used to restart the program. */
-
-/* Polling operating modes don`t require callback function that handles IRQ 
-   Callback IRQ functions are used only for measure that require interrupt. */
-
-/* GetMeasurement is asynchronous! It returns NOT_READY if the measurement value 
-   is not ready to be read from the corresponding register. So you need to wait
-   for the result to be ready. */
-
+/* Definitions ---------------------------------------------------------------*/
 
 #define VL6180X_I2C_SDA   D14 
 #define VL6180X_I2C_SCL   D15 
@@ -30,34 +39,45 @@
 #define DELAY 2000  // 2Sec
 
 
+/* Types ---------------------------------------------------------------------*/
+
+/* Operating mode */
+operating_mode_t operating_mode, prev_operating_mode;
+enum op_mode_int_poll_t {
+    PollMeasure,
+    IntMeasure
+};
+
+
+/* Variables -----------------------------------------------------------------*/
+
 /* Expansion board */
-static X_NUCLEO_6180XA1 *board = NULL;
+static XNucleo6180XA1 *board = NULL;
 
 /* Measure data */
-MeasureData_t data_sensor_top;
+measure_data_t data_sensor_top;
 
-/* Operating mode */
-OperatingMode operating_mode, prev_operating_mode;
-enum OpModeIntPoll_t{ PollMeasure, IntMeasure };
-    
 /* Flags that handle interrupt request */
 bool int_sensor_top = false, int_stop_measure = false;  
 
+
+/* Functions -----------------------------------------------------------------*/
+
 /* ISR callback function of the sensor_top */
-void SensorTopIRQ(void)
+void sensor_top_irq(void)
 {
     int_sensor_top = true;
-    board->sensor_top->DisableInterruptMeasureDetectionIRQ();
+    board->sensor_top->disable_interrupt_measure_detection_irq();
 }
 
 /* ISR callback function of the user blue button to stop program */
-void StopMeasureIRQ(void)
+void stop_measure_irq(void)
 {
     int_stop_measure = true;
 }
 
 /* On board 4 digit local display refresh */
-void DisplayRefresh(OperatingMode op_mode)
+void display_refresh(operating_mode_t op_mode)
 {
     char str[5];
 
@@ -74,16 +94,16 @@
             sprintf(str,"%s","----");
         }
     }
-    board->display->DisplayString(str, strlen(str));       
+    board->display->display_string(str, strlen(str));       
 }
 
 /* On board red slider position check */
-OperatingMode CheckSlider(enum OpModeIntPoll_t OpMode)
+operating_mode_t check_slider(enum op_mode_int_poll_t op_mode)
 {
-    OperatingMode ret;
-    int measure = board->RdSwitch();
+    operating_mode_t ret;
+    int measure = board->rd_switch();
 
-    switch (OpMode) {
+    switch (op_mode) {
         case PollMeasure:
             if (measure==RANGE) {
                 ret = range_continuous_polling;
@@ -102,8 +122,8 @@
     return ret;      
 }
 
-/* Print on USB Serial the started OperatingMode */
-void PrintStartMessage(OperatingMode op_mode)
+/* Print on USB Serial the started operating_mode_t */
+void print_start_message(operating_mode_t op_mode)
 {
     if (op_mode==range_continuous_interrupt) {
         printf("\nStarted range continuous interrupt measure\n\r");
@@ -112,8 +132,8 @@
     }
 }
 
-/* Print on USB Serial the stopped OperatingMode */
-void PrintStopMessage(OperatingMode op_mode)
+/* Print on USB Serial the stopped operating_mode_t */
+void print_stop_message(operating_mode_t op_mode)
 {
     if (op_mode==range_continuous_interrupt) {
         printf("Stopped range continuous interrupt measure\n\r");
@@ -123,7 +143,7 @@
 }
 
 /* Print on board 4 Digit display the indicated message <= 4 char */
-void DisplayMsg(const char * msg)
+void display_msg(const char * msg)
 {
     Timer timer;
     char str[5];
@@ -132,86 +152,85 @@
     for (int i=0; i<DELAY; i=timer.read_ms())
     {
         sprintf(str,"%s",msg);
-        board->display->DisplayString(str, strlen(str));
+        board->display->display_string(str, strlen(str));
     }
     timer.stop();
 }
 
 /* Handle continuous ALS or Range measurement. */
-void IntContinousALSorRangeMeasure (DevI2C *device_i2c) {
+void int_continous_als_or_range_measure (DevI2C *device_i2c) {
     int status;
 
     /* Creates the 6180XA1 expansion board singleton obj */
 #ifdef TARGET_STM32F429
-    board = X_NUCLEO_6180XA1::Instance(device_i2c, A5, A2, D13, D2);
+    board = XNucleo6180XA1::instance(device_i2c, A5, A2, D13, D2);
 #else
-    board = X_NUCLEO_6180XA1::Instance(device_i2c, A3, A2, D13, D2);
+    board = XNucleo6180XA1::instance(device_i2c, A3, A2, D13, D2);
 #endif
-    DisplayMsg("INT");
+    display_msg("INT");
     
     /* Init the 6180XA1 expansion board with default values */
-    status = board->InitBoard();
+    status = board->init_board();
     if (status) {
         printf("Failed to init board!\n\r");
     }
 
     /* Check the red slider position for ALS/Range measure */
-    operating_mode=CheckSlider(IntMeasure);
+    operating_mode=check_slider(IntMeasure);
 
     /* Start the measure on sensor top */
-    status = board->sensor_top->StartMeasurement(operating_mode, SensorTopIRQ, NULL, NULL);
+    status = board->sensor_top->start_measurement(operating_mode, sensor_top_irq, NULL, NULL);
     if (!status) {
         prev_operating_mode=operating_mode;
-        PrintStartMessage(operating_mode);
+        print_start_message(operating_mode);
         while (true) {
             if (int_sensor_top) { /* 6180 isr was triggered */
                 int_sensor_top = false;
-                status = board->sensor_top->HandleIRQ(operating_mode, &data_sensor_top); /* handle the isr and read the meaure */
-                DisplayRefresh(operating_mode);
+                status = board->sensor_top->handle_irq(operating_mode, &data_sensor_top); /* handle the isr and read the meaure */
+                display_refresh(operating_mode);
             }
             if (int_stop_measure) { /* Blue Button isr was triggered */
-                status = board->sensor_top->StopMeasurement(prev_operating_mode); /* stop the measure and exit */
+                status = board->sensor_top->stop_measurement(prev_operating_mode); /* stop the measure and exit */
                 if (!status) {
-                    PrintStopMessage(prev_operating_mode);
+                    print_stop_message(prev_operating_mode);
                 }
                 int_stop_measure = false;
                 printf("\nProgram stopped!\n\n\r");
                 break;
             }
-            operating_mode = CheckSlider(IntMeasure); /* check if red slider was moved */
+            operating_mode = check_slider(IntMeasure); /* check if red slider was moved */
             if (operating_mode!=prev_operating_mode) {
-                DisplayRefresh(prev_operating_mode);
-                status = board->sensor_top->StopMeasurement(prev_operating_mode); /* stop the running measure */
+                display_refresh(prev_operating_mode);
+                status = board->sensor_top->stop_measurement(prev_operating_mode); /* stop the running measure */
                 if (!status) {
-                    PrintStopMessage(prev_operating_mode);
+                    print_stop_message(prev_operating_mode);
                 }
                 prev_operating_mode = operating_mode;
-                status = board->sensor_top->StartMeasurement(operating_mode, SensorTopIRQ, NULL, NULL); /* start the new measure */
+                status = board->sensor_top->start_measurement(operating_mode, sensor_top_irq, NULL, NULL); /* start the new measure */
                 if (!status) {
-                    PrintStartMessage(operating_mode);
+                    print_start_message(operating_mode);
                 }
             } else {
-                DisplayRefresh(operating_mode);
+                display_refresh(operating_mode);
             }
         }
     }
-    DisplayMsg("BYE");
+    display_msg("BYE");
 }
 
 /*=================================== Main ==================================
  Move the VL6180X Expansion board red slider to switch between ALS or Range
  measures.
- Press the blue user button to stop the measurements in progress    
+ Press the blue user button to stop the measurements in progress.   
 =============================================================================*/
 int main()
 {   
 #if USER_BUTTON==PC_13  // Cross compiling for Nucleo-F401
     InterruptIn stop_button (USER_BUTTON);
-    stop_button.rise (&StopMeasureIRQ);  
+    stop_button.rise (&stop_measure_irq);  
 #endif   
     DevI2C *device_i2c = new DevI2C(VL6180X_I2C_SDA, VL6180X_I2C_SCL);     
 
     /* Start continous measures Interrupt based */
-    IntContinousALSorRangeMeasure (device_i2c);
+    int_continous_als_or_range_measure (device_i2c);
 }
-