
/** \file
 *  \brief This file contains definitions and prototypes for messaging using inter-processor
 *         communication (IPC).
 */

#ifndef COMM_IPC_MESSAGES_H
#define COMM_IPC_MESSAGES_H

#ifdef __cplusplus
extern "C" {
#endif

/* Include Files */

/* Preprocessor and Type Definitions */

typedef enum
{
    //! This is not an actual message.  Upon receipt, do nothing.
    COMM_SMM_DefaultNoMessage = 0,
    //! Reboot the system immediately upon receipt of this message (Data is "don't care").
    COMM_SMM_RebootImmediately,
    //! This is not an actual message.  Upon receipt, do nothing.
    COMM_SMM_NoMessage = 0xFFFFFFFF,
} COMM_IPCMessageID_T;

typedef struct
{
    //! The client ID number is the index into the callback array.
    uint32_t ClientID;
    //! The message ID represents the meaning of the message being sent.
    COMM_IPCMessageID_T MessageID;
    //! The contents of Data are different for each message ID.  See #COMM_IPCMessageID_T for more details.
    void * Data; 
} COMM_IPCMessage_T;

/* Public Variables */

/* Public Functions */

void COMM_InitIPCMessages(void);
bool COMM_SendMessageToOtherCore(COMM_IPCMessageID_T message_ID, void * message_data);

#ifdef __cplusplus
}
#endif

#endif // COMM_IPC_MESSAGES_H
