/**********************************************************************//** * * Copyright (c) 2020 Diality Inc. - All Rights Reserved. * * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * @file LoadCell.c * * @date 25-Feb-2020 * @author S. Nejatali * * @brief Processing sensor data. * **************************************************************************/ #include "LoadCell.h" #include "SystemCommMessages.h" #include "FPGA.h" #include "TaskPriority.h" DATA_DECL( U32, MeasuredLoadCellA1, loadCellA1raw, 0, 0 ); DATA_DECL( U32, MeasuredLoadCellA2, loadCellA2raw, 0, 0 ); DATA_DECL( U32, MeasuredLoadCellB1, loadCellB1raw, 0, 0 ); DATA_DECL( U32, MeasuredLoadCellB2, loadCellB2raw, 0, 0 ); static F32 Load_cell_a1_ave; static F32 Load_cell_a2_ave; static F32 Load_cell_b1_ave; static F32 Load_cell_b2_ave; /*********************************************************************//** * @brief * The execLoadCell function gets load cell data from FPGA and advertises them over CAN. * @details * Inputs : none * Outputs : Advertising load call data. * @return none *************************************************************************/ void execLoadCell(void) { #ifdef DEBUG_ENABLED char debugStr[ 256 ]; #endif static U32 Counter = 0; static U32 Load_cell_a1 = 0; static U32 Load_cell_a2 = 0; static U32 Load_cell_b1 = 0; static U32 Load_cell_b2 = 0; BOOL result; loadCellA1raw.data = getFPGALoadCellA1() & 0x7FFFFFFF; // Temporary fix while FPGA code is being fixed loadCellA2raw.data = getFPGALoadCellA2(); loadCellB1raw.data = getFPGALoadCellB1(); loadCellB2raw.data = getFPGALoadCellB2(); Load_cell_a1 += getLoadCellA1raw(); Load_cell_a2 += getLoadCellA2raw(); Load_cell_b1 += getLoadCellB1raw(); Load_cell_b2 += getLoadCellB2raw(); Counter++; if (Counter == LOAD_CELL_REPORT_PERIOD) { Counter = 0; Load_cell_a1_ave = (F32)(Load_cell_a1)*ADC2GRAM; // division for averaging folded into ADC2GRAM Load_cell_a2_ave = (F32)(Load_cell_a2)*ADC2GRAM; Load_cell_b1_ave = (F32)(Load_cell_b1)*ADC2GRAM; Load_cell_b2_ave = (F32)(Load_cell_b2)*ADC2GRAM; result = broadcastLoadCellData( Load_cell_a1_ave, Load_cell_a2_ave, Load_cell_b1_ave, Load_cell_b2_ave ); #ifdef DEBUG_ENABLED if (result == FALSE) sprintf( debugStr, "Adding load cell data to CAN buffer failed" ); #else (void)result; #endif Load_cell_a1 = 0; Load_cell_a2 = 0; Load_cell_b1 = 0; Load_cell_b2 = 0; } } F32 getLoadCellA1Ave(void) { return Load_cell_a1_ave; } F32 getLoadCellA2Ave(void) { return Load_cell_a2_ave; } F32 getLoadCellB1Ave(void) { return Load_cell_b1_ave; } F32 getLoadCellB2Ave(void) { return Load_cell_b2_ave; } /************************************************************************* * @brief testSetLoadCellA1Override and testResetLoadCellA1Override * The testSetLoadCellA1Override function overrides the measured \n * load cell A1. \n * The testResetLoadCellA1Override function resets the override of the \n * load cell A1. \n * @details * Inputs : none * Outputs : loadCellA1raw * @param value : override measured load cell A1 raw * @return TRUE if override successful, FALSE if not *************************************************************************/ DATA_OVERRIDE_FUNC( U32, testSetLoadCellA1Override, testResetLoadCellA1Override, loadCellA1raw ) /************************************************************************* * @brief testSetLoadCellA2Override and testResetLoadCellA2Override * The testSetLoadCellA2Override function overrides the measured \n * load cell A2. \n * The testResetLoadCellA1Override function resets the override of the \n * load cell A2. \n * @details * Inputs : none * Outputs : loadCellA2raw * @param value : override measured load cell A2 raw * @return TRUE if override successful, FALSE if not *************************************************************************/ DATA_OVERRIDE_FUNC( U32, testSetLoadCellA2Override, testResetLoadCellA2Override, loadCellA2raw ) /************************************************************************* * @brief testSetLoadCellB1Override and testResetLoadCellB1Override * The testSetLoadCellB1Override function overrides the measured \n * load cell B1. \n * The testResetLoadCellB1Override function resets the override of the \n * load cell B1. \n * @details * Inputs : none * Outputs : loadCellB1raw * @param value : override measured load cell B1 raw * @return TRUE if override successful, FALSE if not *************************************************************************/ DATA_OVERRIDE_FUNC( U32, testSetLoadCellB1Override, testResetLoadCellB1Override, loadCellB1raw ) /************************************************************************* * @brief testSetLoadCellB2Override and testResetLoadCellB2Override * The testSetLoadCellB2Override function overrides the measured \n * load cell B2. \n * The testResetLoadCellB2Override function resets the override of the \n * load cell B2. \n * @details * Inputs : none * Outputs : loadCellB2raw * @param value : override measured load cell B2 raw * @return TRUE if override successful, FALSE if not *************************************************************************/ DATA_OVERRIDE_FUNC( U32, testSetLoadCellB2Override, testResetLoadCellB2Override, loadCellB2raw ) /************************************************************************* * @brief getLoadCellA1raw * The getLoadCellA1raw function gets the measured load cell A1 \n * current. * @details * Inputs : loadCellA1raw * Outputs : none * @param none * @return the load cell A1 raw value. *************************************************************************/ DATA_GET( U32, getLoadCellA1raw, loadCellA1raw ) /************************************************************************* * @brief getLoadCellA2raw * The getLoadCellA2raw function gets the measured load cell A2 \n * current. * @details * Inputs : loadCellA2raw * Outputs : none * @param none * @return the load cell A2 raw value. *************************************************************************/ DATA_GET( U32, getLoadCellA2raw, loadCellA2raw ) /************************************************************************* * @brief getLoadCellB1raw * The getLoadCellB1raw function gets the measured load cell B1 \n * current. * @details * Inputs : loadCellB1raw * Outputs : none * @param none * @return the load cell B1 raw value. *************************************************************************/ DATA_GET( U32, getLoadCellB1raw, loadCellB1raw ) /************************************************************************* * @brief getLoadCellB2raw * The getLoadCellB2raw function gets the measured load cell B2 \n * current. * @details * Inputs : loadCellB2raw * Outputs : none * @param none * @return the load cell B2 raw value. *************************************************************************/ DATA_GET( U32, getLoadCellB2raw, loadCellB2raw )