Permalink
Cannot retrieve contributors at this time
Join GitHub today
GitHub is home to over 36 million developers working together to host and review code, manage projects, and build software together.
Sign up
Fetching contributors…
| /** | |
| * \usergroup{SceCtrl} | |
| * \usage{psp2/ctrl.h,SceCtrl_stub} | |
| */ | |
| #ifndef _PSP2_CTRL_H_ | |
| #define _PSP2_CTRL_H_ | |
| #include <stdint.h> | |
| #include <psp2/types.h> | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| typedef enum SceCtrlErrorCode { | |
| SCE_CTRL_ERROR_INVALID_ARG = 0x80340001, | |
| SCE_CTRL_ERROR_PRIV_REQUIRED = 0x80340002, | |
| SCE_CTRL_ERROR_NO_DEVICE = 0x80340020, | |
| SCE_CTRL_ERROR_NOT_SUPPORTED = 0x80340021, | |
| SCE_CTRL_ERROR_INVALID_MODE = 0x80340022, | |
| SCE_CTRL_ERROR_FATAL = 0x803400FF | |
| } SceCtrlErrorCode; | |
| /** Enumeration for the digital controller buttons. | |
| * @note - L1/R1/L3/R3 only can bind using ::sceCtrlPeekBufferPositiveExt2 and ::sceCtrlReadBufferPositiveExt2 | |
| * @note - Values bigger than 0x00010000 can be intercepted only with shell privileges | |
| */ | |
| typedef enum SceCtrlButtons { | |
| SCE_CTRL_SELECT = 0x00000001, //!< Select button. | |
| SCE_CTRL_L3 = 0x00000002, //!< L3 button. | |
| SCE_CTRL_R3 = 0x00000004, //!< R3 button. | |
| SCE_CTRL_START = 0x00000008, //!< Start button. | |
| SCE_CTRL_UP = 0x00000010, //!< Up D-Pad button. | |
| SCE_CTRL_RIGHT = 0x00000020, //!< Right D-Pad button. | |
| SCE_CTRL_DOWN = 0x00000040, //!< Down D-Pad button. | |
| SCE_CTRL_LEFT = 0x00000080, //!< Left D-Pad button. | |
| SCE_CTRL_LTRIGGER = 0x00000100, //!< Left trigger. | |
| SCE_CTRL_L2 = SCE_CTRL_LTRIGGER, //!< L2 button. | |
| SCE_CTRL_RTRIGGER = 0x00000200, //!< Right trigger. | |
| SCE_CTRL_R2 = SCE_CTRL_RTRIGGER, //!< R2 button. | |
| SCE_CTRL_L1 = 0x00000400, //!< L1 button. | |
| SCE_CTRL_R1 = 0x00000800, //!< R1 button. | |
| SCE_CTRL_TRIANGLE = 0x00001000, //!< Triangle button. | |
| SCE_CTRL_CIRCLE = 0x00002000, //!< Circle button. | |
| SCE_CTRL_CROSS = 0x00004000, //!< Cross button. | |
| SCE_CTRL_SQUARE = 0x00008000, //!< Square button. | |
| SCE_CTRL_INTERCEPTED = 0x00010000, //!< Input not available because intercepted by another application | |
| SCE_CTRL_PSBUTTON = SCE_CTRL_INTERCEPTED, //!< Playstation (Home) button. | |
| SCE_CTRL_HEADPHONE = 0x00080000, //!< Headphone plugged in. | |
| SCE_CTRL_VOLUP = 0x00100000, //!< Volume up button. | |
| SCE_CTRL_VOLDOWN = 0x00200000, //!< Volume down button. | |
| SCE_CTRL_POWER = 0x40000000 //!< Power button. | |
| } SceCtrlButtons; | |
| /** Enumeration for the controller types. */ | |
| typedef enum SceCtrlExternalInputMode { | |
| SCE_CTRL_TYPE_UNPAIRED = 0, //!< Unpaired controller | |
| SCE_CTRL_TYPE_PHY = 1, //!< Physical controller for VITA | |
| SCE_CTRL_TYPE_VIRT = 2, //!< Virtual controller for PSTV | |
| SCE_CTRL_TYPE_DS3 = 4, //!< DualShock 3 | |
| SCE_CTRL_TYPE_DS4 = 8 //!< DualShock 4 | |
| } SceCtrlExternalInputMode; | |
| /** Controller mode. */ | |
| typedef enum SceCtrlPadInputMode { | |
| /** Digital buttons only. */ | |
| SCE_CTRL_MODE_DIGITAL = 0, | |
| /** Digital buttons + Analog support. */ | |
| SCE_CTRL_MODE_ANALOG = 1, | |
| /** Same as ::SCE_CTRL_MODE_ANALOG, but with larger range for analog sticks. */ | |
| SCE_CTRL_MODE_ANALOG_WIDE = 2 | |
| } SceCtrlPadInputMode; | |
| /** Returned controller data */ | |
| typedef struct SceCtrlData { | |
| /** The current read frame. */ | |
| uint64_t timeStamp; | |
| /** Bit mask containing zero or more of ::SceCtrlButtons. */ | |
| unsigned int buttons; | |
| /** Left analogue stick, X axis. */ | |
| unsigned char lx; | |
| /** Left analogue stick, Y axis. */ | |
| unsigned char ly; | |
| /** Right analogue stick, X axis. */ | |
| unsigned char rx; | |
| /** Right analogue stick, Y axis. */ | |
| unsigned char ry; | |
| /** Up button */ | |
| uint8_t up; | |
| /** Right button */ | |
| uint8_t right; | |
| /** Down button */ | |
| uint8_t down; | |
| /** Left button */ | |
| uint8_t left; | |
| /** Left trigger (L2) */ | |
| uint8_t lt; | |
| /** Right trigger (R2) */ | |
| uint8_t rt; | |
| /** Left button (L1) */ | |
| uint8_t l1; | |
| /** Right button (R1) */ | |
| uint8_t r1; | |
| /** Triangle button */ | |
| uint8_t triangle; | |
| /** Circle button */ | |
| uint8_t circle; | |
| /** Cross button */ | |
| uint8_t cross; | |
| /** Square button */ | |
| uint8_t square; | |
| /** Reserved. */ | |
| uint8_t reserved[4]; | |
| } SceCtrlData; | |
| /** Structure to pass as argument to ::sceCtrlSetRapidFire */ | |
| typedef struct SceCtrlRapidFireRule { | |
| unsigned int Mask; | |
| unsigned int Trigger; | |
| unsigned int Target; | |
| unsigned int Delay; | |
| unsigned int Make; | |
| unsigned int Break; | |
| } SceCtrlRapidFireRule; | |
| /** Structure to pass as argument to ::sceCtrlSetActuator */ | |
| typedef struct SceCtrlActuator { | |
| unsigned char small; //!< Vibration strength of the small motor | |
| unsigned char large; //!< Vibration strength of the large motor | |
| uint8_t unk[6]; //!< Unknown | |
| } SceCtrlActuator; | |
| /** Structure to pass as argument to ::sceCtrlGetControllerPortInfo */ | |
| typedef struct SceCtrlPortInfo { | |
| uint8_t port[5]; //!< Controller type of each port (See ::SceCtrlExternalInputMode) | |
| uint8_t unk[11]; //!< Unknown | |
| } SceCtrlPortInfo; | |
| /** | |
| * Set the controller mode. | |
| * | |
| * @param[in] mode - One of ::SceCtrlPadInputMode. | |
| * | |
| * @return The previous mode, <0 on error. | |
| */ | |
| int sceCtrlSetSamplingMode(SceCtrlPadInputMode mode); | |
| /** | |
| * Set the controller extend mode. | |
| * | |
| * @param[in] mode - One of ::SceCtrlPadInputMode. | |
| * | |
| * @return The previous mode, <0 on error. | |
| */ | |
| int sceCtrlSetSamplingModeExt(SceCtrlPadInputMode mode); | |
| /** | |
| * Get the current controller mode. | |
| * | |
| * @param[out] pMode - Return value, see ::SceCtrlPadInputMode. | |
| * | |
| * @return The current mode, <0 on error. | |
| */ | |
| int sceCtrlGetSamplingMode(SceCtrlPadInputMode *pMode); | |
| /** | |
| * Get the controller state information (polling, positive logic). | |
| * | |
| * @param[in] port - use 0. | |
| * @param[out] *pad_data - see ::SceCtrlData. | |
| * @param[in] count - Buffers count. | |
| * | |
| * @return Buffers count, between 1 and 'count'. <0 on error. | |
| */ | |
| int sceCtrlPeekBufferPositive(int port, SceCtrlData *pad_data, int count); | |
| /** | |
| * Get the controller state information (polling, positive logic). | |
| * | |
| * This function will bind L/R trigger value to L1/R1 instead of LTRIGGER/RTRIGGER | |
| * | |
| * @param[in] port - use 0. | |
| * @param[out] *pad_data - see ::SceCtrlData. | |
| * @param[in] count - Buffers count. | |
| * | |
| * @return Buffers count, between 1 and 'count'. <0 on error. | |
| */ | |
| int sceCtrlPeekBufferPositiveExt2(int port, SceCtrlData *pad_data, int count); | |
| /** | |
| * Get the controller state information (polling, negative logic). | |
| * | |
| * @param[in] port - use 0. | |
| * @param[out] *pad_data - see ::SceCtrlData. | |
| * @param[in] count - Buffers count. | |
| * | |
| * @return Buffers count, between 1 and 'count'. <0 on error. | |
| */ | |
| int sceCtrlPeekBufferNegative(int port, SceCtrlData *pad_data, int count); | |
| /** | |
| * Get the controller state information (blocking, positive logic). | |
| * | |
| * @param[in] port - use 0. | |
| * @param[out] *pad_data - see ::SceCtrlData. | |
| * @param[in] count - Buffers count. | |
| * | |
| * @return Buffers count, between 1 and 'count'. <0 on error. | |
| */ | |
| int sceCtrlReadBufferPositive(int port, SceCtrlData *pad_data, int count); | |
| /** | |
| * Get the controller extended state information (blocking, positive logic). | |
| * | |
| * This function will bind L/R trigger value to L1/R1 instead of LTRIGGER/RTRIGGER | |
| * | |
| * @param[in] port - use 0. | |
| * @param[out] *pad_data - see ::SceCtrlData. | |
| * @param[in] count - Buffers count. | |
| * | |
| * @return Buffers count, between 1 and 'count'. <0 on error. | |
| */ | |
| int sceCtrlReadBufferPositiveExt2(int port, SceCtrlData *pad_data, int count); | |
| /** | |
| * Get the controller state information (blocking, negative logic). | |
| * | |
| * @param[in] port - use 0. | |
| * @param[out] *pad_data - see ::SceCtrlData. | |
| * @param[in] count - Buffers count. | |
| * | |
| * @return Buffers count, between 1 and 'count'. <0 on error. | |
| */ | |
| int sceCtrlReadBufferNegative(int port, SceCtrlData *pad_data, int count); | |
| /** | |
| * Set rules for button rapid fire | |
| * | |
| * @param[in] port - use 0. | |
| * @param[in] idx - rule index between 0-15 | |
| * @param[in] pRule - structure ::SceCtrlRapidFireRule. | |
| * | |
| * @return 0, <0 on error. | |
| */ | |
| int sceCtrlSetRapidFire(int port, int idx, const SceCtrlRapidFireRule* pRule); | |
| /** | |
| * Clear rules for button rapid fire | |
| * | |
| * @param[in] port - use 0. | |
| * @param[in] idx - rule index between 0-15 | |
| * | |
| * @return 0, <0 on error. | |
| */ | |
| int sceCtrlClearRapidFire(int port, int idx); | |
| /** | |
| * Control the actuator (vibrate) on paired controllers. | |
| * | |
| * @param[in] port - use 1 for the first paired controller, etc. | |
| * @param[in] state - see ::SceCtrlActuator | |
| * | |
| * @return 0, <0 on error. | |
| */ | |
| int sceCtrlSetActuator(int port, const SceCtrlActuator* pState); | |
| /** | |
| * Control the light bar on paired controllers. | |
| * | |
| * @param[in] port - use 1 for the first paired controller, etc. | |
| * @param[in] r - red intensity | |
| * @param[in] g - green intensity | |
| * @param[in] b - blue intensity | |
| * | |
| * @return 0, <0 on error. | |
| */ | |
| int sceCtrlSetLightBar(int port, SceUInt8 r, SceUInt8 g, SceUInt8 b); | |
| /** | |
| * Get controller port information. | |
| * | |
| * @param[out] info - see ::SceCtrlPortInfo | |
| * @return 0, <0 on error | |
| */ | |
| int sceCtrlGetControllerPortInfo(SceCtrlPortInfo *info); | |
| /** | |
| * Get controller battery information. | |
| * | |
| * @param[in] port - use 1 for the first paired controller, etc. | |
| * @param[out] batt - battery level, between 0-5, 0xEE charging, 0xEF charged | |
| * | |
| * @return 0, <0 on error. | |
| */ | |
| int sceCtrlGetBatteryInfo(int port, SceUInt8 *batt); | |
| /** | |
| * Sets intercept | |
| * | |
| * If true, allows the current thread to intercept controls. The use case | |
| * might be, for example, a game plugin that wishes to capture input without | |
| * having the input sent to the game thread. | |
| * @param[in] intercept Boolean value | |
| * | |
| * @return 0, < 0 on error | |
| */ | |
| int sceCtrlSetButtonIntercept(int intercept); | |
| /** | |
| * Gets intercept | |
| * | |
| * @param[out] intercept Boolean value | |
| * | |
| * @return 0, < 0 on error | |
| */ | |
| int sceCtrlGetButtonIntercept(int *intercept); | |
| /** | |
| * Check if multi controller is supported | |
| * | |
| * @return 1 if yes, 0 if no | |
| */ | |
| int sceCtrlIsMultiControllerSupported(void); | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* _PSP2CTRL_H_ */ |