Path: blob/master/src/pc/controller/controller_entry_point.c
7861 views
#include "macros.h"12#include "lib/src/libultra_internal.h"3#include "lib/src/osContInternal.h"45#include "controller_recorded_tas.h"6#include "controller_sdl.h"7#include "controller_keyboard.h"89#include "game/settings.h"1011static struct ControllerAPI *controller_implementations[] = {12&controller_recorded_tas,13&controller_sdl,14&controller_keyboard,15};1617s32 osContInit(UNUSED OSMesgQueue *mq, u8 *controllerBits, UNUSED OSContStatus *status) {18for (size_t i = 0; i < sizeof(controller_implementations) / sizeof(struct ControllerAPI *); i++) {19controller_implementations[i]->init();20}21*controllerBits = 1;22return 0;23}2425s32 osContStartReadData(UNUSED OSMesgQueue *mesg) {26return 0;27}2829s32 osMotorStart(UNUSED void *pfs) {30// Since rumble stops by osMotorStop, its duration is not nessecary.31// Set it to 5 seconds and hope osMotorStop() is called in time.32if (configRumbleStrength > 0.0f)33controller_rumble_play(configRumbleStrength, 5.0f);34return 0;35}3637s32 osMotorStop(UNUSED void *pfs) {38if (configRumbleStrength > 0.0f)39controller_rumble_stop();40return 0;41}4243u32 osMotorInit(UNUSED OSMesgQueue *mq, UNUSED void *pfs, UNUSED s32 port) {44return 0; // rumble is initialized in the specific backend's init function45}4647void osContGetReadData(OSContPad *pad) {48pad->button = 0;49pad->stick_x = 0;50pad->stick_y = 0;51pad->stick2_x = 0;52pad->stick2_y = 0;53pad->errnum = 0;5455for (size_t i = 0; i < sizeof(controller_implementations) / sizeof(struct ControllerAPI *); i++) {56controller_implementations[i]->read(pad);57}58}5960void controller_rumble_play(float str, float time) {61for (size_t i = 0; i < sizeof(controller_implementations) / sizeof(struct ControllerAPI *); i++) {62if (controller_implementations[i]->rumble_play)63controller_implementations[i]->rumble_play(str, time);64}65}6667void controller_rumble_stop(void) {68for (size_t i = 0; i < sizeof(controller_implementations) / sizeof(struct ControllerAPI *); i++) {69if (controller_implementations[i]->rumble_stop)70controller_implementations[i]->rumble_stop();71}72}7374