/**
	sendMessage_priv.h

	This file automatically generated by FSMLang
*/

#ifndef _SENDMESSAGE_PRIV_H_
#define _SENDMESSAGE_PRIV_H_

#include "hsmCommunicator_submach.h"
#include "hsmCommunicator.h"

#ifdef SEND_MESSAGE_DEBUG
#include <stdio.h>
#include <stdlib.h>
#endif

/*
	sub-machine events are included in the top-level machine event enumeration.
	These macros set the appropriate names for events from THIS machine
	and those from the PARENT machine.

	They may be turned off as needed.
*/
#ifndef NO_EVENT_CONVENIENCE_MACROS
#undef UFMN
#define UFMN(A) hsmCommunicator_sendMessage_##A
#undef THIS
#define THIS(A) hsmCommunicator_sendMessage_##A
#undef PARENT
#define PARENT(A) hsmCommunicator_##A
#endif

#ifdef SEND_MESSAGE_DEBUG
extern char *SEND_MESSAGE_EVENT_NAMES[];
extern char *SEND_MESSAGE_STATE_NAMES[];
#endif

typedef enum {
	sendMessage_IDLE
	, sendMessage_IN_SESSION
	, sendMessage_AWAITING_ACK
	, sendMessage_numStates
}  SEND_MESSAGE_STATE;

typedef struct _sendMessage_struct_ SEND_MESSAGE, *pSEND_MESSAGE;
#undef FSM_TYPE_PTR
#define FSM_TYPE_PTR pSEND_MESSAGE
extern SEND_MESSAGE sendMessage;

extern pSEND_MESSAGE psendMessage;

typedef HSM_COMMUNICATOR_EVENT (*SEND_MESSAGE_ACTION_FN)(FSM_TYPE_PTR);

typedef HSM_COMMUNICATOR_EVENT (*SEND_MESSAGE_FSM)(FSM_TYPE_PTR,HSM_COMMUNICATOR_EVENT);

typedef ACTION_RETURN_TYPE (*SEND_MESSAGE_STATE_FN)(pSEND_MESSAGE,HSM_COMMUNICATOR_EVENT);

static const SEND_MESSAGE_STATE_FN sendMessage_state_fn_array[sendMessage_numStates];

struct _sendMessage_struct_ {
	SEND_MESSAGE_STATE           state;
	HSM_COMMUNICATOR_EVENT       event;
	SEND_MESSAGE_STATE_FN  const (*statesArray)[sendMessage_numStates];
	SEND_MESSAGE_FSM             fsm;
};


ACTION_RETURN_TYPE hsmCommunicator_sendMessage_sendMessage(FSM_TYPE_PTR);
ACTION_RETURN_TYPE hsmCommunicator_sendMessage_queueMessage(FSM_TYPE_PTR);
ACTION_RETURN_TYPE hsmCommunicator_sendMessage_checkQueue(FSM_TYPE_PTR);


#endif