Index: firmware/App/Services/Messaging.c =================================================================== diff -u -ra9432a08fba2911e7cf8bc62b0238aa0fd261445 -r3f1b02b5eeec93b2b7ad22f8fffcf3caffaebbaf --- firmware/App/Services/Messaging.c (.../Messaging.c) (revision a9432a08fba2911e7cf8bc62b0238aa0fd261445) +++ firmware/App/Services/Messaging.c (.../Messaging.c) (revision 3f1b02b5eeec93b2b7ad22f8fffcf3caffaebbaf) @@ -20,22 +20,38 @@ #include "reg_system.h" #include "BalancingChamber.h" #include "BloodLeak.h" +#include "BoostPump.h" #include "Conductivity.h" #include "Compatible.h" #include "ConcentratePumps.h" #include "DialysatePumps.h" -#include "Heaters.h" +#include "Flow.h" +#include "FlowSensor.h" +#include "FluidPump.h" +#include "FlushConcentrate.h" +#include "FlushFilter.h" +#include "FlushPermeate.h" #include "FpgaDD.h" +#include "FPModeFault.h" +#include "FPModeInitPOST.h" +#include "FPModeStandby.h" +#include "FPOperationModes.h" +#include "Heaters.h" +#include "InletPressureCheck.h" #include "Level.h" #include "Messaging.h" #include "MessagePayloads.h" #include "ModeGenDialysate.h" +#include "ModeGenPermeate.h" #include "ModePreGenDialysate.h" +#include "ModePreGenPermeate.h" #include "ModePostGenDialysate.h" #include "ModeStandby.h" #include "OperationModes.h" #include "PAL.h" +#include "PermeateTank.h" #include "Pressure.h" +#include "ROPump.h" #include "SafetyShutdown.h" #include "SpentChamberFill.h" #include "SystemCommDD.h" @@ -45,8 +61,8 @@ #include "Utilities.h" #include "Ultrafiltration.h" #include "Valves.h" +#include "Voltages.h" - /** * @addtogroup Messaging * @{ @@ -71,18 +87,18 @@ COMM_BUFFER_NOT_USED, ///< CAN message boxes start at 1 so we will not use this buffer COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming TD alarm messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD alarm messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming RO alarm messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP alarm messages so no response buffer COMM_BUFFER_OUT_CAN_DD_ALARM, ///< Buffer for responding to incoming UI alarm messages COMM_BUFFER_OUT_CAN_DD_2_TD, ///< Buffer for responding to incoming TD to DD messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to TD messages so no response buffer - COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to RO messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_2_RO, ///< Buffer for responding to incoming RO to DD messages COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming TD broadcast messages COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD broadcast messages so no response buffer - COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming RO broadcast messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP broadcast messages so no response buffer COMM_BUFFER_OUT_CAN_DD_BROADCAST, ///< Buffer for responding to incoming UI broadcast messages - COMM_BUFFER_OUT_CAN_PC, ///< Buffer for responding to incoming PC to TD messages - COMM_BUFFER_NOT_USED, ///< Buffer for outgoing HD to PC messages so no response buffer + COMM_BUFFER_OUT_DD_CAN_PC, ///< Buffer for responding to incoming PC to DD messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing DD to PC messages so no response buffer + COMM_BUFFER_OUT_FP_CAN_PC, ///< Buffer for responding to incoming PC to FP messages + COMM_BUFFER_NOT_USED, ///< Buffer for outgoing FP to PC messages so no response buffer }; typedef BOOL (*MsgFuncPtr)( MESSAGE_T* ); @@ -102,29 +118,25 @@ { MSG_ID_DD_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testValvesStatesPublishIntervalOverride }, { MSG_ID_DD_VALVE_STATE_OVERRIDE_REQUEST, &testValveStateOverride }, { MSG_ID_DD_VALVE_SENSED_STATE_OVERRIDE_REQUEST, &testValveSensedStateOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_READINGS_OVERRIDE_REQUEST, &testPressureSensorReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testPressureSensorTemperatureReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testPressureSensorReadCounterOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testPressureSensorErrorCounterOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPressureSensorDataPublishIntervalOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testPressureSensorFilteredReadingsOverride }, - { MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testPressureSensorFilteredTemperatureReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, &testConductivitySensorReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testConductivitySensorTemperatureReadingsOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testConductivitySensorReadCounterOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testConductivitySensorErrorCounterOverride }, - { MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConductivitySensorDataPublishIntervalOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDPressureSensorReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDPressureSensorTemperatureReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDPressureSensorDataPublishIntervalOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testDDPressureSensorFilteredReadingsOverride }, + { MSG_ID_DD_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testDDPressureSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorTemperatureReadingsOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testDDConductivitySensorReadCounterOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_ERROR_COUNTER_OVERRIDE_REQUEST, &testDDConductivitySensorErrorCounterOverride }, + { MSG_ID_DD_CONDUCTIVITY_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDConductivitySensorDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testConcentratePumpDataPublishIntervalOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_TARGET_SPEED_OVERRIDE_REQUEST, &testConcentratePumpTargetSpeedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_MEASURED_SPEED_OVERRIDE_REQUEST, &testConcentratePumpMeasuredSpeedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARKED_OVERRIDE_REQUEST, &testConcentratePumpParkedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARK_FAULT_OVERRIDE_REQUEST, &testConcentratePumpParkCmdFaultedOverride }, { MSG_ID_DD_CONCENTRATE_PUMP_PARK_REQUEST_OVERRIDE_REQUEST, &testConcentratePumpParkRequestOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testTemperatureSensorsDataPublishIntervalOverride }, + { MSG_ID_DD_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDDTemperatureSensorsDataPublishIntervalOverride }, { MSG_ID_DD_TEMPERATURE_SENSOR_MEASURED_TEMPERATURE_OVERRIDE_REQUEST, &testMeasuredTemperatureOverride }, { MSG_ID_DD_TEMPERATURE_SENSOR_READ_COUNTER_OVERRIDE_REQUEST, &testTemperatureReadCounterOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_BARO_READ_COUNTER_OVERRIDE_REQUEST, &testBaroTemperatureReadCounterOverride }, - { MSG_ID_DD_TEMPERATURE_SENSOR_BARO_CRC_OVERRIDE_REQUEST, &testBaroTemperatureCRCOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testDialysatePumpsDataPublishIntervalOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_TARGET_SPEED_OVERRIDE_REQUEST, &testDialysatePumpTargetSpeedOverride }, { MSG_ID_DD_DIALYSATE_PUMPS_MEASURED_SPEED_OVERRIDE_REQUEST, &testDialysatePumpMeasuredSpeedOverride }, @@ -171,12 +183,59 @@ { MSG_ID_DD_BLOOD_LEAK_EMBEDDED_MODE_INFO_OVERRIDE_REQUEST, &testBloodLeakEmbeddedModeInfoOverride }, { MSG_ID_DD_BLOOD_LEAK_INTENSITY_MOVING_AVERAGE_OVERRIDE_REQUEST, &testBloodLeakIntensityMovingAverageOverride }, { MSG_ID_DD_BLOOD_LEAK_ZEROING_INTERVAL_IN_MS_OVERRIDE_REQUEST, &testBloodLeakZeroingIntervalInMillisecondsOverride }, - { MSG_ID_DD_SET_TEST_CONFIGURATION, &testSetTestConfiguration }, - { MSG_ID_DD_GET_TEST_CONFIGURATION, &testGetTestConfiguration }, - { MSG_ID_DD_RESET_ALL_TEST_CONFIGURATIONS, &testResetAllTestConfigurations }, - { MSG_ID_DD_BLOOD_LEAK_ZERO_REQUEST, &testBloodLeakZeroSequenceRequest } + { MSG_ID_DD_BLOOD_LEAK_ZERO_REQUEST, &testBloodLeakZeroSequenceRequest }, + { MSG_ID_DD_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredReadingsOverride }, + { MSG_ID_DD_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testDDConductivitySensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_TESTER_LOGIN_REQUEST, &handleTesterFPLogInRequest }, + { MSG_ID_FP_SET_OPERATION_MODE_REQUEST, &testSetFPOperationMode }, + { MSG_ID_FP_OPERATION_MODE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testSetFPOpModePublishIntervalOverride }, + { MSG_ID_FP_PRE_GEN_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPreGenDataPublishIntervalOverride }, + { MSG_ID_FP_INLET_PRES_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testInletPressureCheckDataPublishIntervalOverride }, + { MSG_ID_FP_INLET_PRES_CHECK_TIME_OVERRIDE_REQUEST, &testInletPressureCheckTimerOverride }, + { MSG_ID_FP_BOOST_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testBoostPumpDataPublishIntervalOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_PRESSURE_OVERRIDE_REQUEST, &testBoostPumpTargetPressureOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_FLOW_OVERRIDE_REQUEST, &testBoostPumpTargetFlowOverride }, + { MSG_ID_FP_BOOST_PUMP_TARGET_PWM_OVERRIDE_REQUEST, &testBoostPumpTargetDutyCycleOverride }, + { MSG_ID_FP_BOOST_PUMP_STOP_REQUEST, &testBoostPumpHardStop }, + { MSG_ID_FP_FLUID_PUMP_SET_PWM_REQUEST, &testSetFluidPumpPWM }, + { MSG_ID_FP_FLUID_PUMP_READ_PWM_OVERRIDE_REQUEST, &testFluidPumpPWMOverride }, + { MSG_ID_FP_FLUID_PUMP_SPEED_OVERRIDE_REQUEST, &testFluidPumpRPMOverride }, + { MSG_ID_FP_RO_PUMP_STOP_REQUEST, &testROPumpHardStop }, + { MSG_ID_FP_RO_PUMP_TARGET_PRESSURE_OVERRIDE_REQUEST, &testROPumpTargetPressureOverride }, + { MSG_ID_FP_RO_PUMP_TARGET_FLOW_OVERRIDE_REQUEST, &testROPumpTargetFlowOverride }, + { MSG_ID_FP_RO_PUMP_TARGET_PWM_OVERRIDE_REQUEST, &testROPumpTargetDutyCycleOverride }, + { MSG_ID_FP_PRESSURE_OVERRIDE_REQUEST, &testIOFPPressureSensorReadingsOverride }, + { MSG_ID_FP_PRESSURE_TEMP_OVERRIDE_REQUEST, &testIOFPPressureSensorTemperatureReadingsOverride }, + { MSG_ID_FP_PRESSURE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPPressureSensorDataPublishIntervalOverride }, + { MSG_ID_FP_PRESSURE_SENSOR_FILTER_READINGS_OVERRIDE_REQUEST, &testIOFPPressureSensorFilteredReadingsOverride }, + { MSG_ID_FP_PRESSURE_SENSOR_FILTER_TEMPERATURE_OVERRIDE_REQUEST, &testIOFPPressureSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_TEMPERATURE_SENSOR_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPTemperatureSensorsDataPublishIntervalOverride }, + { MSG_ID_FP_VALVE_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testIOFPValvesStatesPublishIntervalOverride }, + { MSG_ID_FP_VALVE_CMD_STATE_OVERRIDE_REQUEST, &testIOFPValveStateOverride }, + { MSG_ID_FP_VALVE_SENSED_STATE_OVERRIDE_REQUEST, &testIOFPValveSensedStateOverride }, + { MSG_ID_FP_FLOWS_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFlowSensorDataPublishIntervalOverride }, + { MSG_ID_FP_FLOW_RATE_OVERRIDE_REQUEST, &testFlowSensorReadingsOverride }, + { MSG_ID_FP_FLOW_TEMP_OVERRIDE_REQUEST, &testFlowSensorTemperatureReadingsOverride }, + { MSG_ID_FP_FILTERED_FLOW_RATE_OVERRIDE_REQUEST, &testFlowSensorFilteredReadingsOverride }, + { MSG_ID_FP_FILTERED_FLOW_TEMP_OVERRIDE_REQUEST, &testFlowSensorFilteredTemperatureReadingsOverride }, + { MSG_ID_FP_ALARM_STATE_OVERRIDE_REQUEST, &testAlarmStateOverride }, + { MSG_ID_FP_ALARM_CLEAR_ALL_ALARMS_REQUEST, &testFPClearAllAlarms }, + { MSG_ID_FP_CONDUCTIVITY_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPConductivitySensorDataPublishIntervalOverride }, + { MSG_ID_FP_CONDUCTIVITY_OVERRIDE_REQUEST, &testFPConductivitySensorReadingsOverride }, + { MSG_ID_FP_CONDUCTIVITY_TEMP_OVERRIDE_REQUEST, &testFPConductivitySensorTemperatureReadingsOverride }, + { MSG_ID_FP_CONDUCTIVITY_READ_COUNT_OVERRIDE_REQUEST, &testFPConductivitySensorReadCounterOverride }, + { MSG_ID_FP_CONDUCTIVITY_ERROR_COUNT_OVERRIDE_REQUEST, &testFPConductivitySensorErrorCounterOverride }, + { MSG_ID_FP_FILTERED_COND_SENSOR_READINGS_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredReadingsOverride }, + { MSG_ID_FP_FILTERED_COND_SENSOR_TEMPERATURE_OVERRIDE_REQUEST, &testFPConductivitySensorFilteredTemperatureReadingsOverride }, + { MSG_ID_DD_VOLTAGE_DATA_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testVoltageDataPublishIntervalOverride }, + { MSG_ID_DD_MONITORED_VOLTAGE_OVERRIDE_REQUEST, &testVoltageOverride }, + { MSG_ID_FP_LEVEL_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testFPLevelsDataPublishIntervalOverride }, + { MSG_ID_FP_LEVEL_OVERRIDE_REQUEST, &testFPLevelStateOverride }, + { MSG_ID_FP_PERMEATE_TANK_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testPermeateTankDataPublishIntervalOverride }, + { MSG_ID_FP_RO_PUMP_PUBLISH_INTERVAL_OVERRIDE_REQUEST, &testROPumpDataPublishIntervalOverride }, }; +/// Calculation for number of entries in the incoming message function handler look-up table. #define NUM_OF_FUNCTION_HANDLERS (sizeof(MSG_FUNCTION_HANDLER_LOOKUP) / sizeof(MSG_HANDLER_LOOKUP_T)) // ********** private data ********** @@ -377,6 +436,7 @@ // if Dialin message, ensure Dialin is logged in before processing it if ( ( message->hdr.msgID < MSG_ID_FIRST_TD_TESTER_MESSAGE ) || ( MSG_ID_FIRST_DD_TESTER_MESSAGE == message->hdr.msgID ) || + ( MSG_ID_FIRST_FP_TESTER_MESSAGE == message->hdr.msgID ) || ( TRUE == isTestingActivated() ) ) { MsgFuncPtr msgFuncPtr; @@ -432,14 +492,29 @@ // Create a message record blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DD_EVENT; + if ( ( event >= FP_EVENT_FIRST ) && ( event <= FP_EVENT_LAST ) ) + { + msg.hdr.msgID = MSG_ID_FP_EVENT; + } + else + { + msg.hdr.msgID = MSG_ID_DD_EVENT; + } + msg.hdr.payloadLen = sizeof( EVENT_PAYLOAD_T ); memcpy( &msg.payload, &eventStruct, sizeof( EVENT_PAYLOAD_T ) ); // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer // TODO : validate the change , DD -> UI channel removed and added DD broadcast instead. - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_BROADCAST, ACK_NOT_REQUIRED ); + if ( msg.hdr.msgID == MSG_ID_FP_EVENT ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_BROADCAST, ACK_NOT_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_BROADCAST, ACK_NOT_REQUIRED ); + } return result; } @@ -455,7 +530,7 @@ * @param almData2 2nd data associated with alarm * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmTriggered( U32 alarm, ALARM_DATA_T almData1, ALARM_DATA_T almData2 ) +BOOL broadcastAlarmTriggered( U32 alarm, ALARM_DATA_T almData1, ALARM_DATA_T almData2, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -485,7 +560,14 @@ memset( payloadPtr, 0, sizeof( U32) * 3 ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -499,7 +581,7 @@ * @param alarm ID of alarm cleared * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmCleared( U32 alarm ) +BOOL broadcastAlarmCleared( U32 alarm, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -513,7 +595,14 @@ memcpy( payloadPtr, &alarm, sizeof( U32 ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -528,7 +617,7 @@ * @param alarm ID of alarm which alarm condition is cleared * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastAlarmConditionCleared( U32 alarm ) +BOOL broadcastAlarmConditionCleared( U32 alarm, ALARM_SOURCE_T almSource ) { BOOL result; MESSAGE_T msg; @@ -542,7 +631,14 @@ memcpy( payloadPtr, &alarm, sizeof( U32 ) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + if ( ALM_SRC_FP == almSource ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_FP_ALARM, ACK_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DD_ALARM, ACK_REQUIRED ); + } return result; } @@ -672,7 +768,15 @@ msg.payload[ 0 ] = (U08)ack; // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer - result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_PC, ACK_NOT_REQUIRED ); + // check msgID to determine what channel to use and default to DD's channels + if( ( MSG_ID_FIRST_FP_TESTER_MESSAGE <= msgID ) && ( MSG_ID_TD_DEBUG_EVENT > msgID ) ) + { + result = serializeMessage( msg, COMM_BUFFER_OUT_FP_CAN_PC, ACK_NOT_REQUIRED ); + } + else + { + result = serializeMessage( msg, COMM_BUFFER_OUT_DD_CAN_PC, ACK_NOT_REQUIRED ); + } return result; } @@ -705,6 +809,32 @@ /*********************************************************************//** * @brief + * The handleTesterFPLogInRequest function handles a request to login as a tester. + * @details \b Inputs: none + * @details \b Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +BOOL handleTesterFPLogInRequest( MESSAGE_T *message ) +{ + // verify pass code + // TODO - placeholder - how do we want to authenticate tester? + if ( ( 3 == message->hdr.payloadLen ) && ( 0x31 == message->payload[ 0 ] ) && ( 0x32 == message->payload[ 1 ] ) && ( 0x33 == message->payload[ 2 ] ) ) + { + testerLoggedIn = TRUE; + // The user logged in, so the set the dialin expiration date until the first check in from dialin is received + setDialinCheckInTimeStamp(); + } + else + { + testerLoggedIn = FALSE; + } + + return testerLoggedIn; +} + +/*********************************************************************//** + * @brief * The handleTDSoftwareResetRequest function handles a request to reset the * TD firmware processor. * @details \b Inputs: none