2023-09-02 19:34:29 +00:00
|
|
|
#ifndef PR_OS_CONT_H
|
|
|
|
#define PR_OS_CONT_H
|
|
|
|
|
|
|
|
#include "ultratypes.h"
|
|
|
|
#include "os_message.h"
|
|
|
|
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
/* 0x0 */ u16 type;
|
|
|
|
/* 0x2 */ u8 status;
|
|
|
|
/* 0x3 */ u8 errno;
|
|
|
|
} OSContStatus; // size = 0x4
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
/* 0x0 */ u16 button;
|
|
|
|
/* 0x2 */ s8 stick_x;
|
|
|
|
/* 0x3 */ s8 stick_y;
|
|
|
|
/* 0x4 */ u8 errno;
|
|
|
|
} OSContPad; // size = 0x6
|
|
|
|
|
|
|
|
#define MAXCONTROLLERS 4
|
|
|
|
|
|
|
|
/* controller errors */
|
|
|
|
#define CONT_NO_RESPONSE_ERROR 0x8
|
|
|
|
#define CONT_OVERRUN_ERROR 0x4
|
|
|
|
|
|
|
|
/* Controller type */
|
|
|
|
#define CONT_ABSOLUTE 0x0001
|
|
|
|
#define CONT_RELATIVE 0x0002
|
|
|
|
#define CONT_JOYPORT 0x0004
|
|
|
|
#define CONT_EEPROM 0x8000
|
|
|
|
#define CONT_EEP16K 0x4000
|
|
|
|
#define CONT_TYPE_MASK 0x1F07
|
|
|
|
#define CONT_TYPE_NORMAL 0x0005
|
|
|
|
#define CONT_TYPE_MOUSE 0x0002
|
|
|
|
#define CONT_TYPE_VOICE 0x0100
|
|
|
|
|
|
|
|
/* Controller status */
|
|
|
|
#define CONT_CARD_ON 0x01
|
|
|
|
#define CONT_CARD_PULL 0x02
|
|
|
|
#define CONT_ADDR_CRC_ER 0x04
|
|
|
|
#define CONT_EEPROM_BUSY 0x80
|
|
|
|
|
2024-01-29 00:27:50 +00:00
|
|
|
#define R_CBUTTONS 0x0001
|
|
|
|
#define L_CBUTTONS 0x0002
|
|
|
|
#define D_CBUTTONS 0x0004
|
|
|
|
#define U_CBUTTONS 0x0008
|
|
|
|
#define R_TRIG 0x0010
|
|
|
|
#define L_TRIG 0x0020
|
|
|
|
#define R_JPAD 0x0100
|
|
|
|
#define L_JPAD 0x0200
|
|
|
|
#define D_JPAD 0x0400
|
|
|
|
#define U_JPAD 0x0800
|
|
|
|
#define START_BUTTON 0x1000
|
|
|
|
#define Z_TRIG 0x2000
|
|
|
|
#define B_BUTTON 0x4000
|
|
|
|
#define A_BUTTON 0x8000
|
|
|
|
|
|
|
|
/* Not original to libultra: button macros */
|
2023-09-02 19:34:29 +00:00
|
|
|
/* Buttons */
|
2024-01-29 00:27:50 +00:00
|
|
|
#define BTN_CRIGHT R_CBUTTONS
|
|
|
|
#define BTN_CLEFT L_CBUTTONS
|
|
|
|
#define BTN_CDOWN D_CBUTTONS
|
|
|
|
#define BTN_CUP U_CBUTTONS
|
|
|
|
#define BTN_R R_TRIG
|
|
|
|
#define BTN_L L_TRIG
|
|
|
|
#define BTN_RESET 0x0080 /* "neutral reset": Corresponds to holding L+R and pressing S */
|
|
|
|
#define BTN_DRIGHT R_JPAD
|
|
|
|
#define BTN_DLEFT L_JPAD
|
|
|
|
#define BTN_DDOWN D_JPAD
|
|
|
|
#define BTN_DUP U_JPAD
|
|
|
|
#define BTN_START START_BUTTON
|
|
|
|
#define BTN_Z Z_TRIG
|
|
|
|
#define BTN_B B_BUTTON
|
|
|
|
#define BTN_A A_BUTTON
|
2023-09-02 19:34:29 +00:00
|
|
|
|
|
|
|
#define CONT_ERR_NO_CONTROLLER PFS_ERR_NOPACK /* 1 */
|
|
|
|
#define CONT_ERR_CONTRFAIL CONT_OVERRUN_ERROR /* 4 */
|
|
|
|
#define CONT_ERR_INVALID PFS_ERR_INVALID /* 5 */
|
|
|
|
#define CONT_ERR_DEVICE PFS_ERR_DEVICE /* 11 */
|
|
|
|
#define CONT_ERR_NOT_READY 12
|
|
|
|
#define CONT_ERR_VOICE_MEMORY 13
|
|
|
|
#define CONT_ERR_VOICE_WORD 14
|
|
|
|
#define CONT_ERR_VOICE_NO_RESPONSE 15
|
|
|
|
|
|
|
|
|
|
|
|
s32 osContInit(OSMesgQueue* mq, u8* bitpattern, OSContStatus* data);
|
|
|
|
s32 osContStartQuery(OSMesgQueue* mq);
|
|
|
|
s32 osContStartReadData(OSMesgQueue* mq);
|
|
|
|
s32 osContSetCh(u8 ch);
|
|
|
|
void osContGetQuery(OSContStatus* data);
|
|
|
|
void osContGetReadData(OSContPad* data);
|
|
|
|
|
|
|
|
#endif
|