コード例 #1
0
ファイル: controller.cpp プロジェクト: Vafakhoshaein/Tracker
void
Controller::init_fsm(FiniteStateMachine fsm)
{
	fsm_add_state(fsm, "start-requested");
	fsm_add_state(fsm, "started");
	fsm_add_state(fsm, "exit-requested");
	fsm_add_state(fsm, "stop-requested");
	fsm_add_state(fsm, "retry");
	fsm_add_state(fsm, "exit");
	READY_TO_START_REQUESTED = fsm_link_states(fsm, "start-btn-clicked", "ready", "start-requested");
	START_REQUESTED_TO_STARTED = fsm_link_states(fsm, "everything-started", "start-requested", "started");
	STARTED_TO_EXIT_REQUESTED =  fsm_link_states(fsm, "exit-btn-clicked", "started", "exit-requested");
	STARTED_TO_STARTED = fsm_link_states(fsm, "new-image", "started", "started");
	START_REQUESTED_TO_EXIT_REQUESTED = fsm_link_states(fsm, "exit-btn-clicked", "start-requested", "exit-requested");
	START_REQUESTED_TO_STOP_REQUESTED = fsm_link_states(fsm, "failed", "start-requested", "stop-requested");

	STARTED_TO_RETRY = fsm_link_states(fsm, "failed", "started", "retry");
	RETRY_TO_RETRY = fsm_link_states(fsm, "everything-stopped", "retry", "retry");
	RETRY_TO_START_REQUESTED = fsm_link_states(fsm, "start-btn-clicked", "retry", "start-requested");
	RETRY_TO_EXIT_REQUESTED = fsm_link_states(fsm, "exit-btn-clicked", "retry", "exit-requested");
	RETRY_TO_STOP_REQUESTED = fsm_link_states(fsm, "stop-btn-clicked", "retry", "stop-requested");

	STARTED_TO_STOP_REQUESTED = fsm_link_states(fsm, "stop-btn-clicked", "started", "stop-requested");
	STOP_REQUESTED_TO_READY = fsm_link_states(fsm, "everything-stopped", "stop-requested", "ready");
	STOP_REQUESTED_TO_EXIT_REQUESTED = fsm_link_states(fsm, "exit-btn-clicked", "stop-requested", "exit-requested");
	EXIT_REQUESTED_TO_EXIT = fsm_link_states(fsm, "everything-stopped", "exit-requested", "exit");
	READY_TO_EXIT = fsm_link_states(fsm, "exit-btn-clicked", "ready", "exit");

	mainWindow->stateReport(strdup(fsm_get_current_state_name(fsm)));
}
コード例 #2
0
ファイル: communication.c プロジェクト: DBattisti/antidote
/**
 * Returns the current state name
 */
char *communication_get_state_name(Context *ctx)
{
	// thread-safe block - start
	communication_lock(ctx);

	char *ret = fsm_get_current_state_name(ctx->fsm);

	communication_unlock(ctx);
	// thread-safe block - end

	return ret;
}
コード例 #3
0
ファイル: communication.c プロジェクト: DBattisti/antidote
/**
 * Process the incoming APDU calling to proper procedure.
 * This method locks the communication layer thread.
 *
 * @param ctx current context
 * @param apdu APDU
 */
void communication_process_apdu(Context *ctx, APDU *apdu)
{
	// thread-safe block - start
	communication_lock(ctx);

	DEBUG(" communication: current sm(%s) ", fsm_get_current_state_name(ctx->fsm));

	if (ctx->type & AGENT_CONTEXT) {
		communication_process_apdu_agent(ctx, apdu);
	} else {
		communication_process_apdu_manager(ctx, apdu);
	}

	communication_unlock(ctx);
	// thread-safe block - end
}