2013-09-23 14:34:35 -04:00
|
|
|
QState Philo_eating(Philo * const me, QEvt const * const e) {
|
2015-12-24 14:33:20 -05:00
|
|
|
QState status;
|
2012-08-14 18:07:04 -04:00
|
|
|
switch (e->sig) {
|
|
|
|
case Q_ENTRY_SIG: {
|
2013-09-23 14:34:35 -04:00
|
|
|
QTimeEvt_armX(&me->timeEvt, EAT_TIME, 0U); /* one shot */
|
2015-12-24 14:33:20 -05:00
|
|
|
status = Q_HANDLED();
|
|
|
|
break;
|
2012-08-14 18:07:04 -04:00
|
|
|
}
|
|
|
|
case Q_EXIT_SIG: {
|
2015-12-24 14:33:20 -05:00
|
|
|
TableEvt *pe;
|
2013-09-23 14:34:35 -04:00
|
|
|
QTimeEvt_disarm(&me->timeEvt);
|
2012-08-14 18:07:04 -04:00
|
|
|
pe = Q_NEW(TableEvt, DONE_SIG);
|
|
|
|
pe->philNum = me->num;
|
2013-09-23 14:34:35 -04:00
|
|
|
QF_PUBLISH((QEvt *)pe, me);
|
2015-12-24 14:33:20 -05:00
|
|
|
status = Q_HANDLED();
|
|
|
|
break;
|
2012-08-14 18:07:04 -04:00
|
|
|
}
|
2013-09-23 14:34:35 -04:00
|
|
|
case TIMEOUT_SIG: {
|
2015-12-24 14:33:20 -05:00
|
|
|
status = Q_TRAN(&Philosopher_thinking);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
default: {
|
|
|
|
status = Q_SUPER(&QHsm_top);
|
|
|
|
break;
|
2013-09-23 14:34:35 -04:00
|
|
|
}
|
2012-08-14 18:07:04 -04:00
|
|
|
}
|
2015-12-24 14:33:20 -05:00
|
|
|
|
|
|
|
return status;
|
2012-08-14 18:07:04 -04:00
|
|
|
}
|