/*---------------------------------------------------------------------------* Project: Cafe File: vpadTypes.h Copyright (C) 2011 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ #ifndef __VPAD_TYPES_H__ #define __VPAD_TYPES_H__ #ifdef __cplusplus extern "C" { #endif #define VPAD_MAX_CONTROLLERS VPADBASE_MAX_CONTROLLERS #define VPAD_BUTTON_LEFT VPADBASE_BUTTON_LEFT #define VPAD_BUTTON_RIGHT VPADBASE_BUTTON_RIGHT #define VPAD_BUTTON_DOWN VPADBASE_BUTTON_DOWN #define VPAD_BUTTON_UP VPADBASE_BUTTON_UP #define VPAD_BUTTON_A VPADBASE_BUTTON_A #define VPAD_BUTTON_B VPADBASE_BUTTON_B #define VPAD_BUTTON_X VPADBASE_BUTTON_X #define VPAD_BUTTON_Y VPADBASE_BUTTON_Y #define VPAD_BUTTON_HOME VPADBASE_BUTTON_HOME #define VPAD_TRIGGER_ZR VPADBASE_TRIGGER_ZR #define VPAD_TRIGGER_ZL VPADBASE_TRIGGER_ZL #define VPAD_TRIGGER_R VPADBASE_TRIGGER_R #define VPAD_TRIGGER_L VPADBASE_TRIGGER_L #define VPAD_BUTTON_ZR VPADBASE_TRIGGER_ZR #define VPAD_BUTTON_ZL VPADBASE_TRIGGER_ZL #define VPAD_BUTTON_R VPADBASE_TRIGGER_R #define VPAD_BUTTON_L VPADBASE_TRIGGER_L #define VPAD_BUTTON_STICK_R VPADBASE_BUTTON_STICK_R #define VPAD_BUTTON_STICK_L VPADBASE_BUTTON_STICK_L #define VPAD_BUTTON_STICK_R_EMULATION_LEFT (0x04000000) #define VPAD_BUTTON_STICK_R_EMULATION_RIGHT (0x02000000) #define VPAD_BUTTON_STICK_R_EMULATION_UP (0x01000000) #define VPAD_BUTTON_STICK_R_EMULATION_DOWN (0x00800000) #define VPAD_BUTTON_STICK_L_EMULATION_LEFT (0x40000000) #define VPAD_BUTTON_STICK_L_EMULATION_RIGHT (0x20000000) #define VPAD_BUTTON_STICK_L_EMULATION_UP (0x10000000) #define VPAD_BUTTON_STICK_L_EMULATION_DOWN (0x08000000) // Typo definition for old sdk #define VPAD_BUTTON_STICKL_R_EMULATION_LEFT (0x04000000) #define VPAD_BUTTON_STICKL_R_EMULATION_RIGHT (0x02000000) #define VPAD_BUTTON_STICKL_R_EMULATION_UP (0x01000000) #define VPAD_BUTTON_STICKL_R_EMULATION_DOWN (0x00800000) #define VPAD_BUTTON_STICKL_L_EMULATION_LEFT (0x40000000) #define VPAD_BUTTON_STICKL_L_EMULATION_RIGHT (0x20000000) #define VPAD_BUTTON_STICKL_L_EMULATION_UP (0x10000000) #define VPAD_BUTTON_STICKL_L_EMULATION_DOWN (0x08000000) #define VPAD_BUTTON_PLUS VPADBASE_BUTTON_PLUS #define VPAD_BUTTON_MINUS VPADBASE_BUTTON_MINUS #define VPAD_BUTTON_MASK 0x0007ffff #define VPAD_PLUS_BUTTON_MASK 0x7f87ffff #define VPAD_BUTTON_RPT 0x80000000 #define VPAD_RING_BUFS 16 #define VPAD_MAX_READ_BUFS VPAD_RING_BUFS #define VPAD_READ_ERR_NONE 0 #define VPAD_READ_ERR_NO_DATA -1 #define VPAD_READ_ERR_NO_CONTROLLER -2 #define VPAD_READ_ERR_SETUP -3 #define VPAD_READ_ERR_LOCKED -4 #define VPAD_READ_ERR_INIT -5 #define VPAD_BUTTON_PROC_MODE_LOOSE 0 #define VPAD_BUTTON_PROC_MODE_TIGHT 1 //====== Touch Panel ======/ #define VPAD_TP_TOUCH_OFF 0 #define VPAD_TP_TOUCH_ON 1 #define VPAD_TP_VALIDITY_VALID 0 #define VPAD_TP_VALIDITY_INVALID_X 1 #define VPAD_TP_VALIDITY_INVALID_Y 2 #define VPAD_TP_VALIDITY_INVALID_XY (VPAD_TP_VALIDITY_INVALID_X | \ VPAD_TP_VALIDITY_INVALID_Y) //====== Motor =====// #define VPAD_MOTOR_PATTERN_SIZE_MAX 15 #define VPAD_MOTOR_PATTERN_LENGTH_MAX 120 // Battery level #define VPAD_BATTERY_LEVEL_CHARGE VPADBASE_BATTERY_LEVEL_CHARGE #define VPAD_BATTERY_LEVEL_SHUTDOWN VPADBASE_BATTERY_LEVEL_SHUTDOWN #define VPAD_BATTERY_LEVEL_CRITICAL VPADBASE_BATTERY_LEVEL_CRITICAL #define VPAD_BATTERY_LEVEL_LOW VPADBASE_BATTERY_LEVEL_LOW #define VPAD_BATTERY_LEVEL_MEDIUM VPADBASE_BATTERY_LEVEL_MEDIUM #define VPAD_BATTERY_LEVEL_HIGH VPADBASE_BATTERY_LEVEL_HIGH #define VPAD_BATTERY_LEVEL_MAX VPADBASE_BATTERY_LEVEL_MAX // External mic Status #define VPAD_EXTERNAL_MIC_ON 0x08 // Touch panel Resolution setting typedef enum VPADTPResolution { VPAD_TP_1920x1080, VPAD_TP_1280x720, VPAD_TP_854x480 } VPADTPResolution ; typedef enum VPADGyroZeroDriftMode { VPAD_GYRO_ZERODRIFT_LOOSE = 0, VPAD_GYRO_ZERODRIFT_STANDARD, VPAD_GYRO_ZERODRIFT_TIGHT, VPAD_GYRO_ZERODRIFT_NONE } VPADGyroZeroDriftMode ; // LCD mode typedef enum VPADLcdMode { VPAD_LCD_MODE_MUTE = 0, VPAD_LCD_MODE_GAME_CONTROLLER = 1, VPAD_LCD_MODE_ON = 0xFF } VPADLcdMode; typedef enum VPADPlayMode { VPAD_PLAY_MODE_LOOSE = 0, VPAD_PLAY_MODE_TIGHT } VPADPlayMode ; typedef struct { u16 x ; // x coordinate value u16 y ; // y coordinate value u16 touch ; // Touch Check Flag u16 validity ; // Validity of coordinate value } VPADTPData; // For Touch panel Calibration typedef struct { s16 offsetX; s16 offsetY; f32 scaleX; f32 scaleY; } VPADTPCalibrationParam; typedef struct VPADDir{ Vec X ; Vec Y ; Vec Z ; } VPADDir ; typedef struct VPADStatus { u32 hold ; // Flag for button hold u32 trig ; // Flag for button trigger u32 release ; // Flag for button release Vec2 lStick ; // Left stick Vec2 rStick ; // Right stick Vec acc ; // Accelerometer value f32 accValue ; // Accelerometer magnitude f32 accSpeed ; // Accelerometer variation Vec2 accVertical ; // Vertical direction of DRC Vec gyro ; // Gyro sensor value ( 1.0 = 360 dps ) Vec angle ; // Rotation angle value ( 1.0 = 360 degree ) s8 vpadErr ; // Error status VPADTPData tpData ; // Structure for touch panel data VPADTPData tpFilteredData1 ; // Filtered touch panel data 1 VPADTPData tpFilteredData2 ; // Filtered touch panel data 2 VPADDir dir ; // Structure for 3D pose for DRC BOOL headphoneStatus ; // Headphone status // (TRUE : headphones are inserted ) Vec magnet ; // magnetometer value u8 slideVolume ; // Slide Volume value (0 - 255) u8 batteryLevel ; // Battery level ( 0 - 6 ) u8 micStatus ; // Mic status u8 slideVolumeCalibrated ; u8 __paddings__[7]; } VPADStatus ; // Callback typedef void ( *VPADSamplingCallback )( s32 chan ); #ifdef __cplusplus } #endif #endif // __VPAD_TYPES_H__