3 #include "kernel_id.h"
\r
4 #include "ecrobot_interface.h"
\r
6 /* OSEK declarations */
\r
7 DeclareCounter(SysTimerCnt);
\r
8 DeclareTask(EventDispatcher);
\r
9 DeclareTask(EventHandler);
\r
10 DeclareTask(TaskLCD);
\r
12 DeclareEvent(TouchSensorOnEvent); /* Event declaration */
\r
13 DeclareEvent(TouchSensorOffEvent); /* Event declaration */
\r
15 /* LEJOS OSEK hooks */
\r
16 void ecrobot_device_initialize()
\r
18 nxt_motor_set_speed(NXT_PORT_A, 0, 1);
\r
21 void ecrobot_device_terminate()
\r
23 nxt_motor_set_speed(NXT_PORT_A, 0, 1);
\r
26 /* LEJOS OSEK hook to be invoked from an ISR in category 2 */
\r
27 void user_1ms_isr_type2(void)
\r
31 ercd = SignalCounter(SysTimerCnt); /* Increment OSEK Alarm Counter */
\r
38 /* EventDispatcher executed every 1ms */
\r
39 TASK(EventDispatcher)
\r
41 static U8 TouchSensorStatus_old = 0;
\r
42 U8 TouchSensorStatus;
\r
44 TouchSensorStatus = ecrobot_get_touch_sensor(NXT_PORT_S1);
\r
46 if (TouchSensorStatus == 1 && TouchSensorStatus_old == 0)
\r
48 /* Send a Touch Sensor ON Event to the Handler */
\r
49 SetEvent(EventHandler, TouchSensorOnEvent);
\r
51 else if (TouchSensorStatus == 0 && TouchSensorStatus_old == 1)
\r
53 /* Send a Touch Sensor OFF Event to the Handler */
\r
54 SetEvent(EventHandler, TouchSensorOffEvent);
\r
57 TouchSensorStatus_old = TouchSensorStatus;
\r
62 /* EventHandler executed by OSEK Events */
\r
67 WaitEvent(TouchSensorOnEvent); /* Task is in waiting status until the Event comes */
\r
68 ClearEvent(TouchSensorOnEvent);
\r
69 nxt_motor_set_speed(NXT_PORT_A, 50, 1);
\r
71 WaitEvent(TouchSensorOffEvent); /* Task is in waiting status until the Event comes */
\r
72 ClearEvent(TouchSensorOffEvent);
\r
73 nxt_motor_set_speed(NXT_PORT_A, 0, 1);
\r
79 /* TaskLCD executed every 500ms */
\r
82 ecrobot_status_monitor("EDS");
\r