OSDN Git Service

Update lejos_osek to nxtOSEK_v205b0.zip
[nxt-jsp/etrobo-atk.git] / nxtOSEK / samples_c++ / PSPNxTest / PSPNxTest.cc
1 //\r
2 // PSPNxTest.cc\r
3 //\r
4 // Testing module for the Mindsensor PSPNx wrapper class\r
5 //\r
6 // 09.28.2008 Jon C. Martin\r
7 \r
8 \r
9 #include "PSPNx.h"\r
10 //\r
11 // To properly interface with LEJOS-OSEK, we need to use C linkage between our\r
12 // code and LEJOS-OSEK\r
13 //\r
14 \r
15 #define PSPNx_DEFAULT_PORT 0x02\r
16 extern "C" {\r
17 \r
18 #include "ecrobot_interface.h"\r
19 \r
20   DeclareTask(Task1);\r
21   \r
22   TASK(Task1) {\r
23         PSPNx psStick(NXT_PORT_S1, PSPNx_DEFAULT_PORT);\r
24         display_clear(0);\r
25 \r
26         while(1)\r
27         {\r
28                 //Mindsensor's support confirms that for certain gamepads, setting a mode\r
29                 //must be called several times until it becomes active\r
30                 psStick.setAnalog();\r
31                 psStick.update();\r
32 \r
33             U8 const * const rawData = psStick.getRawData();\r
34             \r
35             //grab the first two bytes of the raw data (the button data)\r
36             U16 rawDigitalPad = *(reinterpret_cast<U16 const * const>(rawData));\r
37             //flip the bits \r
38             rawDigitalPad ^= 0xffff;\r
39             \r
40             //display the bit set indicating whether or not a digital button is pressed\r
41             for(int i = 0; i < 16; ++i)\r
42             {\r
43                 display_goto_xy(i,0);\r
44                 //quick and dirty way to display each bit's status\r
45                 display_int((rawDigitalPad & (1 << i))? 1 : 0, 0);\r
46             }\r
47             \r
48             //display the analog stick data\r
49             display_goto_xy(0,1);\r
50             display_int(rawData[2], 0);\r
51             display_goto_xy(4,1);\r
52             display_int(rawData[3], 0);\r
53             display_goto_xy(0,2);\r
54             display_int(rawData[4], 0);\r
55             display_goto_xy(4,2);\r
56             display_int(rawData[5], 0);\r
57             \r
58                 //example of how to read and use the three distinct digital button states\r
59             if(psStick.pressed(PSPNx_SQUARE))\r
60             {\r
61                 display_clear(0);\r
62                 display_goto_xy(0,4);\r
63                 display_string("Pressed");\r
64             }\r
65             \r
66             if(psStick.held(PSPNx_SQUARE))\r
67             {\r
68                 display_goto_xy(0,5);\r
69                 display_string("Held");\r
70             }\r
71             \r
72             if(psStick.released(PSPNx_SQUARE))\r
73             {\r
74                 display_goto_xy(0,6);\r
75                 display_string("Released");\r
76             }\r
77             \r
78                 //press select to clear the display\r
79             if(psStick.pressed(PSPNx_SELECT))\r
80             {\r
81                 display_clear(0);\r
82             }\r
83             \r
84             display_update();\r
85         }\r
86   }\r
87 };\r