PowerBlocks SDK
 
Loading...
Searching...
No Matches
wiimote_extension.h
Go to the documentation of this file.
1
10
11#pragma once
12
13#include <stdint.h>
14#include <stddef.h>
15
18
19typedef enum {
20 WIIMOTE_EXTENSION_NONE = 0,
21 WIIMOTE_EXTENSION_NUNCHUK,
22 WIIMOTE_EXTENSION_CLASSIC_CONTROLLER,
23 WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_PRO,
24 WIIMOTE_EXTENSION_DRAWSOME_GRAPHICS_TABLET,
25 WIIMOTE_EXTENSION_GH_GUITAR,
26 WIIMOTE_EXTENSION_GH_DRUMS,
27 WIIMOTE_EXTENSION_DJ_HERO_TURNTABLE,
28 WIIMOTE_EXTENSION_TAIKO_DRUMS,
29 WIIMOTE_EXTENSION_UDRAW_GAME_TABLET,
30 WIIMOTE_EXTENSION_SHINKANSEN_CONTROLLER,
31 WIIMOTE_EXTENSION_BALANCE_BOARD
32} wiimote_extension_t;
33
34#define WIIMOTE_EXTENSION_NUNCHUCK_BUTTONS_Z (1<<0)
35#define WIIMOTE_EXTENSION_NUNCHUCK_BUTTONS_C (1<<1)
36
37// Works for classic controller pro too.
38#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_DPAD_UP (1<<0)
39#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_DPAD_LEFT (1<<1)
40#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_Z_RIGHT (1<<2)
41#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_X (1<<3)
42#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_A (1<<4)
43#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_Y (1<<5)
44#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_B (1<<6)
45#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_Z_LEFT (1<<7)
46#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_RIGHT_TRIGGER (1<<9)
47#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_PLUS (1<<10)
48#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_HOME (1<<11)
49#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_MINUS (1<<12)
50#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_LEFT_TRIGGER (1<<13)
51#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_DPAD_DOWN (1<<14)
52#define WIIMOTE_EXTENSION_CLASSIC_CONTROLLER_DPAD_RIGHT (1<<15)
53
54typedef struct {
55 uint16_t state; // Current frame of data. What ones are true and false
56 uint16_t held; // Last frame of data. "Held" buttons
57 uint16_t down; // True for 1 poll when pushed down
58 uint16_t up; // True for 1 poll when up
60
61typedef struct {
62 wiimote_extension_t type;
63 union {
64 struct {
65 wiimote_buttons buttons;
66 vec2 stick;
67 vec3 accelerometer;
68 } nunchuck;
69
70 struct {
71 wiimote_buttons buttons;
72 vec2 left_stick;
73 vec2 right_stick;
74 vec2 triggers; // {left, right}
75 } classic_controller;
76 };
78
79typedef int (*wiimote_extension_handle_phrase)(wiimote_extension_data_t* out, const uint8_t* data, size_t len);
80
81typedef struct {
82 wiimote_extension_t type;
83 wiimote_extension_handle_phrase phrase_data;
85
86// Attemps to phrase the wiimote extension data.
87// NULL is acceptable for a mapper
88extern void wiimote_extension_phrase_data(wiimote_extension_data_t* out, const wiimote_extension_mapper_t* mapper, const uint8_t* data, size_t size);
89
90// Returns the wiimote extension type enum
91// based on the 6 byte code from 0x04A40000 in the wiimote
92extern wiimote_extension_t wiimote_extension_get_type(const uint8_t* byte_code);
93
94// Prints an error if an extension type is unsupported
95extern const char* wiimote_extension_get_name(wiimote_extension_t type);
96
97// Gets the extension mapper for a controller, or NULL if unknown
98extern const wiimote_extension_mapper_t* wiimote_extension_get_mapper(wiimote_extension_t type);
99
100// Generic helper for settings buttons
101extern void wiimote_set_button_helper(wiimote_buttons* buttons, uint16_t next_state);
Definition vec2.h:27
Definition vec3.h:16
Definition wiimote_extension.h:54
Definition wiimote_extension.h:61
Definition wiimote_extension.h:81
Simple 2D vectors.
Simple 3D vectors.