diff --git a/src/main/acio/acio.h b/src/main/acio/acio.h index 040f308..0636e95 100644 --- a/src/main/acio/acio.h +++ b/src/main/acio/acio.h @@ -11,6 +11,7 @@ #include "acio/kfca.h" #include "acio/mdxf.h" #include "acio/panb.h" +#include "acio/rvol.h" #define AC_IO_SOF 0xAA #define AC_IO_ESCAPE 0xFF @@ -88,6 +89,9 @@ struct ac_io_message { struct ac_io_hdxs_output hdxs_output; + struct ac_io_rvol_poll_in rvol_poll_in; + struct ac_io_rvol_poll_out rvol_poll_out; + struct ac_io_mdxf_poll_in mdxf_poll_in; struct ac_io_mdxf_light_out mdxf_light_out; }; diff --git a/src/main/acio/rvol.h b/src/main/acio/rvol.h new file mode 100644 index 0000000..ff9c9f9 --- /dev/null +++ b/src/main/acio/rvol.h @@ -0,0 +1,74 @@ +#ifndef AC_IO_RVOL_H +#define AC_IO_RVOL_H + +#include + +// technically RVOL also can poll with CMD 0x0113 +// but museca never uses this (it's controlled by if the watchdog is on/off) +#define AC_IO_CMD_RVOL_POLL 0x0112 +#define AC_IO_CMD_RVOL_SET_EXPAND_MODE 0x0114 +#define AC_IO_CMD_RVOL_AMP_CONTROL 0x0128 + +#pragma pack(push, 1) + +struct ac_io_rvol_buttons_1 { + uint8_t unk0 : 1; + uint8_t unk1 : 1; + uint8_t spinner_4 : 1; + uint8_t pedal : 1; + uint8_t spinner_5 : 1; + uint8_t unk5 : 1; + uint8_t unk6 : 1; + uint8_t unk7 : 1; +}; + +struct ac_io_rvol_buttons_2 { + uint8_t spinner_2 : 1; + uint8_t unk1 : 1; + uint8_t unk2 : 1; + uint8_t spinner_1 : 1; + uint8_t unk4 : 1; + uint8_t unk5 : 1; + uint8_t unk6 : 1; + uint8_t unk7 : 1; +}; + +struct ac_io_rvol_buttons_3 { + uint8_t unk0 : 1; + uint8_t unk1 : 1; + uint8_t unk2 : 1; + uint8_t spinner_3 : 1; + uint8_t unk4 : 1; + uint8_t unk5 : 1; + uint8_t unk6 : 1; + uint8_t unk7 : 1; +}; + +struct ac_io_rvol_poll_in { + uint8_t unk_0; + struct ac_io_rvol_buttons_1 buttons_1; + uint8_t unk_2_8[7]; + struct ac_io_rvol_buttons_2 buttons_2; + uint8_t unk_10; + struct ac_io_rvol_buttons_3 buttons_3; + uint8_t unk_12_15[4]; + uint8_t spinners[5]; + uint8_t unk_21_22[2]; +}; + +struct light_rgb { + uint8_t r; + uint8_t g; + uint8_t b; +}; + +struct ac_io_rvol_poll_out { + uint8_t unk0_3[4]; + struct light_rgb spinner[5]; + struct light_rgb title; + uint8_t unk22_31[10]; +}; + +#pragma pack(pop) + +#endif