Newer
Older
#include "Controller.h"
// Header code defined in the model
// End of header code defined in the model
#define STATE__START__STATE 0
#define STATE__START 1
#define STATE__CHECK_ENVIRONMENT 2
#define STATE__choice__0 3
#define STATE__CHECK_COLOR 4
#define STATE__CHECK_CONTACT 6
#define STATE__choice__1 7
#define STATE__GO_BACKWARDS 8
#define STATE__TURN_LEFT 9
#define STATE__MOTOR_OFF 10
#define STATE__STOP__STATE 11
int myGlob__FACTOR_ACC = 6;
int myGlob__FACTOR_DEC = 5;
int myGlob__CONTACT_DELAY = 1;
int myGlob__COLOR_DELAY = 1;
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
int factor = 0;
int speed = 0;
int distance = 0;
int contact = 0;
int hasBeenPushed = 0;
int flagA = 0;
int flagB = 0;
int flag = 0;
int deg = 0;
int color = 0;
int __currentState = STATE__START__STATE;
__attribute__((unused)) request __req0;
__attribute__((unused))int *__params0[2];
__attribute__((unused)) request __req1;
__attribute__((unused))int *__params1[2];
__attribute__((unused))setOfRequests __list;
__attribute__((unused))pthread_cond_t __myCond;
__attribute__((unused))request *__returnRequest;
char * __myname = (char *)arg;
pthread_cond_init(&__myCond, NULL);
fillListOfRequests(&__list, __myname, &__myCond, &__mainMutex);
//printf("my name = %s\n", __myname);
/* Main loop on states */
while(__currentState != STATE__STOP__STATE) {
switch(__currentState) {
case STATE__START__STATE:
traceStateEntering(__myname, "__StartState");
__currentState = STATE__START;
break;
case STATE__START:
traceStateEntering(__myname, "START");
__currentState = STATE__CHECK_ENVIRONMENT;
break;
case STATE__CHECK_ENVIRONMENT:
traceStateEntering(__myname, "CHECK_ENVIRONMENT");
makeNewRequest(&__req0, 2704, SEND_SYNC_REQUEST, 0, 0, 0, 0, __params0);
__req0.syncChannel = &__Sonar_ready_to_receive__Controller_ready_to_receive_dist;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__params0[0] = &distance;
makeNewRequest(&__req0, 2705, RECEIVE_SYNC_REQUEST, 0, 0, 0, 1, __params0);
__req0.syncChannel = &__Sonar_sendDistance__Controller_receiveDistance;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__currentState = STATE__choice__0;
break;
case STATE__choice__0:
traceStateEntering(__myname, "choice__0");
if (distance < 100) {
makeNewRequest(&__req0, 2752, IMMEDIATE, 0, 0, 0, 0, __params0);
addRequestToList(&__list, &__req0);
}
if (!(distance < 100)) {
makeNewRequest(&__req1, 2756, IMMEDIATE, 0, 0, 0, 0, __params1);
addRequestToList(&__list, &__req1);
}
if (nbOfRequests(&__list) == 0) {
debug2Msg(__myname, "No possible request");
__currentState = STATE__STOP__STATE;
break;
}
__returnRequest = executeListOfRequests(&__list);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
if (__returnRequest == &__req0) {
__currentState = STATE__CHECK_COLOR;
}
else if (__returnRequest == &__req1) {
}
break;
case STATE__CHECK_COLOR:
traceStateEntering(__myname, "CHECK_COLOR");
makeNewRequest(&__req0, 2708, SEND_SYNC_REQUEST, 0, 0, 0, 0, __params0);
__req0.syncChannel = &__Color_ready_to_receive__Controller_ready_to_receive_color;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__params0[0] = &color;
makeNewRequest(&__req0, 2709, RECEIVE_SYNC_REQUEST, 0, 0, 0, 1, __params0);
__req0.syncChannel = &__Color_sendColor__Controller_receiveColor;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
waitFor((myGlob__COLOR_DELAY)*1000000, (myGlob__COLOR_DELAY)*1000000);
__currentState = STATE__CHECK_COLOR;
break;
case STATE__GO_FORWARDS:
traceStateEntering(__myname, "GO_FORWARDS");
speed = myGlob__MOTOR_SPEED;
traceVariableModification("Controller", "speed", speed,0);
traceVariableModification("Controller", "flagA", flagA,0);
__params0[0] = &speed;
__params0[1] = &flagA;
makeNewRequest(&__req0, 2711, SEND_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_run_motor1__Motor1_run_motor;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__params0[0] = &speed;
__params0[1] = &flagA;
makeNewRequest(&__req0, 2712, SEND_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_run_motor2__Motor2_run_motor;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
waitFor((myGlob__MOTOR_ON_DELAY)*1000000, (myGlob__MOTOR_ON_DELAY)*1000000);
__currentState = STATE__CHECK_CONTACT;
break;
case STATE__CHECK_CONTACT:
traceStateEntering(__myname, "CHECK_CONTACT");
makeNewRequest(&__req0, 2714, SEND_SYNC_REQUEST, 0, 0, 0, 0, __params0);
__req0.syncChannel = &__Controller_ready_to_receive_cont__Contact_ready_to_receive;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__params0[0] = &contact;
__params0[1] = &hasBeenPushed;
makeNewRequest(&__req0, 2715, RECEIVE_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_receiveContact__Contact_sendContact;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__currentState = STATE__choice__1;
break;
case STATE__choice__1:
traceStateEntering(__myname, "choice__1");
if ((hasBeenPushed == 1)||(contact == 1)) {
makeNewRequest(&__req0, 2726, IMMEDIATE, 0, 0, 0, 0, __params0);
addRequestToList(&__list, &__req0);
}
if (!((hasBeenPushed == 1)||(contact == 1))) {
makeNewRequest(&__req1, 2774, IMMEDIATE, 0, 0, 0, 0, __params1);
addRequestToList(&__list, &__req1);
}
if (nbOfRequests(&__list) == 0) {
debug2Msg(__myname, "No possible request");
__currentState = STATE__STOP__STATE;
break;
}
__returnRequest = executeListOfRequests(&__list);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
if (__returnRequest == &__req0) {
}
else if (__returnRequest == &__req1) {
__currentState = STATE__MOTOR_OFF;
}
break;
case STATE__GO_BACKWARDS:
traceStateEntering(__myname, "GO_BACKWARDS");
speed = myGlob__MOTOR_SPEED;
traceVariableModification("Controller", "speed", speed,0);
flagA = 1;
traceVariableModification("Controller", "flagA", flagA,0);
__params0[0] = &speed;
__params0[1] = &flagA;
makeNewRequest(&__req0, 2718, SEND_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_run_motor1__Motor1_run_motor;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__params0[0] = &speed;
__params0[1] = &flagA;
makeNewRequest(&__req0, 2719, SEND_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_run_motor2__Motor2_run_motor;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
waitFor((1)*1000000, (1)*1000000);
__currentState = STATE__TURN_LEFT;
break;
case STATE__TURN_LEFT:
traceStateEntering(__myname, "TURN_LEFT");
traceVariableModification("Controller", "flag", flag,0);
traceVariableModification("Controller", "deg", deg,0);
__params0[0] = &flag;
__params0[1] = °
makeNewRequest(&__req0, 2721, SEND_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_turn1__Motor1_turn;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__params0[0] = &flag;
__params0[1] = °
makeNewRequest(&__req0, 2722, SEND_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_turn2__Motor2_turn;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
waitFor((myGlob__MOTOR_OFF_DELAY)*1000000, (myGlob__MOTOR_OFF_DELAY)*1000000);
__currentState = STATE__CHECK_ENVIRONMENT;
break;
case STATE__MOTOR_OFF:
traceStateEntering(__myname, "MOTOR_OFF");
speed = 0;
traceVariableModification("Controller", "speed", speed,0);
flagA = 1;
traceVariableModification("Controller", "flagA", flagA,0);
__params0[0] = &speed;
__params0[1] = &flagA;
makeNewRequest(&__req0, 2724, SEND_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_run_motor1__Motor1_run_motor;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
__params0[0] = &speed;
__params0[1] = &flagA;
makeNewRequest(&__req0, 2725, SEND_SYNC_REQUEST, 0, 0, 0, 2, __params0);
__req0.syncChannel = &__Controller_run_motor2__Motor2_run_motor;
__returnRequest = executeOneRequest(&__list, &__req0);
clearListOfRequests(&__list);
traceRequest(__myname, __returnRequest);
waitFor((myGlob__MOTOR_OFF_DELAY)*1000000, (myGlob__MOTOR_OFF_DELAY)*1000000);
__currentState = STATE__CHECK_ENVIRONMENT;
break;
}
}
//printf("Exiting = %s\n", __myname);
return NULL;
}