PEdestrian LIghto CONtrolled (PELICA) crossing
PEdestrian LIght CONtrolled (PELICAN) crossing
constructor
me->subscribe(PEDS_WAITING_SIG);
me->subscribe(TERMINATE_SIG);
QS_OBJ_DICTIONARY(&l_Pelican);
QS_OBJ_DICTIONARY(&l_Pelican.m_timeout);
QS_FUN_DICTIONARY(&QP::QHsm::top);
QS_FUN_DICTIONARY(&Pelican::initial);
QS_FUN_DICTIONARY(&Pelican::offline);
QS_FUN_DICTIONARY(&Pelican::operational);
QS_FUN_DICTIONARY(&Pelican::carsEnabled);
QS_FUN_DICTIONARY(&Pelican::carsGreen);
QS_FUN_DICTIONARY(&Pelican::carsGreenNoPed);
QS_FUN_DICTIONARY(&Pelican::carsGreenPedWait);
QS_FUN_DICTIONARY(&Pelican::carsGreenInt);
QS_FUN_DICTIONARY(&Pelican::carsYellow);
QS_FUN_DICTIONARY(&Pelican::pedsEnabled);
QS_FUN_DICTIONARY(&Pelican::pedsWalk);
QS_FUN_DICTIONARY(&Pelican::pedsFlash);
QS_SIG_DICTIONARY(PEDS_WAITING_SIG, (void *)0); // global signals
QS_SIG_DICTIONARY(ON_SIG, (void *)0);
QS_SIG_DICTIONARY(OFF_SIG, (void *)0);
QS_SIG_DICTIONARY(TIMEOUT_SIG, &l_Pelican); // just for Pelican
BSP_signalCars(CARS_RED);
BSP_signalPeds(PEDS_DONT_WALK);
BSP_terminate(0);
BSP_signalCars(CARS_RED);
BSP_signalCars(CARS_GREEN);
me->m_timeout.postIn(me, CARS_GREEN_MIN_TOUT);
(void)me->m_timeout.disarm();
BSP_showState("carsGreenNoPed");
BSP_showState("carsGreenInt");
BSP_showState("carsGreenPedWait");
BSP_showState("carsYellow");
BSP_signalCars(CARS_YELLOW);
me->m_timeout.postIn(me, CARS_YELLOW_TOUT);
(void)me->m_timeout.disarm();
BSP_signalPeds(PEDS_DONT_WALK);
BSP_showState("pedsWalk");
BSP_signalPeds(PEDS_WALK);
me->m_timeout.postIn(me, PEDS_WALK_TOUT);
(void)me->m_timeout.disarm();
BSP_showState("pedsFlash");
me->m_timeout.postIn(me, PEDS_FLASH_TOUT);
me->m_flashCtr = PEDS_FLASH_NUM*2 + 1;
(void)me->m_timeout.disarm();
me->m_flashCtr != 0U
--me->m_flashCtr;
(me->m_flashCtr & 1U) == 0U
BSP_signalPeds(PEDS_DONT_WALK);
else
BSP_signalPeds(PEDS_BLANK);
else
BSP_showState("offline");
me->m_timeout.postEvery(me, OFF_FLASH_TOUT);
me->m_flashCtr = 0U;
(void)me->m_timeout.disarm();
me->m_flashCtr ^= 1U;
(me->m_flashCtr & 1U) == 0U
BSP_signalCars(CARS_RED);
BSP_signalPeds(PEDS_DONT_WALK);
else
BSP_signalCars(CARS_BLANK);
BSP_signalPeds(PEDS_BLANK);
BSP_terminate(0);
#ifndef pelican_h
#define pelican_h
namespace PELICAN {
enum PelicanSignals {
PEDS_WAITING_SIG = QP::Q_USER_SIG,
TERMINATE_SIG,
MAX_PUB_SIG, // the last published signal
ON_SIG,
OFF_SIG,
TIMEOUT_SIG,
MAX_SIG // keep always last
};
// active objects ..................................................
$declare(components::AO_Pelican) // opaque pointer to Pelican AO
} // namespace PELICAN
#endif // pelican_h
#include "qp_port.h"
#include "bsp.h"
#include "pelican.h"
namespace PELICAN {
Q_DEFINE_THIS_FILE
enum PelicanTimeouts { // various timeouts in ticks
CARS_GREEN_MIN_TOUT = BSP_TICKS_PER_SEC * 8, // min green for cars
CARS_YELLOW_TOUT = BSP_TICKS_PER_SEC * 3, // yellow for cars
PEDS_WALK_TOUT = BSP_TICKS_PER_SEC * 3, // walking time for peds
PEDS_FLASH_TOUT = BSP_TICKS_PER_SEC / 5, // flashing timeout for peds
PEDS_FLASH_NUM = 5*2, // number of flashes for peds
OFF_FLASH_TOUT = BSP_TICKS_PER_SEC / 2 // flashing timeout when off
};
// Pelican class -------------------------------------------------------------
$declare(components::Pelican)
// Local objects -------------------------------------------------------------
static Pelican l_Pelican; // the single instance of Pelican active object
// Global objects ------------------------------------------------------------
QP::QActive * const AO_Pelican = &l_Pelican; // the opaque pointer
// Pelican class definition --------------------------------------------------
$define(components::Pelican)
} // namespace PELICAN