OSDN Git Service

Update lejos_osek to nxtOSEK_v205b0.zip
[nxt-jsp/etrobo-atk.git] / nxtOSEK / samples / eds / eds.c
1 /* eds.c */ \r
2 #include "kernel.h"\r
3 #include "kernel_id.h"\r
4 #include "ecrobot_interface.h"\r
5 \r
6 /* OSEK declarations */\r
7 DeclareCounter(SysTimerCnt);\r
8 DeclareTask(EventDispatcher); \r
9 DeclareTask(EventHandler);\r
10 DeclareTask(TaskLCD);\r
11 \r
12 DeclareEvent(TouchSensorOnEvent); /* Event declaration */\r
13 DeclareEvent(TouchSensorOffEvent); /* Event declaration */ \r
14 \r
15 /* LEJOS OSEK hooks */\r
16 void ecrobot_device_initialize()\r
17 {\r
18   nxt_motor_set_speed(NXT_PORT_A, 0, 1); \r
19 }\r
20 \r
21 void ecrobot_device_terminate()\r
22 {\r
23   nxt_motor_set_speed(NXT_PORT_A, 0, 1); \r
24 }\r
25 \r
26 /* LEJOS OSEK hook to be invoked from an ISR in category 2 */\r
27 void user_1ms_isr_type2(void)\r
28 {\r
29   StatusType ercd;\r
30 \r
31   ercd = SignalCounter(SysTimerCnt); /* Increment OSEK Alarm Counter */\r
32   if(ercd != E_OK)\r
33   {\r
34     ShutdownOS(ercd);\r
35   }\r
36 }\r
37 \r
38 /* EventDispatcher executed every 1ms */\r
39 TASK(EventDispatcher)\r
40 {\r
41   static U8 TouchSensorStatus_old = 0;\r
42   U8 TouchSensorStatus; \r
43 \r
44   TouchSensorStatus = ecrobot_get_touch_sensor(NXT_PORT_S1);\r
45 \r
46   if (TouchSensorStatus == 1 && TouchSensorStatus_old == 0)\r
47   {\r
48     /* Send a Touch Sensor ON Event to the Handler */ \r
49     SetEvent(EventHandler, TouchSensorOnEvent);\r
50   }\r
51   else if (TouchSensorStatus == 0 && TouchSensorStatus_old == 1)\r
52   {\r
53     /* Send a Touch Sensor OFF Event to the Handler */ \r
54     SetEvent(EventHandler, TouchSensorOffEvent);\r
55   }\r
56 \r
57   TouchSensorStatus_old = TouchSensorStatus;\r
58 \r
59   TerminateTask();\r
60 }\r
61 \r
62 /* EventHandler executed by OSEK Events */\r
63 TASK(EventHandler)\r
64 {\r
65   while(1)\r
66   {\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
70 \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
74   }\r
75 \r
76   TerminateTask();\r
77 }\r
78 \r
79 /* TaskLCD executed every 500ms */\r
80 TASK(TaskLCD)\r
81 {\r
82   ecrobot_status_monitor("EDS");\r
83 \r
84   TerminateTask();\r
85 }\r
86 \r