simpleCommunicator.cΒΆ

Generated using fsm -tss simpleCommunicator.fsm

/**
	simpleCommunicator.c

	This file automatically generated by FSMLang
*/

#include "simpleCommunicator_priv.h"
#include <stddef.h>


#ifndef DBG_PRINTF
#define DBG_PRINTF(...)
#endif

#define COMBINE(E, S) \
(((unsigned long long)(E) << (sizeof(unsigned long long)/2)\
 | (unsigned long long)(S)))
static SIMPLE_COMMUNICATOR_EVENT eventIsHandledIdenticallyInAllStates(pSIMPLE_COMMUNICATOR,SIMPLE_COMMUNICATOR_EVENT,SIMPLE_COMMUNICATOR_STATE*);
static SIMPLE_COMMUNICATOR simpleCommunicator_INSTANCE0 = {
	.state = simpleCommunicator_IDLE
	, .event = THIS(SEND_MESSAGE)
	, .instance = 0
	, .fsm = simpleCommunicatorFSM
	};

pSIMPLE_COMMUNICATOR psimpleCommunicator = (pSIMPLE_COMMUNICATOR) &simpleCommunicator_INSTANCE0;

void run_simpleCommunicator(SIMPLE_COMMUNICATOR_EVENT e)
{
	if (psimpleCommunicator)
	{
		psimpleCommunicator->fsm(psimpleCommunicator,e);
	}
}


#ifndef EVENT_IS_NOT_EXCLUDED_FROM_LOG
#define EVENT_IS_NOT_EXCLUDED_FROM_LOG(e) ((e) == (e))
#endif
void simpleCommunicatorFSM(pSIMPLE_COMMUNICATOR pfsm, SIMPLE_COMMUNICATOR_EVENT event)
{
	SIMPLE_COMMUNICATOR_EVENT e = event;
	SIMPLE_COMMUNICATOR_STATE s = pfsm->state;

	while (e != simpleCommunicator_noEvent) {

#ifdef SIMPLE_COMMUNICATOR_DEBUG
if (EVENT_IS_NOT_EXCLUDED_FROM_LOG(e))
{
	DBG_PRINTF("event: %s; state: %s"
,SIMPLE_COMMUNICATOR_EVENT_NAMES[e]
,SIMPLE_COMMUNICATOR_STATE_NAMES[pfsm->state]
);
}
#endif

		/* This is read-only data to facilitate error reporting in action functions */
		pfsm->event = e;


		switch(COMBINE(e, pfsm->state))
		{
		case COMBINE(THIS(SEND_MESSAGE),STATE(IDLE)):
			e = UFMN(sendMessage)(pfsm);
			s = STATE(AWAITING_ACK);
			break;
		case COMBINE(THIS(SEND_MESSAGE),STATE(AWAITING_ACK)):
			e = UFMN(queueMessage)(pfsm);
			break;
		case COMBINE(THIS(ACK),STATE(AWAITING_ACK)):
			e = UFMN(checkQueue)(pfsm);
			s = STATE(IDLE);
			break;
		default:
			e = eventIsHandledIdenticallyInAllStates(pfsm, e, &s);
			break;
		}

			pfsm->state = s;

	}

}

static SIMPLE_COMMUNICATOR_EVENT eventIsHandledIdenticallyInAllStates(pSIMPLE_COMMUNICATOR pfsm,SIMPLE_COMMUNICATOR_EVENT e,SIMPLE_COMMUNICATOR_STATE* s)
{
	SIMPLE_COMMUNICATOR_EVENT retVal = THIS(noEvent);
	switch (e)
	{
	case THIS(NEVER_SEEN):
		retVal = UFMN(neverExecuted)(pfsm);
		break;
	default:
		DBG_PRINTF("simpleCommunicator_noAction");
		break;
	}

	(void) s;
	return retVal;
}

ACTION_RETURN_TYPE __attribute__((weak)) UFMN(neverExecuted)(FSM_TYPE_PTR pfsm)
{
	DBG_PRINTF("weak: %s", __func__);
	(void) pfsm;
	return THIS(noEvent);
}

ACTION_RETURN_TYPE __attribute__((weak)) UFMN(sendMessage)(FSM_TYPE_PTR pfsm)
{
	DBG_PRINTF("weak: %s", __func__);
	(void) pfsm;
	return THIS(noEvent);
}

ACTION_RETURN_TYPE __attribute__((weak)) UFMN(queueMessage)(FSM_TYPE_PTR pfsm)
{
	DBG_PRINTF("weak: %s", __func__);
	(void) pfsm;
	return THIS(noEvent);
}

ACTION_RETURN_TYPE __attribute__((weak)) UFMN(checkQueue)(FSM_TYPE_PTR pfsm)
{
	DBG_PRINTF("weak: %s", __func__);
	(void) pfsm;
	return THIS(noEvent);
}


#ifdef SIMPLE_COMMUNICATOR_DEBUG
char *SIMPLE_COMMUNICATOR_EVENT_NAMES[] = {
	 "simpleCommunicator_SEND_MESSAGE"
	,"simpleCommunicator_NEVER_SEEN"
	,"simpleCommunicator_ACK"
	, "simpleCommunicator_noEvent"
	, "simpleCommunicator_numEvents"
};

char *SIMPLE_COMMUNICATOR_STATE_NAMES[] = {
	 "simpleCommunicator_IDLE"
	,"simpleCommunicator_AWAITING_ACK"
};

#endif