mirror of
https://gitee.com/anod/open_agb_firm.git
synced 2025-05-07 06:14:12 +08:00
112 lines
3.4 KiB
C
112 lines
3.4 KiB
C
#pragma once
|
|
|
|
/*
|
|
* This file is part of libn3ds
|
|
* Copyright (C) 2024 derrek, profi200
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "types.h"
|
|
#include "mem_map.h"
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
// Based on code from https://github.com/smealum/ctrulib
|
|
|
|
#define HID_REGS_BASE (IO_COMMON_BASE + 0x46000)
|
|
#define REG_HID_PAD (*((vu16*)(HID_REGS_BASE + 0x0)) ^ 0xFFFu)
|
|
#define REG_HID_PADCNT *((vu16*)(HID_REGS_BASE + 0x2))
|
|
|
|
|
|
enum
|
|
{
|
|
KEY_A = BIT(0), // A
|
|
KEY_B = BIT(1), // B
|
|
KEY_SELECT = BIT(2), // Select
|
|
KEY_START = BIT(3), // Start
|
|
KEY_DRIGHT = BIT(4), // D-Pad Right
|
|
KEY_DLEFT = BIT(5), // D-Pad Left
|
|
KEY_DUP = BIT(6), // D-Pad Up
|
|
KEY_DDOWN = BIT(7), // D-Pad Down
|
|
KEY_R = BIT(8), // R
|
|
KEY_L = BIT(9), // L
|
|
KEY_X = BIT(10), // X
|
|
KEY_Y = BIT(11), // Y
|
|
KEY_ZL = BIT(14), // ZL (New 3DS only)
|
|
KEY_ZR = BIT(15), // ZR (New 3DS only)
|
|
KEY_TOUCH = BIT(20), // Touch (Not actually provided by HID)
|
|
KEY_CSTICK_RIGHT = BIT(24), // C-Stick Right (New 3DS only)
|
|
KEY_CSTICK_LEFT = BIT(25), // C-Stick Left (New 3DS only)
|
|
KEY_CSTICK_UP = BIT(26), // C-Stick Up (New 3DS only)
|
|
KEY_CSTICK_DOWN = BIT(27), // C-Stick Down (New 3DS only)
|
|
KEY_CPAD_RIGHT = BIT(28), // Circle Pad Right
|
|
KEY_CPAD_LEFT = BIT(29), // Circle Pad Left
|
|
KEY_CPAD_UP = BIT(30), // Circle Pad Up
|
|
KEY_CPAD_DOWN = BIT(31), // Circle Pad Down
|
|
|
|
// Generic catch-all directions
|
|
KEY_UP = KEY_DUP | KEY_CPAD_UP, // D-Pad Up or Circle Pad Up
|
|
KEY_DOWN = KEY_DDOWN | KEY_CPAD_DOWN, // D-Pad Down or Circle Pad Down
|
|
KEY_LEFT = KEY_DLEFT | KEY_CPAD_LEFT, // D-Pad Left or Circle Pad Left
|
|
KEY_RIGHT = KEY_DRIGHT | KEY_CPAD_RIGHT, // D-Pad Right or Circle Pad Right
|
|
|
|
// Masks
|
|
KEY_DPAD_MASK = KEY_DDOWN | KEY_DUP | KEY_DLEFT | KEY_DRIGHT,
|
|
KEY_CSTICK_MASK = KEY_CSTICK_DOWN | KEY_CSTICK_UP | KEY_CSTICK_LEFT | KEY_CSTICK_RIGHT,
|
|
KEY_CPAD_MASK = KEY_CPAD_DOWN | KEY_CPAD_UP | KEY_CPAD_LEFT | KEY_CPAD_RIGHT
|
|
};
|
|
|
|
// Extra keys use with hidGetExtraKeys()
|
|
enum
|
|
{
|
|
KEY_POWER = BIT(0),
|
|
KEY_POWER_HELD = BIT(1),
|
|
KEY_HOME = BIT(2), // Auto clears on release
|
|
KEY_WIFI = BIT(3),
|
|
KEY_SHELL = BIT(4), // Auto clears on open
|
|
KEY_BAT_CHARGING = BIT(5), // Auto clears when charging stops
|
|
KEY_VOL_SLIDER = BIT(6)
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
u16 x;
|
|
u16 y;
|
|
} TouchPos;
|
|
|
|
typedef struct
|
|
{
|
|
s16 x;
|
|
s16 y;
|
|
} CpadPos;
|
|
|
|
|
|
|
|
void hidInit(void); // For libn3ds internal usage only.
|
|
void hidScanInput(void);
|
|
u32 hidKeysHeld(void);
|
|
u32 hidKeysDown(void);
|
|
u32 hidKeysUp(void);
|
|
const TouchPos* hidGetTouchPosPtr(void);
|
|
const CpadPos* hidGetCpadPosPtr(void);
|
|
u32 hidGetExtraKeys(u32 clearMask);
|
|
|
|
#ifdef __cplusplus
|
|
} // extern "C"
|
|
#endif |