initial solution

This commit is contained in:
Joeri Exelmans 2025-06-04 16:43:27 +02:00
commit 37d1d83b47
19 changed files with 2775 additions and 0 deletions

View file

@ -0,0 +1,874 @@
/* Generated by itemis CREATE code generator. */
#include "../src/sc_types.h"
#include "Statechart.h"
#include "Statechart_required.h"
/*! \file
Implementation of the state machine 'Statechart'
*/
#ifndef SC_UNUSED
#define SC_UNUSED(P) (void)(P)
#endif
/* prototypes of all internal functions */
static void enact_main_region_on_r1_responding(Statechart* handle);
static void enact_main_region_on_r1_sensor_error(Statechart* handle);
static void enact_main_region_on_r2_pressed(Statechart* handle);
static void exact_main_region_on_r2_pressed(Statechart* handle);
static void enseq_main_region_on_default(Statechart* handle);
static void enseq_main_region_on_r1_responding_default(Statechart* handle);
static void enseq_main_region_on_r1_sensor_error_default(Statechart* handle);
static void enseq_main_region_on_r2_not_pressed_default(Statechart* handle);
static void enseq_main_region_on_r2_pressed_default(Statechart* handle);
static void enseq_main_region_off_default(Statechart* handle);
static void enseq_main_region_default(Statechart* handle);
static void enseq_main_region_on_r1_default(Statechart* handle);
static void enseq_main_region_on_r2_default(Statechart* handle);
static void exseq_main_region_on(Statechart* handle);
static void exseq_main_region_on_r1_responding(Statechart* handle);
static void exseq_main_region_on_r1_sensor_error(Statechart* handle);
static void exseq_main_region_on_r2_not_pressed(Statechart* handle);
static void exseq_main_region_on_r2_pressed(Statechart* handle);
static void exseq_main_region_off(Statechart* handle);
static void exseq_main_region(Statechart* handle);
static void exseq_main_region_on_r1(Statechart* handle);
static void exseq_main_region_on_r2(Statechart* handle);
static void react_main_region_on_r1__choice_0(Statechart* handle);
static void react_main_region_on_r1__entry_Default(Statechart* handle);
static void react_main_region_on_r2__entry_Default(Statechart* handle);
static void react_main_region__entry_Default(Statechart* handle);
/*! The reactions of state responding. */
static sc_integer main_region_on_r1_responding_react(Statechart* handle, const sc_integer transitioned_before);
/*! The reactions of state sensor_error. */
static sc_integer main_region_on_r1_sensor_error_react(Statechart* handle, const sc_integer transitioned_before);
/*! The reactions of state not_pressed. */
static sc_integer main_region_on_r2_not_pressed_react(Statechart* handle, const sc_integer transitioned_before);
/*! The reactions of state pressed. */
static sc_integer main_region_on_r2_pressed_react(Statechart* handle, const sc_integer transitioned_before);
/*! The reactions of state off. */
static sc_integer main_region_off_react(Statechart* handle, const sc_integer transitioned_before);
static void clear_in_events(Statechart* handle);
static void micro_step(Statechart* handle);
/*! Performs a 'run to completion' step. */
static void run_cycle(Statechart* handle);
static void statechart_internal_set_speed(Statechart* handle, sc_real value)
;
static void statechart_internal_set_pid_vars(Statechart* handle, pid_vars_t value)
;
static void statechart_eventqueue_init(statechart_eventqueue * eq, statechart_event *buffer, sc_integer capacity);
static sc_integer statechart_eventqueue_size(statechart_eventqueue * eq);
static void statechart_event_init(statechart_event * ev, StatechartEventID name);
static statechart_event statechart_eventqueue_pop(statechart_eventqueue * eq);
static sc_boolean statechart_eventqueue_push(statechart_eventqueue * eq, statechart_event ev);
static void statechart_add_event_to_queue(statechart_eventqueue * eq, StatechartEventID name);
static sc_boolean statechart_dispatch_event(Statechart* handle, const statechart_event * event);
static statechart_event statechart_get_next_event(Statechart* handle);
static sc_boolean statechart_dispatch_next_event(Statechart* handle);
static StatechartEventID statechart_get_timed_event_name(Statechart* handle, sc_eventid evid);
static void statechart_event_value_init(statechart_event * ev, StatechartEventID name, void * value);
static void statechart_add_value_event_to_queue(statechart_eventqueue * eq, StatechartEventID name, void * value);
void statechart_init(Statechart* handle)
{
sc_integer i;
for (i = 0; i < STATECHART_MAX_ORTHOGONAL_STATES; ++i)
{
handle->stateConfVector[i] = Statechart_last_state;
}
clear_in_events(handle);
sc_observable_sc_real_init(&handle->iface.setMotorR);
sc_observable_sc_real_init(&handle->iface.setMotorL);
/* Default init sequence for statechart Statechart */
statechart_internal_set_speed(handle, 0.0);
handle->isExecuting = bool_false;
statechart_eventqueue_init(&handle->in_event_queue, handle->in_buffer, STATECHART_IN_EVENTQUEUE_BUFFERSIZE);
}
void statechart_enter(Statechart* handle)
{
/* Activates the state machine. */
if (handle->isExecuting == bool_true)
{
return;
}
handle->isExecuting = bool_true;
/* Default enter sequence for statechart Statechart */
enseq_main_region_default(handle);
handle->isExecuting = bool_false;
}
void statechart_exit(Statechart* handle)
{
/* Deactivates the state machine. */
if (handle->isExecuting == bool_true)
{
return;
}
handle->isExecuting = bool_true;
/* Default exit sequence for statechart Statechart */
exseq_main_region(handle);
handle->stateConfVector[0] = Statechart_last_state;
handle->stateConfVector[1] = Statechart_last_state;
handle->stateConfVectorPosition = 1;
handle->isExecuting = bool_false;
}
/*!
Can be used by the client code to trigger a run to completion step without raising an event.
*/
void statechart_trigger_without_event(Statechart* handle) {
run_cycle(handle);
}
sc_boolean statechart_is_active(const Statechart* handle)
{
sc_boolean result = bool_false;
sc_integer i;
for(i = 0; i < STATECHART_MAX_ORTHOGONAL_STATES; i++)
{
result = result || handle->stateConfVector[i] != Statechart_last_state;
}
return result;
}
/*
* Always returns 'false' since this state machine can never become final.
*/
sc_boolean statechart_is_final(const Statechart* handle)
{
SC_UNUSED(handle);
return bool_false;
}
void statechart_raise_time_event(Statechart* handle, sc_eventid evid)
{
if ( ((sc_intptr_t)evid) >= ((sc_intptr_t)&(handle->timeEvents))
&& ((sc_intptr_t)evid) < ((sc_intptr_t)&(handle->timeEvents)) + (unsigned)sizeof(StatechartTimeEvents))
{
statechart_add_event_to_queue(&(handle->in_event_queue), statechart_get_timed_event_name(handle, evid));
run_cycle(handle);
}
}
sc_boolean statechart_is_state_active(const Statechart* handle, StatechartStates state)
{
sc_boolean result = bool_false;
switch (state)
{
case Statechart_main_region_on :
result = (sc_boolean) (handle->stateConfVector[SCVI_STATECHART_MAIN_REGION_ON] >= Statechart_main_region_on
&& handle->stateConfVector[SCVI_STATECHART_MAIN_REGION_ON] <= Statechart_main_region_on_r2_pressed);
break;
case Statechart_main_region_on_r1_responding :
result = (sc_boolean) (handle->stateConfVector[SCVI_STATECHART_MAIN_REGION_ON_R1_RESPONDING] == Statechart_main_region_on_r1_responding
);
break;
case Statechart_main_region_on_r1_sensor_error :
result = (sc_boolean) (handle->stateConfVector[SCVI_STATECHART_MAIN_REGION_ON_R1_SENSOR_ERROR] == Statechart_main_region_on_r1_sensor_error
);
break;
case Statechart_main_region_on_r2_not_pressed :
result = (sc_boolean) (handle->stateConfVector[SCVI_STATECHART_MAIN_REGION_ON_R2_NOT_PRESSED] == Statechart_main_region_on_r2_not_pressed
);
break;
case Statechart_main_region_on_r2_pressed :
result = (sc_boolean) (handle->stateConfVector[SCVI_STATECHART_MAIN_REGION_ON_R2_PRESSED] == Statechart_main_region_on_r2_pressed
);
break;
case Statechart_main_region_off :
result = (sc_boolean) (handle->stateConfVector[SCVI_STATECHART_MAIN_REGION_OFF] == Statechart_main_region_off
);
break;
default:
result = bool_false;
break;
}
return result;
}
static void clear_in_events(Statechart* handle)
{
handle->iface.sensor_raised = bool_false;
handle->iface.buttonPressed_raised = bool_false;
handle->iface.buttonReleased_raised = bool_false;
handle->timeEvents.statechart_main_region_on_r2_pressed_tev0_raised = bool_false;
}
static void micro_step(Statechart* handle)
{
sc_integer transitioned = -1;
handle->stateConfVectorPosition = 0;
switch(handle->stateConfVector[ 0 ])
{
case Statechart_main_region_on_r1_responding :
{
transitioned = main_region_on_r1_responding_react(handle,transitioned);
break;
}
case Statechart_main_region_on_r1_sensor_error :
{
transitioned = main_region_on_r1_sensor_error_react(handle,transitioned);
break;
}
case Statechart_main_region_off :
{
transitioned = main_region_off_react(handle,transitioned);
break;
}
default:
/* do nothing */
break;
}
if ((handle->stateConfVectorPosition) < (1))
{
switch(handle->stateConfVector[ 1 ])
{
case Statechart_main_region_on_r2_not_pressed :
{
main_region_on_r2_not_pressed_react(handle,transitioned);
break;
}
case Statechart_main_region_on_r2_pressed :
{
main_region_on_r2_pressed_react(handle,transitioned);
break;
}
default:
/* do nothing */
break;
}
}
}
static void run_cycle(Statechart* handle)
{
/* Performs a 'run to completion' step. */
if (handle->isExecuting == bool_true)
{
return;
}
handle->isExecuting = bool_true;
statechart_dispatch_next_event(handle);
do
{
micro_step(handle);
clear_in_events(handle);
} while (statechart_dispatch_next_event(handle) == bool_true);
handle->isExecuting = bool_false;
}
void statechart_raise_sensor(Statechart* handle, sc_real value)
{
statechart_add_value_event_to_queue(&(handle->in_event_queue), Statechart_sensor, &value);
run_cycle(handle);
}
void statechart_raise_buttonPressed(Statechart* handle)
{
statechart_add_event_to_queue(&(handle->in_event_queue), Statechart_buttonPressed);
run_cycle(handle);
}
void statechart_raise_buttonReleased(Statechart* handle)
{
statechart_add_event_to_queue(&(handle->in_event_queue), Statechart_buttonReleased);
run_cycle(handle);
}
sc_observable_sc_real* statechart_get_setMotorR(Statechart* handle)
{
return &handle->iface.setMotorR;
}
sc_observable_sc_real* statechart_get_setMotorL(Statechart* handle)
{
return &handle->iface.setMotorL;
}
static void statechart_internal_set_speed(Statechart* handle, sc_real value)
{
handle->internal.speed = value;
}
static void statechart_internal_set_pid_vars(Statechart* handle, pid_vars_t value)
{
handle->internal.pid_vars = value;
}
/* implementations of all internal functions */
/* Entry action for state 'responding'. */
static void enact_main_region_on_r1_responding(Statechart* handle)
{
/* Entry action for state 'responding'. */
statechart_internal_set_speed(handle, statechart_pid(handle,handle->iface.sensor_value, handle->internal.pid_vars));
{
sc_real iface_setMotorL_value = handle->internal.speed;
sc_observable_sc_real_next(&handle->iface.setMotorL, iface_setMotorL_value);
};
{
sc_real iface_setMotorR_value = handle->internal.speed;
sc_observable_sc_real_next(&handle->iface.setMotorR, iface_setMotorR_value);
};
}
/* Entry action for state 'sensor_error'. */
static void enact_main_region_on_r1_sensor_error(Statechart* handle)
{
/* Entry action for state 'sensor_error'. */
{
sc_real iface_setMotorL_value = 1;
sc_observable_sc_real_next(&handle->iface.setMotorL, iface_setMotorL_value);
};
{
sc_real iface_setMotorR_value = -(1);
sc_observable_sc_real_next(&handle->iface.setMotorR, iface_setMotorR_value);
};
}
/* Entry action for state 'pressed'. */
static void enact_main_region_on_r2_pressed(Statechart* handle)
{
/* Entry action for state 'pressed'. */
statechart_set_timer(handle, (sc_eventid) &(handle->timeEvents.statechart_main_region_on_r2_pressed_tev0_raised) , (((sc_time) 2) * 1000), bool_false);
}
/* Exit action for state 'pressed'. */
static void exact_main_region_on_r2_pressed(Statechart* handle)
{
/* Exit action for state 'pressed'. */
statechart_unset_timer(handle, (sc_eventid) &(handle->timeEvents.statechart_main_region_on_r2_pressed_tev0_raised) );
}
/* 'default' enter sequence for state on */
static void enseq_main_region_on_default(Statechart* handle)
{
/* 'default' enter sequence for state on */
enseq_main_region_on_r1_default(handle);
enseq_main_region_on_r2_default(handle);
}
/* 'default' enter sequence for state responding */
static void enseq_main_region_on_r1_responding_default(Statechart* handle)
{
/* 'default' enter sequence for state responding */
enact_main_region_on_r1_responding(handle);
handle->stateConfVector[0] = Statechart_main_region_on_r1_responding;
handle->stateConfVectorPosition = 0;
}
/* 'default' enter sequence for state sensor_error */
static void enseq_main_region_on_r1_sensor_error_default(Statechart* handle)
{
/* 'default' enter sequence for state sensor_error */
enact_main_region_on_r1_sensor_error(handle);
handle->stateConfVector[0] = Statechart_main_region_on_r1_sensor_error;
handle->stateConfVectorPosition = 0;
}
/* 'default' enter sequence for state not_pressed */
static void enseq_main_region_on_r2_not_pressed_default(Statechart* handle)
{
/* 'default' enter sequence for state not_pressed */
handle->stateConfVector[1] = Statechart_main_region_on_r2_not_pressed;
handle->stateConfVectorPosition = 1;
}
/* 'default' enter sequence for state pressed */
static void enseq_main_region_on_r2_pressed_default(Statechart* handle)
{
/* 'default' enter sequence for state pressed */
enact_main_region_on_r2_pressed(handle);
handle->stateConfVector[1] = Statechart_main_region_on_r2_pressed;
handle->stateConfVectorPosition = 1;
}
/* 'default' enter sequence for state off */
static void enseq_main_region_off_default(Statechart* handle)
{
/* 'default' enter sequence for state off */
handle->stateConfVector[0] = Statechart_main_region_off;
handle->stateConfVectorPosition = 0;
}
/* 'default' enter sequence for region main region */
static void enseq_main_region_default(Statechart* handle)
{
/* 'default' enter sequence for region main region */
react_main_region__entry_Default(handle);
}
/* 'default' enter sequence for region r1 */
static void enseq_main_region_on_r1_default(Statechart* handle)
{
/* 'default' enter sequence for region r1 */
react_main_region_on_r1__entry_Default(handle);
}
/* 'default' enter sequence for region r2 */
static void enseq_main_region_on_r2_default(Statechart* handle)
{
/* 'default' enter sequence for region r2 */
react_main_region_on_r2__entry_Default(handle);
}
/* Default exit sequence for state on */
static void exseq_main_region_on(Statechart* handle)
{
/* Default exit sequence for state on */
exseq_main_region_on_r1(handle);
exseq_main_region_on_r2(handle);
handle->stateConfVector[0] = Statechart_last_state;
handle->stateConfVector[1] = Statechart_last_state;
handle->stateConfVectorPosition = 1;
}
/* Default exit sequence for state responding */
static void exseq_main_region_on_r1_responding(Statechart* handle)
{
/* Default exit sequence for state responding */
handle->stateConfVector[0] = Statechart_main_region_on;
handle->stateConfVectorPosition = 0;
}
/* Default exit sequence for state sensor_error */
static void exseq_main_region_on_r1_sensor_error(Statechart* handle)
{
/* Default exit sequence for state sensor_error */
handle->stateConfVector[0] = Statechart_main_region_on;
handle->stateConfVectorPosition = 0;
}
/* Default exit sequence for state not_pressed */
static void exseq_main_region_on_r2_not_pressed(Statechart* handle)
{
/* Default exit sequence for state not_pressed */
handle->stateConfVector[1] = Statechart_main_region_on;
handle->stateConfVectorPosition = 1;
}
/* Default exit sequence for state pressed */
static void exseq_main_region_on_r2_pressed(Statechart* handle)
{
/* Default exit sequence for state pressed */
handle->stateConfVector[1] = Statechart_main_region_on;
handle->stateConfVectorPosition = 1;
exact_main_region_on_r2_pressed(handle);
}
/* Default exit sequence for state off */
static void exseq_main_region_off(Statechart* handle)
{
/* Default exit sequence for state off */
handle->stateConfVector[0] = Statechart_last_state;
handle->stateConfVectorPosition = 0;
}
/* Default exit sequence for region main region */
static void exseq_main_region(Statechart* handle)
{
/* Default exit sequence for region main region */
/* Handle exit of all possible states (of Statechart.main_region) at position 0... */
switch(handle->stateConfVector[ 0 ])
{
case Statechart_main_region_on_r1_responding :
{
exseq_main_region_on_r1_responding(handle);
break;
}
case Statechart_main_region_on_r1_sensor_error :
{
exseq_main_region_on_r1_sensor_error(handle);
break;
}
case Statechart_main_region_off :
{
exseq_main_region_off(handle);
break;
}
default:
/* do nothing */
break;
}
/* Handle exit of all possible states (of Statechart.main_region) at position 1... */
switch(handle->stateConfVector[ 1 ])
{
case Statechart_main_region_on_r2_not_pressed :
{
exseq_main_region_on_r2_not_pressed(handle);
break;
}
case Statechart_main_region_on_r2_pressed :
{
exseq_main_region_on_r2_pressed(handle);
break;
}
default:
/* do nothing */
break;
}
}
/* Default exit sequence for region r1 */
static void exseq_main_region_on_r1(Statechart* handle)
{
/* Default exit sequence for region r1 */
/* Handle exit of all possible states (of Statechart.main_region.on.r1) at position 0... */
switch(handle->stateConfVector[ 0 ])
{
case Statechart_main_region_on_r1_responding :
{
exseq_main_region_on_r1_responding(handle);
break;
}
case Statechart_main_region_on_r1_sensor_error :
{
exseq_main_region_on_r1_sensor_error(handle);
break;
}
default:
/* do nothing */
break;
}
}
/* Default exit sequence for region r2 */
static void exseq_main_region_on_r2(Statechart* handle)
{
/* Default exit sequence for region r2 */
/* Handle exit of all possible states (of Statechart.main_region.on.r2) at position 1... */
switch(handle->stateConfVector[ 1 ])
{
case Statechart_main_region_on_r2_not_pressed :
{
exseq_main_region_on_r2_not_pressed(handle);
break;
}
case Statechart_main_region_on_r2_pressed :
{
exseq_main_region_on_r2_pressed(handle);
break;
}
default:
/* do nothing */
break;
}
}
/* The reactions of state null. */
static void react_main_region_on_r1__choice_0(Statechart* handle)
{
/* The reactions of state null. */
if ((handle->iface.sensor_value) < (0))
{
enseq_main_region_on_r1_sensor_error_default(handle);
} else
{
enseq_main_region_on_r1_responding_default(handle);
}
}
/* Default react sequence for initial entry */
static void react_main_region_on_r1__entry_Default(Statechart* handle)
{
/* Default react sequence for initial entry */
enseq_main_region_on_r1_responding_default(handle);
}
/* Default react sequence for initial entry */
static void react_main_region_on_r2__entry_Default(Statechart* handle)
{
/* Default react sequence for initial entry */
enseq_main_region_on_r2_not_pressed_default(handle);
}
/* Default react sequence for initial entry */
static void react_main_region__entry_Default(Statechart* handle)
{
/* Default react sequence for initial entry */
enseq_main_region_off_default(handle);
}
static sc_integer main_region_on_r1_responding_react(Statechart* handle, const sc_integer transitioned_before)
{
/* The reactions of state responding. */
sc_integer transitioned_after = transitioned_before;
if ((transitioned_after) < (0))
{
if (handle->iface.sensor_raised == bool_true)
{
exseq_main_region_on_r1_responding(handle);
react_main_region_on_r1__choice_0(handle);
transitioned_after = 0;
}
}
return transitioned_after;
}
static sc_integer main_region_on_r1_sensor_error_react(Statechart* handle, const sc_integer transitioned_before)
{
/* The reactions of state sensor_error. */
sc_integer transitioned_after = transitioned_before;
if ((transitioned_after) < (0))
{
if (handle->iface.sensor_raised == bool_true)
{
exseq_main_region_on_r1_sensor_error(handle);
react_main_region_on_r1__choice_0(handle);
transitioned_after = 0;
}
}
return transitioned_after;
}
static sc_integer main_region_on_r2_not_pressed_react(Statechart* handle, const sc_integer transitioned_before)
{
/* The reactions of state not_pressed. */
sc_integer transitioned_after = transitioned_before;
if ((transitioned_after) < (1))
{
if (handle->iface.buttonPressed_raised == bool_true)
{
exseq_main_region_on_r2_not_pressed(handle);
enseq_main_region_on_r2_pressed_default(handle);
transitioned_after = 1;
}
}
/* If no transition was taken */
if ((transitioned_after) == (transitioned_before))
{
/* then execute local reactions. */
transitioned_after = transitioned_before;
}
return transitioned_after;
}
static sc_integer main_region_on_r2_pressed_react(Statechart* handle, const sc_integer transitioned_before)
{
/* The reactions of state pressed. */
sc_integer transitioned_after = transitioned_before;
if ((transitioned_after) < (1))
{
if (handle->timeEvents.statechart_main_region_on_r2_pressed_tev0_raised == bool_true)
{
exseq_main_region_on(handle);
handle->timeEvents.statechart_main_region_on_r2_pressed_tev0_raised = bool_false;
enseq_main_region_off_default(handle);
transitioned_after = 1;
} else
{
if (handle->iface.buttonReleased_raised == bool_true)
{
exseq_main_region_on_r2_pressed(handle);
enseq_main_region_on_r2_not_pressed_default(handle);
transitioned_after = 1;
}
}
}
/* If no transition was taken */
if ((transitioned_after) == (transitioned_before))
{
/* then execute local reactions. */
transitioned_after = transitioned_before;
}
return transitioned_after;
}
static sc_integer main_region_off_react(Statechart* handle, const sc_integer transitioned_before)
{
/* The reactions of state off. */
sc_integer transitioned_after = transitioned_before;
if ((transitioned_after) < (0))
{
if (handle->iface.buttonPressed_raised == bool_true)
{
exseq_main_region_off(handle);
enseq_main_region_on_default(handle);
transitioned_after = 0;
}
}
/* If no transition was taken */
if ((transitioned_after) == (transitioned_before))
{
/* then execute local reactions. */
transitioned_after = transitioned_before;
}
return transitioned_after;
}
static void statechart_eventqueue_init(statechart_eventqueue * eq, statechart_event *buffer, sc_integer capacity)
{
eq->events = buffer;
eq->capacity = capacity;
eq->push_index = 0;
eq->pop_index = 0;
eq->size = 0;
}
static sc_integer statechart_eventqueue_size(statechart_eventqueue * eq)
{
return eq->size;
}
static statechart_event statechart_eventqueue_pop(statechart_eventqueue * eq)
{
statechart_event event;
if(statechart_eventqueue_size(eq) <= 0) {
statechart_event_init(&event, Statechart_invalid_event);
}
else {
event = eq->events[eq->pop_index];
if(eq->pop_index < eq->capacity - 1) {
eq->pop_index++;
}
else {
eq->pop_index = 0;
}
eq->size--;
}
return event;
}
static sc_boolean statechart_eventqueue_push(statechart_eventqueue * eq, statechart_event ev)
{
if(statechart_eventqueue_size(eq) == eq->capacity) {
return bool_false;
}
else {
eq->events[eq->push_index] = ev;
if(eq->push_index < eq->capacity - 1) {
eq->push_index++;
}
else {
eq->push_index = 0;
}
eq->size++;
return bool_true;
}
}
static void statechart_event_init(statechart_event * ev, StatechartEventID name)
{
ev->name = name;
ev->has_value = bool_false;
}
static void statechart_add_event_to_queue(statechart_eventqueue * eq, StatechartEventID name)
{
statechart_event event;
statechart_event_init(&event, name);
statechart_eventqueue_push(eq, event);
}
static sc_boolean statechart_dispatch_event(Statechart* handle, const statechart_event * event) {
switch(event->name) {
case Statechart_sensor:
{
handle->iface.sensor_raised = bool_true;
handle->iface.sensor_value = event->value.Statechart_sensor_value;
return bool_true;
}
case Statechart_buttonPressed:
{
handle->iface.buttonPressed_raised = bool_true;
return bool_true;
}
case Statechart_buttonReleased:
{
handle->iface.buttonReleased_raised = bool_true;
return bool_true;
}
case Statechart_Statechart_main_region_on_r2_pressed_time_event_0:
{
handle->timeEvents.statechart_main_region_on_r2_pressed_tev0_raised = bool_true;
return bool_true;
}
default:
return bool_false;
}
}
static statechart_event statechart_get_next_event(Statechart* handle)
{
statechart_event next_event;
statechart_event_init(&next_event, Statechart_invalid_event);
if(statechart_eventqueue_size(&(handle->in_event_queue)) > 0) {
next_event = statechart_eventqueue_pop(&(handle->in_event_queue));
}
return next_event;
}
static sc_boolean statechart_dispatch_next_event(Statechart* handle)
{
statechart_event nextEvent;
nextEvent = statechart_get_next_event(handle);
return statechart_dispatch_event(handle, &nextEvent);
}
static StatechartEventID statechart_get_timed_event_name(Statechart* handle, sc_eventid evid)
{
if(evid == &handle->timeEvents.statechart_main_region_on_r2_pressed_tev0_raised) {
return Statechart_Statechart_main_region_on_r2_pressed_time_event_0;
}
return Statechart_invalid_event;
}
static void statechart_event_value_init(statechart_event * ev, StatechartEventID name, void * value)
{
ev->name = name;
ev->has_value = bool_true;
switch(name)
{
case Statechart_sensor:
ev->value.Statechart_sensor_value = *((sc_real*)value);
break;
default:
/* do nothing */
break;
}
}
static void statechart_add_value_event_to_queue(statechart_eventqueue * eq, StatechartEventID name, void * value)
{
statechart_event event;
statechart_event_value_init(&event, name, value);
statechart_eventqueue_push(eq, event);
}