Index: firmware/App/Monitors/Pressure.c =================================================================== diff -u -re0102a0a08c0d83bcc8e959551079063e2e60d9f -raeffb83507735fc1c84773e868e20ac7aeb60afc --- firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision e0102a0a08c0d83bcc8e959551079063e2e60d9f) +++ firmware/App/Monitors/Pressure.c (.../Pressure.c) (revision aeffb83507735fc1c84773e868e20ac7aeb60afc) @@ -86,9 +86,10 @@ static FILTER_PRESSURE_READINGS_T filteredPressureReadings[NUM_OF_PRESSURE_SENSORS]; ///< Filtered pressure reading for pressure sensors. static FILTER_PRESSURE_TEMPERATURE_READINGS_T filteredPressureTempReadings[NUM_OF_PRESSURE_SENSORS]; ///< Filtered pressure reading for pressure sensors. static PRESSURE_STATE_T pressuresState; ///< current state of pressure monitor state machine. -static U32 pressuresDataPublicationTimerCounter; ///< used to schedule pressure data publication to CAN bus. -static OVERRIDE_U32_T pressuresDataPublishInterval = { PRESSURES_DATA_PUB_INTERVAL, - PRESSURES_DATA_PUB_INTERVAL, 0, 0 }; ///< Pressure data publish interval. +static U32 ddPressuresDataPublicationTimerCounter; ///< used to schedule DD pressure data publication to CAN bus. +static U32 fpPressuresDataPublicationTimerCounter; ///< used to schedule FP pressure data publication to CAN bus. +static OVERRIDE_U32_T ddPressuresDataPublishInterval; ///< DD Pressure data publish interval. +static OVERRIDE_U32_T fpPressuresDataPublishInterval; ///< FP Pressure data publish interval. // ********** private function prototypes ********** @@ -98,7 +99,8 @@ static F32 getConvertedPressure( PRESSURE_SENSORS_T sensor, F32 pressure ); static PRESSURE_STATE_T handlePressuresInitState( void ); static PRESSURE_STATE_T handlePressuresContReadState( void ); -static void publishPressuresData( void ); +static void publishDDPressuresData( void ); +static void publishFPPressuresData( void ); /*********************************************************************//** * @brief @@ -112,12 +114,13 @@ U32 i; pressuresState = PRESSURE_INIT_STATE; - pressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + ddPressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; + fpPressuresDataPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; initPressureSensor(); // Initialize override structures for each pressure sensor - for ( i = (U32)PRESSURE_SENSOR_FIRST; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) + for ( i = (U32)FIRST_DD_PRESSURE_SENSOR; i < (U32)NUM_OF_PRESSURE_SENSORS; i++ ) { filteredcurrentPressureReadings[ i ].data = 0.0F; filteredcurrentPressureReadings[ i ].ovData = 0.0F; @@ -137,6 +140,16 @@ filteredPressureTempReadings[i].pressureTempReadingsIdx = 0; filteredPressureTempReadings[i].pressureTempReadingsTotal = 0.0F; } + + ddPressuresDataPublishInterval.data = PRESSURES_DATA_PUB_INTERVAL; + ddPressuresDataPublishInterval.ovData = PRESSURES_DATA_PUB_INTERVAL; + ddPressuresDataPublishInterval.ovInitData = 0; + ddPressuresDataPublishInterval.override = OVERRIDE_RESET; + + fpPressuresDataPublishInterval.data = PRESSURES_DATA_PUB_INTERVAL; + fpPressuresDataPublishInterval.ovData = PRESSURES_DATA_PUB_INTERVAL; + fpPressuresDataPublishInterval.ovInitData = 0; + fpPressuresDataPublishInterval.override = OVERRIDE_RESET; } /*********************************************************************//** @@ -247,7 +260,8 @@ } // publish pressure/occlusion data on interval - publishPressuresData(); + publishDDPressuresData(); + publishFPPressuresData(); } /*********************************************************************//** @@ -260,22 +274,22 @@ *************************************************************************/ static void filterPressureSensorReadings( void ) { - PRESSURE_SENSORS_T i; + PRESSURE_SENSORS_T sensor; - for ( i = PRESSURE_SENSOR_FIRST; i < NUM_OF_PRESSURE_SENSORS; i++ ) + for ( sensor = FIRST_DD_PRESSURE_SENSOR; sensor < NUM_OF_PRESSURE_SENSORS; sensor++ ) { - F32 pressureinPSI = getPressure( i ); - F32 pressure = getConvertedPressure( i, pressureinPSI ); + F32 pressureinPSI = getPressure( sensor ); + F32 pressure = getConvertedPressure( sensor, pressureinPSI ); - if ( filteredPressureReadings[i].pressureReadingsCount >= SIZE_OF_PRESSURE_ROLLING_AVG ) + if ( filteredPressureReadings[sensor].pressureReadingsCount >= SIZE_OF_PRESSURE_ROLLING_AVG ) { - filteredPressureReadings[i].pressureReadingsTotal -= filteredPressureReadings[i].pressureReadings[ filteredPressureReadings[i].pressureReadingsIdx ]; + filteredPressureReadings[sensor].pressureReadingsTotal -= filteredPressureReadings[sensor].pressureReadings[ filteredPressureReadings[sensor].pressureReadingsIdx ]; } - filteredPressureReadings[i].pressureReadings[ filteredPressureReadings[i].pressureReadingsIdx ] = pressure; - filteredPressureReadings[i].pressureReadingsTotal += pressure; - filteredPressureReadings[i].pressureReadingsIdx = INC_WRAP( filteredPressureReadings[i].pressureReadingsIdx, 0, SIZE_OF_PRESSURE_ROLLING_AVG - 1 ); - filteredPressureReadings[i].pressureReadingsCount = INC_CAP( filteredPressureReadings[i].pressureReadingsCount, SIZE_OF_PRESSURE_ROLLING_AVG ); - filteredcurrentPressureReadings[i].data = filteredPressureReadings[i].pressureReadingsTotal / (F32)filteredPressureReadings[i].pressureReadingsCount; + filteredPressureReadings[sensor].pressureReadings[ filteredPressureReadings[sensor].pressureReadingsIdx ] = pressure; + filteredPressureReadings[sensor].pressureReadingsTotal += pressure; + filteredPressureReadings[sensor].pressureReadingsIdx = INC_WRAP( filteredPressureReadings[sensor].pressureReadingsIdx, 0, SIZE_OF_PRESSURE_ROLLING_AVG - 1 ); + filteredPressureReadings[sensor].pressureReadingsCount = INC_CAP( filteredPressureReadings[sensor].pressureReadingsCount, SIZE_OF_PRESSURE_ROLLING_AVG ); + filteredcurrentPressureReadings[sensor].data = filteredPressureReadings[sensor].pressureReadingsTotal / (F32)filteredPressureReadings[sensor].pressureReadingsCount; } } @@ -289,24 +303,25 @@ *************************************************************************/ static void filterPressureSensorTemperatureReadings( void ) { - PRESSURE_SENSORS_T i; + PRESSURE_SENSORS_T sensor; - for ( i = PRESSURE_SENSOR_FIRST; i < NUM_OF_PRESSURE_SENSORS; i++ ) + for ( sensor = FIRST_DD_PRESSURE_SENSOR; sensor < NUM_OF_PRESSURE_SENSORS; sensor++ ) { - F32 pressureTemperature = getPressureSensorTemperature( i ); + F32 pressureTemperature = getPressureSensorTemperature( sensor ); - if ( filteredPressureTempReadings[i].pressureTempReadingsCount >= SIZE_OF_PRESSURETEMP_ROLLING_AVG ) + if ( filteredPressureTempReadings[sensor].pressureTempReadingsCount >= SIZE_OF_PRESSURETEMP_ROLLING_AVG ) { - filteredPressureTempReadings[i].pressureTempReadingsTotal -= filteredPressureTempReadings[i].pressureTempReadings[ filteredPressureTempReadings[i].pressureTempReadingsIdx ]; + filteredPressureTempReadings[sensor].pressureTempReadingsTotal -= filteredPressureTempReadings[sensor].pressureTempReadings[ filteredPressureTempReadings[sensor].pressureTempReadingsIdx ]; } - filteredPressureTempReadings[i].pressureTempReadings[ filteredPressureTempReadings[i].pressureTempReadingsIdx ] = pressureTemperature; - filteredPressureTempReadings[i].pressureTempReadingsTotal += pressureTemperature; - filteredPressureTempReadings[i].pressureTempReadingsIdx = INC_WRAP( filteredPressureTempReadings[i].pressureTempReadingsIdx, 0, SIZE_OF_PRESSURETEMP_ROLLING_AVG - 1 ); - filteredPressureTempReadings[i].pressureTempReadingsCount = INC_CAP( filteredPressureTempReadings[i].pressureTempReadingsCount, SIZE_OF_PRESSURETEMP_ROLLING_AVG ); - filteredcurrentPresTempReadings[i].data = filteredPressureTempReadings[i].pressureTempReadingsTotal / (F32)filteredPressureTempReadings[i].pressureTempReadingsCount; + filteredPressureTempReadings[sensor].pressureTempReadings[ filteredPressureTempReadings[sensor].pressureTempReadingsIdx ] = pressureTemperature; + filteredPressureTempReadings[sensor].pressureTempReadingsTotal += pressureTemperature; + filteredPressureTempReadings[sensor].pressureTempReadingsIdx = INC_WRAP( filteredPressureTempReadings[sensor].pressureTempReadingsIdx, 0, SIZE_OF_PRESSURETEMP_ROLLING_AVG - 1 ); + filteredPressureTempReadings[sensor].pressureTempReadingsCount = INC_CAP( filteredPressureTempReadings[sensor].pressureTempReadingsCount, SIZE_OF_PRESSURETEMP_ROLLING_AVG ); + filteredcurrentPresTempReadings[sensor].data = filteredPressureTempReadings[sensor].pressureTempReadingsTotal / (F32)filteredPressureTempReadings[sensor].pressureTempReadingsCount; } } +// ToDo decide once BARO sensor location is finalized /*********************************************************************//** * @brief * The getConvertedPressure function converts the pressure in PSI unit and @@ -319,7 +334,7 @@ *************************************************************************/ static F32 getConvertedPressure( PRESSURE_SENSORS_T sensor, F32 pressure ) { - F32 baroPressurePSI = getPressure( BARO_PRES ) * MMHG_TO_PSI_CONVERSION; +// F32 baroPressurePSI = getPressure( BARO_PRES ) * MMHG_TO_PSI_CONVERSION; // calibrated pressure //F32 calPressure = getCalibrationAppliedPressure( sensor, pressure ); @@ -383,64 +398,108 @@ /*********************************************************************//** * @brief - * The publishPressuresData function publishes DD pressures data at a set interval. - * @details \b Inputs: pressuresDataPublicationTimerCounter - * @details \b Outputs: pressuresDataPublicationTimerCounter + * The publishDDPressuresData function publishes DD pressures data at a set interval. + * @details \b Inputs: ddPressuresDataPublicationTimerCounter + * @details \b Outputs: ddPressuresDataPublicationTimerCounter * @details \b Message \b Sent: MSG_ID_DD_PRESSURES_DATA to publish pressure data. * @return none *************************************************************************/ -static void publishPressuresData( void ) +static void publishDDPressuresData( void ) { // publish pressure/occlusion data on interval - if ( ++pressuresDataPublicationTimerCounter >= getU32OverrideValue( &pressuresDataPublishInterval ) ) + if ( ++ddPressuresDataPublicationTimerCounter >= getU32OverrideValue( &ddPressuresDataPublishInterval ) ) { - PRESSURE_TEMP_DATA_T data; + PRESSURE_DD_TEMP_DATA_T data; - data.m1Pressure = getFilteredPressure( M1_PRES ); - data.m3Pressure = getFilteredPressure( M3_PRES ); data.d9Pressure = getFilteredPressure( D9_PRES ); data.d66Pressure = getFilteredPressure( D66_PRES ); data.d51Pressure = getFilteredPressure( D51_PRES ); data.d18Pressure = getFilteredPressure( D18_PRES ); data.d41Pressure = getFilteredPressure( D41_PRES ); - data.m1PresTemp = getFilteredPressureSensorTemperature( M1_PRES ); - data.m3PresTemp = getFilteredPressureSensorTemperature( M3_PRES ); data.d9PresTemp = getFilteredPressureSensorTemperature( D9_PRES ); data.d66PresTemp = getFilteredPressureSensorTemperature( D66_PRES ); data.d51PresTemp = getFilteredPressureSensorTemperature( D51_PRES ); data.d18PresTemp = getFilteredPressureSensorTemperature( D18_PRES ); data.d41PresTemp = getFilteredPressureSensorTemperature( D41_PRES ); - pressuresDataPublicationTimerCounter = 0; + ddPressuresDataPublicationTimerCounter = 0; - broadcastData( MSG_ID_DD_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( PRESSURE_TEMP_DATA_T ) ); + broadcastData( MSG_ID_DD_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&data, sizeof( PRESSURE_DD_TEMP_DATA_T ) ); } } +/*********************************************************************//** + * @brief + * The publishFPPressuresData function publishes FP pressures data at a set interval. + * @details \b Inputs: fpPressuresDataPublicationTimerCounter + * @details \b Outputs: fpPressuresDataPublicationTimerCounter + * @details \b Message \b Sent: MSG_ID_FP_PRESSURES_DATA to publish pressure data. + * @return none + *************************************************************************/ +static void publishFPPressuresData( void ) +{ + // publish pressure/occlusion data on interval + if ( ++fpPressuresDataPublicationTimerCounter >= getU32OverrideValue( &fpPressuresDataPublishInterval ) ) + { + PRESSURE_FP_TEMP_DATA_T data; + data.m1Pressure = getFilteredPressure( M1_PRES ); + data.m3Pressure = getFilteredPressure( M3_PRES ); + data.p8Pressure = getFilteredPressure( P8_PRES ); + data.p13Pressure = getFilteredPressure( P13_PRES ); + data.p17Pressure = getFilteredPressure( P17_PRES ); + data.m1PresTemp = getFilteredPressureSensorTemperature( M1_PRES ); + data.m3PresTemp = getFilteredPressureSensorTemperature( M3_PRES ); + data.p8PresTemp = getFilteredPressureSensorTemperature( P8_PRES ); + data.p13PresTemp = getFilteredPressureSensorTemperature( P13_PRES ); + data.p17PresTemp = getFilteredPressureSensorTemperature( P17_PRES ); + + broadcastData( MSG_ID_FP_PRESSURES_DATA, COMM_BUFFER_OUT_CAN_FP_BROADCAST, (U08*)&data, sizeof( PRESSURE_FP_TEMP_DATA_T ) ); + fpPressuresDataPublicationTimerCounter = 0; + } +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ /*********************************************************************//** * @brief - * The testPressureSensorDataPublishIntervalOverride function overrides the - * pressure sensor data publish interval. + * The testDDPressureSensorDataPublishIntervalOverride function overrides the + * DD pressure sensor data publish interval. * @details \b Inputs: none - * @details \b Outputs: pressuresDataPublishInterval + * @details \b Outputs: ddPressuresDataPublishInterval * @param message Override message from Dialin which includes the value - * that override valves states publish interval with (in ms) + * that override DD pressure data publish interval with (in ms) * @return TRUE if override successful, FALSE if not *************************************************************************/ -BOOL testPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ) +BOOL testDDPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ) { - BOOL result = u32BroadcastIntervalOverride( message, &pressuresDataPublishInterval, TASK_PRIORITY_INTERVAL ); + BOOL result = u32BroadcastIntervalOverride( message, &ddPressuresDataPublishInterval, TASK_PRIORITY_INTERVAL ); return result; } /*********************************************************************//** * @brief + * The testFPPressureSensorDataPublishIntervalOverride function overrides the + * FP pressure sensor data publish interval. + * @details \b Inputs: none + * @details \b Outputs: fpPressuresDataPublishInterval + * @param message Override message from Dialin which includes the value + * that override FP pressure data publish interval with (in ms) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testFPPressureSensorDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &fpPressuresDataPublishInterval, TASK_PRIORITY_INTERVAL ); + + return result; +} + +/*********************************************************************//** + * @brief * The testPressureSensorFilteredReadingsOverride function overrides the * filtered value of the specified pressure sensor with a given value. * @details \b Inputs: none @@ -451,7 +510,7 @@ *************************************************************************/ BOOL testPressureSensorFilteredReadingsOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, &filteredcurrentPressureReadings[0], NUM_OF_PRESSURE_SENSORS - 1 ); + BOOL result = f32ArrayOverride( message, &filteredcurrentPressureReadings[0], LAST_DD_PRESSURE_SENSOR ); return result; } @@ -468,7 +527,7 @@ *************************************************************************/ BOOL testPressureSensorFilteredTemperatureReadingsOverride( MESSAGE_T *message ) { - BOOL result = f32ArrayOverride( message, &filteredcurrentPresTempReadings[0], NUM_OF_PRESSURE_SENSORS - 1 ); + BOOL result = f32ArrayOverride( message, &filteredcurrentPresTempReadings[0], LAST_DD_PRESSURE_SENSOR ); return result; }