Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rc5e1315bfeb11335f66f7439e00857f26649e25b -r73113d51d6ca20fd4e34d69d241fbb18bb70dc1e --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision c5e1315bfeb11335f66f7439e00857f26649e25b) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 73113d51d6ca20fd4e34d69d241fbb18bb70dc1e) @@ -16,14 +16,16 @@ ***************************************************************************/ #include // for memcpy() - + +#include "Accel.h" #include "DrainPump.h" #include "FPGA.h" #include "Heaters.h" #include "LoadCell.h" -#include "MsgQueues.h" +#include "MessagePayloads.h" #include "ModeStandby.h" #include "ModeRecirculate.h" +#include "MsgQueues.h" #include "OperationModes.h" #include "Pressures.h" #include "Reservoirs.h" @@ -45,88 +47,7 @@ #ifdef DEBUG_ENABLED #define DEBUG_EVENT_MAX_TEXT_LEN 40 #endif - -#pragma pack(push,1) -typedef struct -{ - U32 alarmState; // 0 = no alarms, 1 = low priority, 2 = medium priority, 3 = high priority - U32 alarmTop; // ID of top active alarm - U32 escalatesIn; // seconds - U32 silenceExpiresIn; // seconds - U16 alarmsFlags; // bit flags: 1 = true, 0 = false for each bit -} ALARM_COMP_STATUS_PAYLOAD_T; - -typedef struct -{ - U08 major; - U08 minor; - U08 micro; - U16 build; - U08 fpgaId; - U08 fpgaMajor; - U08 fpgaMinor; - U08 fpgaLab; -} DG_VERSIONS_T; - -typedef struct -{ - U32 treatmentTimePrescribedinSec; - U32 treatmentTimeElapsedinSec; - U32 treatmentTimeRemaininginSec; -} TREATMENT_TIME_DATA_T; - -typedef struct -{ - F32 loadCellA1inGram; - F32 loadCellA2inGram; - F32 loadCellB1inGram; - F32 loadCellB2inGram; -} LOAD_CELL_DATA_T; - -typedef struct -{ - U32 setROPumpPressure; - F32 measROFlowRate; - F32 roPumpPWM; -} RO_PUMP_DATA_T; - -typedef struct -{ - U32 setDrainPumpSpeed; - U32 dacValue; -} DRAIN_PUMP_DATA_T; - -typedef struct -{ - F32 roPumpInletPressure; - F32 roPumpOutletPressure; - F32 drainPumpInletPressure; - F32 drainPumpOutletPressure; -} PRESSURES_DATA_T; - -typedef struct -{ - U32 activeReservoir; - U32 fillToVolumeMl; - U32 drainToVolumeMl; -} RESERVOIR_DATA_T; - -typedef struct -{ - F32 targetPrimaryHeaterTemp; - F32 targetTrimmerHeaterTemp; -} TARGET_TEMPS_PAYLOAD_T; - -typedef struct -{ - U32 mainPrimayHeaterDC; - U32 smallPrimaryHeaterDC; - U32 trimmerHeaterDC; -} HEATERS_DATA_T; - -#pragma pack(pop) - // ********** private data ********** static BOOL testerLoggedIn = FALSE; @@ -349,6 +270,53 @@ return result; } +/************************************************************************* + * @brief + * The broadcastAccelData function constructs an accelerometer data msg to \n + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : accelerometer data broadcast msg constructed and queued. + * @param x : X axis vector magnitude (in g) + * @param y : Y axis vector magnitude (in g) + * @param z : Z axis vector magnitude (in g) + * @param xm : max X axis vector magnitude (in g) + * @param ym : max Y axis vector magnitude (in g) + * @param zm : max Z axis vector magnitude (in g) + * @param xt : X axis tilt (in degrees) + * @param yt : Y axis tilt (in degrees) + * @param zt : Z axis tilt (in degrees) + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastAccelData( F32 x, F32 y, F32 z, F32 xm, F32 ym, F32 zm, F32 xt, F32 yt, F32 zt ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + HD_ACCEL_DATA_PAYLOAD_T payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_ACCELEROMETER_DATA; + msg.hdr.payloadLen = sizeof( HD_ACCEL_DATA_PAYLOAD_T ); + payload.x = x; + payload.y = y; + payload.z = z; + payload.xMax = xm; + payload.yMax = ym; + payload.zMax = zm; + payload.xTilt = xt; + payload.yTilt = yt; + payload.zTilt = zt; + + memcpy( payloadPtr, &payload, sizeof( MSG_ID_DG_ACCELEROMETER_DATA ) ); + + // 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_DG_BROADCAST, ACK_NOT_REQUIRED ); + + return result; +} + /************************************************************************* * @brief broadcastRTCEpoch * The broadcastRTCEpoch function constructs an epoch msg to \n @@ -1314,3 +1282,65 @@ * @return none *************************************************************************/ DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleTestDGSafetyShutdownOverrideRequest, testSetSafetyShutdownOverride, testResetSafetyShutdownOverride ) + +/************************************************************************* + * @brief + * The handleTestDGAccelOverrideRequest function handles a request to \n + * override the measured accelerometer sensor readings. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_ARRAY_OVERRIDE_HANDLER_FUNC_F32( F32, handleTestDGAccelOverrideRequest, testSetAccelAxisOverride, testResetAccelAxisOverride ) + +/************************************************************************* + * @brief + * The handleTestDGAccelMaxOverrideRequest function handles a request to \n + * override the measured accelerometer sensor maximum readings. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_ARRAY_OVERRIDE_HANDLER_FUNC_F32( F32, handleTestDGAccelMaxOverrideRequest, testSetAccelMaxOverride, testResetAccelMaxOverride ) + +/************************************************************************* + * @brief + * The handleTestDGAccelBroadcastIntervalOverrideRequest function handles a \n + * request to override the broadcast interval for accelerometer data messages. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC_U32( U32, handleTestDGAccelBroadcastIntervalOverrideRequest, testSetAccelDataPublishIntervalOverride, testResetAccelDataPublishIntervalOverride ) + +/************************************************************************* + * @brief + * The handleSetAccelCalibration function handles a request to set + * accelerometer calibration factors. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSetAccelCalibration( MESSAGE_T *message ) +{ + BOOL result; + + if ( message->hdr.payloadLen == sizeof(ACCEL_CAL_PAYLOAD_T) ) + { + ACCEL_CAL_PAYLOAD_T payload; + + memcpy( &payload, message->payload, sizeof(ACCEL_CAL_PAYLOAD_T) ); + result = setAccelCalibration( payload.xOffset, payload.yOffset, payload.zOffset ); + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +}