diff --git a/hid/hdls/source/main.c b/hid/hdls/source/main.c index c35f843..fe98b31 100644 --- a/hid/hdls/source/main.c +++ b/hid/hdls/source/main.c @@ -19,23 +19,18 @@ int main(int argc, char* argv[]) // take a look at the graphics/opengl set of examples, which uses EGL instead. consoleInit(NULL); + // Configure our supported input layout: all players with standard controller styles + padConfigureInput(8, HidNpadStyleSet_NpadStandard); + + // Initialize the gamepad for reading all controllers + PadState pad; + padInitializeAny(&pad); + Result rc=0, rc2=0; bool initflag=0; - u32 i; printf("hdls example\n"); - hidScanInput(); - - // When hiddbgAttachHdlsVirtualDevice runs a new controller will become available. If CONTROLLER_HANDHELD is being internally, CONTROLLER_P1_AUTO would use the new virtual controller. Check which controller we're currently using and don't use CONTROLLER_P1_AUTO, so it doesn't switch to using the new controller later. - HidControllerID conID = hidGetHandheldMode() ? CONTROLLER_HANDHELD : CONTROLLER_PLAYER_1; - - printf("Connected controllers: "); - for(i=0; i<10; i++) { - if (hidIsControllerConnected(i)) printf("%d ", i); - } - printf("\n"); - rc = hiddbgInitialize(); if (R_FAILED(rc)) { printf("hiddbgInitialize(): 0x%x\n", rc); @@ -44,13 +39,13 @@ int main(int argc, char* argv[]) initflag = 1; } - u64 HdlsHandle=0; + HiddbgHdlsHandle HdlsHandle={0}; HiddbgHdlsDeviceInfo device = {0}; HiddbgHdlsState state={0}; // Set the controller type to Pro-Controller, and set the npadInterfaceType. device.deviceType = HidDeviceType_FullKey3; - device.npadInterfaceType = NpadInterfaceType_Bluetooth; + device.npadInterfaceType = HidNpadInterfaceType_Bluetooth; // Set the controller colors. The grip colors are for Pro-Controller on [9.0.0+]. device.singleColorBody = RGBA8_MAXALPHA(255,255,255); device.singleColorButtons = RGBA8_MAXALPHA(0,0,0); @@ -58,11 +53,11 @@ int main(int argc, char* argv[]) device.colorRightGrip = RGBA8_MAXALPHA(0,40,20); // Setup example controller state. - state.batteryCharge = 4; // Set battery charge to full. - state.joysticks[JOYSTICK_LEFT].dx = 0x1234; - state.joysticks[JOYSTICK_LEFT].dy = -0x1234; - state.joysticks[JOYSTICK_RIGHT].dx = 0x5678; - state.joysticks[JOYSTICK_RIGHT].dy = -0x5678; + state.battery_level = 4; // Set BatteryLevel to full. + state.analog_stick_l.x = 0x1234; + state.analog_stick_l.y = -0x1234; + state.analog_stick_r.x = 0x5678; + state.analog_stick_r.y = -0x5678; if (initflag) { rc = hiddbgAttachHdlsWorkBuffer(); @@ -81,12 +76,15 @@ int main(int argc, char* argv[]) // Main loop while (appletMainLoop()) { - // Scan all the inputs. This should be done once for each frame - hidScanInput(); + // Scan the gamepad. This should be done once for each frame + padUpdate(&pad); - // hidKeysDown returns information about which buttons have been - // just pressed in this frame compared to the previous one - u64 kDown = hidKeysDown(conID); + // padGetButtonsDown returns the set of buttons that have been + // newly pressed in this frame compared to the previous one + u64 kDown = padGetButtonsDown(&pad); + + if (kDown & HidNpadButton_Plus) + break; // break in order to return to hbmenu // Set state for the controller. You can also use hiddbgApplyHdlsStateList for this. if (R_SUCCEEDED(rc)) { @@ -95,51 +93,31 @@ int main(int argc, char* argv[]) state.buttons = 0; - if (hidKeysHeld(conID) & KEY_R) + if (padGetButtons(&pad) & HidNpadButton_R) state.buttons |= KEY_HOME; - if (hidKeysHeld(conID) & KEY_L) + if (padGetButtons(&pad) & HidNpadButton_L) state.buttons |= KEY_CAPTURE; - if (hidKeysHeld(conID) & KEY_DUP) - state.buttons |= KEY_ZR; + if (padGetButtons(&pad) & HidNpadButton_Up) + state.buttons |= HidNpadButton_ZR; - state.joysticks[JOYSTICK_LEFT].dx += 0x10; - if (state.joysticks[JOYSTICK_LEFT].dx > JOYSTICK_MAX) state.joysticks[JOYSTICK_LEFT].dx = JOYSTICK_MIN; - state.joysticks[JOYSTICK_RIGHT].dy -= 0x10; - if (state.joysticks[JOYSTICK_LEFT].dy < JOYSTICK_MIN) state.joysticks[JOYSTICK_LEFT].dy = JOYSTICK_MAX; + state.analog_stick_l.x += 0x10; + if (state.analog_stick_l.x > JOYSTICK_MAX) state.analog_stick_l.x = JOYSTICK_MIN; + state.analog_stick_r.y -= 0x10; + if (state.analog_stick_r.y < JOYSTICK_MIN) state.analog_stick_r.y = JOYSTICK_MAX; } - if (R_SUCCEEDED(rc) && (kDown & (KEY_A | KEY_X))) { - printf("Connected controllers:\n"); - for(i=0; i<10; i++) { - if (hidIsControllerConnected(i)) { - JoystickPosition tmpjoy[2]; - hidJoystickRead(&tmpjoy[0], i, JOYSTICK_LEFT); - hidJoystickRead(&tmpjoy[1], i, JOYSTICK_RIGHT); - - u8 interfacetype=0; - rc2 = hidGetNpadInterfaceType(i, &interfacetype); - if (R_FAILED(rc2)) printf("hidGetNpadInterfaceType(): 0x%x\n", rc2); - - HidPowerInfo powerinfo[3]={0}; - hidGetControllerPowerInfo(i, &powerinfo[0], 1); - hidGetControllerPowerInfo(i, &powerinfo[1], 2); - - printf("%d: type = 0x%x, devicetype = 0x%x, buttons = 0x%lx, stickL.dx = 0x%x, stickL.dy = 0x%x, stickR.dx = 0x%x, stickR.dy = 0x%x, interface = %d\n", i, hidGetControllerType(i), hidGetControllerDeviceType(i), hidKeysHeld(i), tmpjoy[0].dx, tmpjoy[0].dy, tmpjoy[1].dx, tmpjoy[1].dy, interfacetype); - - for (u32 poweri=0; poweri<3; poweri++) - printf("%d powerinfo[%d]: powerConnected = %d, isCharging = %d, batteryCharge = %d\n", i, poweri, powerinfo[poweri].powerConnected, powerinfo[poweri].isCharging, powerinfo[poweri].batteryCharge); - } - } + if (R_SUCCEEDED(rc) && (kDown & (HidNpadButton_A | HidNpadButton_X))) { + printf("Controllers state:\n"); + HidAnalogStickState analog_stick_l = padGetStickPos(&pad, 0); + HidAnalogStickState analog_stick_r = padGetStickPos(&pad, 1); + printf("buttons = 0x%lx, analog_stick_l.x = 0x%x, analog_stick_l.y = 0x%x, analog_stick_r.x = 0x%x, analog_stick_r.y = 0x%x\n", padGetButtons(&pad), analog_stick_l.x, analog_stick_l.y, analog_stick_r.x, analog_stick_r.y); printf("\n"); } // Update the console, sending a new frame to the display consoleUpdate(NULL); - - if (kDown & KEY_PLUS) - break; // break in order to return to hbmenu } if (initflag) {