1 /*---------------------------------------------------------------------------*
2   Project:  Cafe
3   File:     vpadTypes.h
4 
5   Copyright (C) 2011 Nintendo.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13  *---------------------------------------------------------------------------*/
14 
15 #ifndef __VPAD_TYPES_H__
16 #define __VPAD_TYPES_H__
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 #define VPAD_MAX_CONTROLLERS    VPADBASE_MAX_CONTROLLERS
23 
24 #define VPAD_BUTTON_LEFT        VPADBASE_BUTTON_LEFT
25 #define VPAD_BUTTON_RIGHT       VPADBASE_BUTTON_RIGHT
26 #define VPAD_BUTTON_DOWN        VPADBASE_BUTTON_DOWN
27 #define VPAD_BUTTON_UP          VPADBASE_BUTTON_UP
28 #define VPAD_BUTTON_A           VPADBASE_BUTTON_A
29 #define VPAD_BUTTON_B           VPADBASE_BUTTON_B
30 #define VPAD_BUTTON_X           VPADBASE_BUTTON_X
31 #define VPAD_BUTTON_Y           VPADBASE_BUTTON_Y
32 #define VPAD_BUTTON_HOME        VPADBASE_BUTTON_HOME
33 #define VPAD_TRIGGER_ZR         VPADBASE_TRIGGER_ZR
34 #define VPAD_TRIGGER_ZL         VPADBASE_TRIGGER_ZL
35 #define VPAD_TRIGGER_R          VPADBASE_TRIGGER_R
36 #define VPAD_TRIGGER_L          VPADBASE_TRIGGER_L
37 
38 #define VPAD_BUTTON_ZR          VPADBASE_TRIGGER_ZR
39 #define VPAD_BUTTON_ZL          VPADBASE_TRIGGER_ZL
40 #define VPAD_BUTTON_R           VPADBASE_TRIGGER_R
41 #define VPAD_BUTTON_L           VPADBASE_TRIGGER_L
42 
43 #define VPAD_BUTTON_STICK_R     VPADBASE_BUTTON_STICK_R
44 #define VPAD_BUTTON_STICK_L     VPADBASE_BUTTON_STICK_L
45 
46 #define VPAD_BUTTON_STICK_R_EMULATION_LEFT    (0x04000000)
47 #define VPAD_BUTTON_STICK_R_EMULATION_RIGHT   (0x02000000)
48 #define VPAD_BUTTON_STICK_R_EMULATION_UP      (0x01000000)
49 #define VPAD_BUTTON_STICK_R_EMULATION_DOWN    (0x00800000)
50 
51 #define VPAD_BUTTON_STICK_L_EMULATION_LEFT    (0x40000000)
52 #define VPAD_BUTTON_STICK_L_EMULATION_RIGHT   (0x20000000)
53 #define VPAD_BUTTON_STICK_L_EMULATION_UP      (0x10000000)
54 #define VPAD_BUTTON_STICK_L_EMULATION_DOWN    (0x08000000)
55 
56 // Typo definition for old sdk
57 #define VPAD_BUTTON_STICKL_R_EMULATION_LEFT    (0x04000000)
58 #define VPAD_BUTTON_STICKL_R_EMULATION_RIGHT   (0x02000000)
59 #define VPAD_BUTTON_STICKL_R_EMULATION_UP      (0x01000000)
60 #define VPAD_BUTTON_STICKL_R_EMULATION_DOWN    (0x00800000)
61 
62 #define VPAD_BUTTON_STICKL_L_EMULATION_LEFT    (0x40000000)
63 #define VPAD_BUTTON_STICKL_L_EMULATION_RIGHT   (0x20000000)
64 #define VPAD_BUTTON_STICKL_L_EMULATION_UP      (0x10000000)
65 #define VPAD_BUTTON_STICKL_L_EMULATION_DOWN    (0x08000000)
66 
67 
68 #define VPAD_BUTTON_PLUS        VPADBASE_BUTTON_PLUS
69 #define VPAD_BUTTON_MINUS       VPADBASE_BUTTON_MINUS
70 
71 
72 #define VPAD_BUTTON_MASK        0x0007ffff
73 #define VPAD_PLUS_BUTTON_MASK   0x7f87ffff
74 #define VPAD_BUTTON_RPT         0x80000000
75 
76 #define VPAD_RING_BUFS          16
77 #define VPAD_MAX_READ_BUFS      VPAD_RING_BUFS
78 
79 #define VPAD_READ_ERR_NONE           0
80 
81 #define VPAD_READ_ERR_NO_DATA       -1
82 #define VPAD_READ_ERR_NO_CONTROLLER -2
83 #define VPAD_READ_ERR_SETUP         -3
84 #define VPAD_READ_ERR_LOCKED        -4
85 #define VPAD_READ_ERR_INIT          -5
86 
87 
88 #define VPAD_BUTTON_PROC_MODE_LOOSE     0
89 #define VPAD_BUTTON_PROC_MODE_TIGHT     1
90 
91 
92 //======  Touch Panel  ======/
93 #define VPAD_TP_TOUCH_OFF      0
94 #define VPAD_TP_TOUCH_ON       1
95 
96 #define VPAD_TP_VALIDITY_VALID         0
97 #define VPAD_TP_VALIDITY_INVALID_X     1
98 #define VPAD_TP_VALIDITY_INVALID_Y     2
99 #define VPAD_TP_VALIDITY_INVALID_XY   (VPAD_TP_VALIDITY_INVALID_X | \
100                                        VPAD_TP_VALIDITY_INVALID_Y)
101 
102 
103 //====== Motor =====//
104 #define VPAD_MOTOR_PATTERN_SIZE_MAX      15
105 #define VPAD_MOTOR_PATTERN_LENGTH_MAX   120
106 
107 
108 // Battery level
109 #define VPAD_BATTERY_LEVEL_CHARGE     VPADBASE_BATTERY_LEVEL_CHARGE
110 #define VPAD_BATTERY_LEVEL_SHUTDOWN   VPADBASE_BATTERY_LEVEL_SHUTDOWN
111 #define VPAD_BATTERY_LEVEL_CRITICAL   VPADBASE_BATTERY_LEVEL_CRITICAL
112 #define VPAD_BATTERY_LEVEL_LOW        VPADBASE_BATTERY_LEVEL_LOW
113 #define VPAD_BATTERY_LEVEL_MEDIUM     VPADBASE_BATTERY_LEVEL_MEDIUM
114 #define VPAD_BATTERY_LEVEL_HIGH       VPADBASE_BATTERY_LEVEL_HIGH
115 #define VPAD_BATTERY_LEVEL_MAX        VPADBASE_BATTERY_LEVEL_MAX
116 
117 
118 // External mic Status
119 #define VPAD_EXTERNAL_MIC_ON          0x08
120 
121 
122 // Touch panel Resolution setting
123 typedef enum VPADTPResolution
124 {
125     VPAD_TP_1920x1080,
126     VPAD_TP_1280x720,
127     VPAD_TP_854x480
128 } VPADTPResolution ;
129 
130 typedef enum VPADGyroZeroDriftMode {
131     VPAD_GYRO_ZERODRIFT_LOOSE = 0,
132     VPAD_GYRO_ZERODRIFT_STANDARD,
133     VPAD_GYRO_ZERODRIFT_TIGHT,
134     VPAD_GYRO_ZERODRIFT_NONE
135 } VPADGyroZeroDriftMode ;
136 
137 
138 // LCD mode
139 typedef enum VPADLcdMode {
140     VPAD_LCD_MODE_MUTE = 0,
141     VPAD_LCD_MODE_GAME_CONTROLLER = 1,
142     VPAD_LCD_MODE_ON   = 0xFF
143 } VPADLcdMode;
144 
145 
146 typedef enum VPADPlayMode {
147     VPAD_PLAY_MODE_LOOSE = 0,
148     VPAD_PLAY_MODE_TIGHT
149 } VPADPlayMode ;
150 
151 typedef struct {
152     u16         x ;             // x coordinate value
153     u16         y ;             // y coordinate value
154     u16         touch ;         // Touch Check Flag
155     u16         validity ;      // Validity of coordinate value
156 } VPADTPData;
157 
158 // For Touch panel Calibration
159 typedef struct {
160     s16         offsetX;
161     s16         offsetY;
162     f32         scaleX;
163     f32         scaleY;
164 } VPADTPCalibrationParam;
165 
166 
167 typedef struct VPADDir{
168     Vec  X ;
169     Vec  Y ;
170     Vec  Z ;
171 } VPADDir ;
172 
173 
174 typedef struct VPADStatus {
175     u32   hold ;               // Flag for button hold
176     u32   trig ;               // Flag for button trigger
177     u32   release ;            // Flag for button release
178     Vec2  lStick ;             // Left stick
179     Vec2  rStick ;             // Right stick
180     Vec   acc ;                // Accelerometer value
181     f32   accValue ;           // Accelerometer magnitude
182     f32   accSpeed ;           // Accelerometer variation
183     Vec2  accVertical ;        // Vertical direction of DRC
184     Vec   gyro  ;              // Gyro sensor value     ( 1.0 = 360 dps )
185     Vec   angle ;              // Rotation angle value  ( 1.0 = 360 degree )
186 
187     s8    vpadErr ;            // Error status
188 
189     VPADTPData   tpData ;          // Structure for touch panel data
190     VPADTPData   tpFilteredData1 ; // Filtered touch panel data 1
191     VPADTPData   tpFilteredData2 ; // Filtered touch panel data 2
192 
193     VPADDir      dir ;         // Structure for 3D pose for DRC
194 
195     BOOL  headphoneStatus ;    // Headphone status
196                                // (TRUE : headphones are inserted )
197 
198     Vec   magnet ;             // magnetometer value
199 
200     u8    slideVolume ;           // Slide Volume value (0 - 255)
201 
202     u8    batteryLevel ;       // Battery level ( 0 - 6 )
203 
204     u8    micStatus ;       // Mic status
205 
206     u8    slideVolumeCalibrated ;
207 
208     u8 __paddings__[7];
209 } VPADStatus ;
210 
211 // Callback
212 typedef void   ( *VPADSamplingCallback )( s32  chan );
213 
214 #ifdef __cplusplus
215 }
216 #endif
217 
218 #endif  // __VPAD_TYPES_H__
219