jonnyhaystack / haybox Goto Github PK
View Code? Open in Web Editor NEWModular cross-platform firmware for digital or mixed analog/digital game controllers
License: GNU General Public License v3.0
Modular cross-platform firmware for digital or mixed analog/digital game controllers
License: GNU General Public License v3.0
I'm curious if there's a rough plan for when the next release will be, and how often you intend to make future releases. I understand there are some big changes in the works like correcting values in Ultimate Mode that you may want to wait on before releasing. Changes like the controller identifier that was used changing to fix the dpad issue on Linux would be great to have in a release. I unfortunately don't find building with PlatformIO to be very accessible, so I feel kind of stuck on the last stable release for now. (I should probably try to figure out building HayBox someday, as I think that's the only way to add a new mode, and it would be cool to make a new mode for rhythm games like Taiko no Tatsujin.)
I have a GameCube running Picoboot and I've configured it so that if you hold B on a controller when turning it on, it will go straight to Game Boy Interface instead of Swiss. I can't seem to get this to work with my Open-Frame1 running HayBox. Also, even when Swiss loads, I find that I can't move through the menu until I unplug the cable and plug it back in. Does the GameCube have to already be on and do you then have to plug in the controller for it to work normally?
In my case the controller is already plugged in on both ends, I hold the B button, then I press the GameCube's power button.
Am I perhaps just running into a conflict? I see in the readme that holding B on plugin goes into Brook board mode. So if the controller isn't receiving power until the console turns on, maybe that's when it counts as a plug-in, and then because I'm holding B it goes into that mode.
It seems like I also can't move through the menus if I boot while not holding anything until I replug the cable. Do I have a wonky cable/port or is this expected behavior? Once it's working, it keeps working fine, but I think I have been running into these sorts of initialization issues now and then.
As the title said.
I am a b0xx r2 user, I am using the directinput mode with the P+ setting. Thank you.
I'm attempting to use this firmware on my Smashbox, which lacks a select and home button. If I set these to NULL in the pinout file, it throws errors. If I delete the lines they throw errors.
I have a b0xx revision 2 that I recently flashed HayBox onto. Which has been great, thank you. I normally leave my b0xx plugged in with usb-c to my pc running Debian Linux. Something I've noticed after flashing HayBox is that with the b0xx plugged in, if I put the pc into suspend/sleep, the pc will wake up again after a couple seconds. I did not observe this behavior when I had stock b0xx firmware. My current solution is to unplug the b0xx before entering suspend.
One solution I tried to circumvent this was preventing the specific device from being able to wakeup the pc.
/etc/udev/rules.d/90-usb-wakeup.rules
# Disable waking up from b0xx
ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="8036", ATTR{power/wakeup}="disabled"
# Disable waking up from Logitech mouse usb receiver
ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c548", ATTR{power/wakeup}="disabled"
I got the vendor & product ids from the output of lsusb
:
Bus 001 Device 011: ID 046d:c548 Logitech, Inc. Logi Bolt Receiver
Bus 001 Device 013: ID 2341:8036 Arduino SA Leonardo (CDC ACM, HID)
...
The rule to disable wakeup appears to be working for my Logitech mouse, but not the b0xx unfortunately. The wakeup of the pc after a couple seconds of entering suspend persists.
Let me know if there's logs or any additional info I could provide.
Hello,
I am using a LBX plugged to a Windows 10 PC via USB (so Dinput should be default). I can switch between input modes just fine, and I managed to remap buttons successfully (thank you!)
However the Keyboard mode that comes with the latest build doesn't seem to fulfil its purpose - no keys actuate.
The latest build seem to have assigned the keyboard key "A" to "L", "B" to "Left" etc... But maybe some extra modifications are needed to get it to work. I'm sorry I can't figure it out by myself (lack of programmation skills), the documentation does say that the <UpdateKeys()> is where things need to be changed, but it's unclear to me what needs to be done.
Thanks for your help
Currently I don't think it is possible to restart training mode, since the hardcoded shortcut for that is L+R+A. At least when using Ultimate mode via usb.
Since there is no actual L button on most controllers. So currently I have created this macro for myself (AtomToast/HayBox@f3000f2), where I can press mx+my+z to also trigger buttonL and a.
Do you think something like this would make sense in the main firmware too?
Are there any legality concerns?
Alternative implementation/buttons?
Hi, I am buying a friends LBX and they had someone else configure it for them. This LBX currently has crane's flashed onto it and I am trying to use it on my Windows 11 PC. I figured a good first step would be to upgrade to HayBox. I don't have much experience with VSC. I used GIT to clone the repository and followed the steps on the main page. After searching and trying different things I still had no change and would get the following error.
I went to device manager and changed the COM port being used to make sure it wasn't being used elsewhere. I am stumped. The LBX shows up as Arduino Leonardo in devices, but will not show up as a gamepad. Any help would be much appreciated.
For use on an Open-Frame1 (Pi Pico + Open-Frame1 PCB), would I just build the Pico version? How does it know how many buttons I have and such?
I'm also curious if it's possible to build this without VSCode/VSCodium, both because I'd rather not install an extra editor I don't want to use, and because Guix dosen't have VSCodium packaged, so it would be difficult to get it on my main PC. If necessary I'll either have a trusted friend build the firmware for me or have to use a different computer for setup I suppose.
Is there a reason that prebuilt firmware is not provided at all, by the way? I see in the screenshots in the readme that you can build for a few different controllers, but then I wonder why you couldn't put the firmware for them all in the releases. Maybe you expect people to tweak some things before building, but if any of the builds would be usable by default, I think it'd be worth providing binaries.
BTW, thank you very much for releasing this project as free (as in freedom) software.
They want you to use the right stick flicked in one of 8 directions in a radial menu to select an ability. For some reason with my Open-Frame1 running HayBox it won't select the ability using the c-stick buttons. I can change where the arrow points, but the menu stays stuck open, similar to if you keep the stick held on a regular controller. I figured maybe it was a stick angle issue, but I don't notice any different behavior when using the Mod X/Y buttons. I was using Ultimate mode, but I don't notice a major difference with the other platform fighter modes. Maybe it expects the stick to return to center slightly more gradually instead of jumping back to no stick input. Using a more traditional controller (8bitdo Ultimate controller) the menu closes after I flick the stick in a direction and it then selects that ability.
Could c-stick behavior be altered so that it emulates the stick returning to center with stick values the whole way as if you'd quickly flicked it? I imagine if it worked that way, it would still be able to work the same in Smash as well.
This game is almost completely playable even in FGC mode except for this weird right stick requirement, it's a real shame I can't find a way to make it work. From what I've seen the PC version lets you bind buttons to changing the abilities left/right around the menus, but I couldn't find a way to configure the controls on the Switch version, so I think you're forced to just use the defaults, including right stick for that ability menu.
Are there any plans to add PlayStation support? Would that be possible? I'm not sure if I can have one controller that does it all or if I need at least 2 with different firmware on each.
Please add instructions for the .ini files for Mac into the ReadMe
The location is
/Users/USER/Library/Application Support/Slippi Launcher/netplay/Slippi Dolphin.app/Contents/Resources/Sys/Config/Profiles/GCPad
To get into to it, you have to first go to /Users/USER/Library/Application\ Support/Slippi\ Launcher/netplay/Slippi\ Dolphin.app/
, right click on Dolphin.app, and click "open contents", then you have to navigate to Contents/Resources/Sys/Config/Profiles/GCPad
and put the .ini files there.
In the advanced tutorial for DI, it is not possible to finish it because the stick seems to not be able to go to the correct angle and/or depth. It asks you to hold down left until you're able to survive the hit, but it's not possible.
I don't know what a good fix for this would be, but it would be nice if there was a way to finish the tutorial with a box.
Is the SNES supported in HayBox yet? I recently ran into a USB-C to SNES cable on Handheld Legend and it says it's compatible with the Frame1 and B0XX.
https://handheldlegend.com/products/retrosix-usb-c-to-snes-cable-for-super-gamepad
I'm thinking of ordering one, but I was worried it might not do anything yet with HayBox firmware.
When playing rivals of aether, with the rivals of aether mode enabled, on an LBX, the z button and Dpad modifier buttons do not work.
On Linux, some of the coordinates (mostly higher magnitude ones it seems) are off by 1. E.g. cardinals are 0.9875 (79) instead of 1.0 (80)
On macOS, there have been reports from users that it isn't showing up as a HID gamepad at all, but keyboard mode is working fine.
Probably going to have to compare against other HID report descriptors again (e.g. Arduino HID) to figure out a solution. Linux issue possibly fixable through Dolphin profile change though?
So the standard 8-button layout found in something like Street Fighter is:
X Y *R* _L_ A B *RT* _LT_
However, some folks (myself included) prefer having the *R*s and _L_s swapped like so:
X Y _L_ *R* A B _LT_ *RT*
Though I personally prefer the latter, I understand that the former is industry standard.
Here's the issue: neither of these layouts are implemented in the current release. Instead, we have:
X Y _L_ *R* A B *RT* _LT_
...which I presume is unintended.
I'm playing on a Steam Deck (in a dock) if it matters. I can move around and stuff in Melee Mode but then the attack buttons aren't in the right places for this kind of game. When I switch to FGC mode the attack buttons are all in the right spots (according to the inputs shown in training mode) but I can't move anymore.
Also, are the default layouts for the modes displayed anywhere? I'm not even entirely sure what each button is bound to. What is normally C-Down opens up the menu as if I'd hit the Steam button. (Maybe like a Home or something?)
If I'm in FGC mode when I start Skullgirls I can't even seem to get past the menu where you select which controller is used by which player. When I started up in another mode I was able to get past this. It seems to want me to use left/right here.
Do I need to rebind keys for this to work or have I hit a bug? I don't usually play traditional fighters so I haven't tested this mode with other games. I mostly play Smash and Rivals.
edit: in the controls screen when trying to rebind movements it doesn't detect any press from the left side's four buttons at all.
edit2: Using Open-Frame1 PCB, so I have 20 buttons.
There doesn't seem to be a good control layout for Smash 64. X to jump does nothing. If you jump with the C buttons it's harder to hit A to attack since it's all with the thumb. If you use tap jump it makes it difficult to jump and use your neutral special without doing your up special.
Is there a method to do this on PC?
I have been editing code for the Ultimate mode to change/fix a few things:
This means the leftStickX
value is too high. By reducing the multiplier by 1, it started working properly.
But, this piqued my interest in the values, the differences between HayBox and the stock B0XX firmware, and how these values work. It seems that directly assigning a value to outputs.leftStickX
does not work as I would expect; the value ends up being different at runtime (NOTE: I am testing these values using SDL). I'm curious why this is, and if there's a way to set a value I'd expect directly (e.g. 9680
)
The default values for the B0XX firmware for left/right while holding modY are -9681
and 9680
respectively, while HayBox's values are -13435
and 13434
.
From B0XX's Smash Ultimate manual, "Modifier Y contains the slowest walk in the game."
I'm not sure if this is actually true, as with some testing I've been able to walk with lower values, although I'm not sure if the walking speed was actually slower. This does beg the question though; with HayBox's mod Y, are we walking as slow as the game will allow? Or, is this even a goal of using mod Y with HayBox?
Also, leftStickX
values without any modifiers are much higher, akin to an actual gcc.
I'm more than happy to test out differences between the firmware, an official gcc that I own, etc. if you'd like more data.
I am able to get the controller to register on my pc by holding Z as a DInput Controller. It also works on my switch by holding X plugged into the dock, and as a GCC controller by plugging into the adapter.
However, if I simply plug the usb into my computer without holding anything (which should use XInput backend), nothing happens. The USB device is unidentified ("Unknown USB Device (Invalid Configuration Descriptor)"). I have tried reinstalling my drivers, and I have also tried it on different PC's, all giving the exact same error... I am kind of at a loss of what to do next.. Any help would be greatly appreciated!
The GP2040-CE firmware remembers your last mode when you unplug the controller, which I find to be pretty handy. I personally use Melee Mode less than the other modes, so if I could have it remember Ultimate/Rivals mode, it would save me a lot of trouble. This would probably matter even more in a tournament setting where you may be re-plugging the controller a lot as you change who's playing at a setup and when. For people who primarily play Melee, it would just remember they last used the Melee Mode and should work basically the same for them, so I don't think there's much to lose here.
Expected behavior:
Connect haybox device to a valid gc adapter and be able to play on PC Slippi with this adapter.
Actual behavior:
Box device only works via usb mode, on gamecube adapter it does not work
Troubleshooting steps:
Before you go on and explain why I should use USB connection, please focus on the conversation. I have my use case and my reasons, I want to ensure this feature does work and want to root cause why it is not working for me.
In file included from X:\HayB0XX\HayB0XX\DInputBackend.cpp:1:0:
X:\HayB0XX\HayB0XX\src\ArduinoJoystickLibrary\src\Joystick.h:32:2: error: #error The Joystick library can only be used with a USB MCU (e.g. Arduino Leonardo, Arduino Micro, etc.).
#error The Joystick library can only be used with a USB MCU (e.g. Arduino Leonardo, Arduino Micro, etc.).
^~~~~
In file included from X:\HayB0XX\HayB0XX\DInputBackend.cpp:4:0:
DInputBackend.h:16:3: error: 'Joystick_' does not name a type
Joystick_ *mpJoystick;
^~~~~~~~~
X:\HayB0XX\HayB0XX\DInputBackend.cpp: In constructor 'DInputBackend::DInputBackend()':
DInputBackend.cpp:8:3: error: 'mpJoystick' was not declared in this scope
mpJoystick = new Joystick_(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
^~~~~~~~~~
DInputBackend.cpp:8:20: error: expected type-specifier before 'Joystick_'
mpJoystick = new Joystick_(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_GAMEPAD,
^~~~~~~~~
X:\HayB0XX\HayB0XX\DInputBackend.cpp: In destructor 'virtual DInputBackend::~DInputBackend()':
DInputBackend.cpp:26:3: error: 'mpJoystick' was not declared in this scope
mpJoystick->end();
^~~~~~~~~~
X:\HayB0XX\HayB0XX\KeyboardMode.cpp: In constructor 'KeyboardMode::KeyboardMode(socd::SocdType, state::InputState&)':
KeyboardMode.cpp:9:3: error: 'Keyboard' not found. Does your sketch include the line '#include <Keyboard.h>'?
Keyboard.begin();
^~~~~~~~
X:\HayB0XX\HayB0XX\KeyboardMode.cpp:9:3: note: suggested alternative: 'KeyboardMode'
Keyboard.begin();
^~~~~~~~
KeyboardMode
X:\HayB0XX\HayB0XX\KeyboardMode.cpp: In destructor 'virtual KeyboardMode::~KeyboardMode()':
KeyboardMode.cpp:13:5: error: 'Keyboard' not found. Does your sketch include the line '#include <Keyboard.h>'?
Keyboard.releaseAll();
^~~~~~~~
DInputBackend.cpp:27:10: error: type '<type error>' argument given to 'delete', expected pointer
delete mpJoystick;
^~~~~~~~~~
X:\HayB0XX\HayB0XX\DInputBackend.cpp: In member function 'virtual void DInputBackend::SendOutputs(state::OutputState)':
DInputBackend.cpp:32:3: error: 'mpJoystick' was not declared in this scope
mpJoystick->setButton(0, outputState.b);
^~~~~~~~~~
X:\HayB0XX\HayB0XX\KeyboardMode.cpp:13:5: note: suggested alternative: 'KeyboardMode'
Keyboard.releaseAll();
^~~~~~~~
KeyboardMode
X:\HayB0XX\HayB0XX\KeyboardMode.cpp: In member function 'void KeyboardMode::Press(char, bool)':
KeyboardMode.cpp:24:9: error: 'Keyboard' not found. Does your sketch include the line '#include <Keyboard.h>'?
Keyboard.press(key);
^~~~~~~~
X:\HayB0XX\HayB0XX\KeyboardMode.cpp:24:9: note: suggested alternative: 'KeyboardMode'
Keyboard.press(key);
^~~~~~~~
KeyboardMode
KeyboardMode.cpp:26:9: error: 'Keyboard' not found. Does your sketch include the line '#include <Keyboard.h>'?
Keyboard.release(key);
^~~~~~~~
X:\HayB0XX\HayB0XX\KeyboardMode.cpp:26:9: note: suggested alternative: 'KeyboardMode'
Keyboard.release(key);
^~~~~~~~
KeyboardMode
exit status 1
'Joystick_' does not name a type
master
(7620248)diff --git a/HayB0XX/HayB0XX.ino b/HayB0XX/HayB0XX.ino
index d5be178..2e03ae1 100644
--- a/HayB0XX/HayB0XX.ino
+++ b/HayB0XX/HayB0XX.ino
@@ -10,7 +10,7 @@
Zac Staples' Arduino_Vector library
*/
-#include "setup_gccpcb2.h"
+#include "setup_smashbox.h"
#include "DefaultKeyboardMode.h"
#include "FgcMode.h"
@@ -75,8 +75,8 @@ void readInputs() {
gInputState.mod_x = (digitalRead(pinout::MODX) == LOW);
gInputState.mod_y = (digitalRead(pinout::MODY) == LOW);
gInputState.start = (digitalRead(pinout::START) == LOW);
- gInputState.select = (digitalRead(pinout::SELECT) == LOW);
- gInputState.home = (digitalRead(pinout::HOME) == LOW);
+ // gInputState.select = (digitalRead(pinout::SELECT) == LOW);
+ // gInputState.home = (digitalRead(pinout::HOME) == LOW);
gInputState.b = (digitalRead(pinout::B) == LOW);
gInputState.x = (digitalRead(pinout::X) == LOW);
gInputState.z = (digitalRead(pinout::Z) == LOW);
@@ -114,8 +114,8 @@ void setup() {
pinMode(pinout::MODX, INPUT_PULLUP);
pinMode(pinout::MODY, INPUT_PULLUP);
pinMode(pinout::START, INPUT_PULLUP);
- pinMode(pinout::SELECT, INPUT_PULLUP);
- pinMode(pinout::HOME, INPUT_PULLUP);
+ // pinMode(pinout::SELECT, INPUT_PULLUP);
+ // pinMode(pinout::HOME, INPUT_PULLUP);
pinMode(pinout::B, INPUT_PULLUP);
pinMode(pinout::X, INPUT_PULLUP);
pinMode(pinout::Z, INPUT_PULLUP);
I'm on Windows 10 and using the git clone --recursive
method.
Note that this requires a hardmodded (RGH) Xbox 360 and UsbdSecPatch either as a DashLaunch plugin or baked into the modified NAND with J-Runner and will not work on an unmodified Xbox 360 and I don't expect it to work on an unmodified 360...
So on a modded 360 you can basically use anything with an XInput mode. I've used a GuliKit KK2 Pro and KK3 Max, I've used various GP2040-CE devices. They work fine in everything except certain Capcom games which use an emulator that seems pickier about controllers (e.g. Street Fighter 3rd Strike and Darkstalkers, likely others). My Open-Frame1, however, can not even navigate the 360 menu or do anything in any game.
GP2040-CE stuff works for maybe 99% of Xbox 360 usage, HayBox for none, and if I use a MayFlash Magic NS 2, I can also use *any controller (even a DualShock 4) in any game, including the problematic Capcom(?) games. InvoxiPlayGames/UsbdSecPatch#2
There are a few layers to this. I would like the controller to work at all, of course, but I think it would be neat if you could somehow copy the identifying info that MayFlash's adapter is using to get slightly better support than GP2040-CE currently has. Although even matching their support would be good as the controller still could work for things like Soulcalibur IV, N+, and Mega Man 9/10.
In case it's useful, I'll try to compile some USB identifier info from plugging into my PC from various things.
HayBox:
2024-08-01T08:21:50,792925-05:00 usb 1-9.3.1: new full-speed USB device number 30 using xhci_hcd
2024-08-01T08:21:50,895029-05:00 usb 1-9.3.1: New USB device found, idVendor=0738, idProduct=4726, bcdDevice= 1.00
2024-08-01T08:21:50,895036-05:00 usb 1-9.3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
2024-08-01T08:21:50,895039-05:00 usb 1-9.3.1: Product: Pico
2024-08-01T08:21:50,895041-05:00 usb 1-9.3.1: Manufacturer: Raspberry Pi
2024-08-01T08:21:50,895043-05:00 usb 1-9.3.1: SerialNumber: E66118C417909121
2024-08-01T08:21:50,909114-05:00 input: Mad Catz Xbox 360 Controller as /devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9.3/1-9.3.1/1-9.3.1:1.0/input/input397
2024-08-01T08:21:50,909865-05:00 cdc_acm 1-9.3.1:1.1: ttyACM0: USB ACM device
GP2040-CE:
2024-08-01T08:23:07,080990-05:00 usb 1-9.3.1: new full-speed USB device number 31 using xhci_hcd
2024-08-01T08:23:07,183974-05:00 usb 1-9.3.1: New USB device found, idVendor=045e, idProduct=028e, bcdDevice= 1.14
2024-08-01T08:23:07,183981-05:00 usb 1-9.3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
2024-08-01T08:23:07,183983-05:00 usb 1-9.3.1: Product: XInput STANDARD GAMEPAD
2024-08-01T08:23:07,183985-05:00 usb 1-9.3.1: Manufacturer: Microsoft
2024-08-01T08:23:07,183987-05:00 usb 1-9.3.1: SerialNumber: 1.0
2024-08-01T08:23:07,191044-05:00 input: Microsoft X-Box 360 pad as /devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9.3/1-9.3.1/1-9.3.1:1.0/input/input398
GuliKit KK2 Pro:
2024-08-01T08:24:43,369014-05:00 usb 1-9.3.1: new full-speed USB device number 39 using xhci_hcd
2024-08-01T08:24:43,471415-05:00 usb 1-9.3.1: New USB device found, idVendor=045e, idProduct=028e, bcdDevice= 1.10
2024-08-01T08:24:43,471423-05:00 usb 1-9.3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
2024-08-01T08:24:43,471425-05:00 usb 1-9.3.1: Product: Controller
2024-08-01T08:24:43,471427-05:00 usb 1-9.3.1: Manufacturer: ZhiXu
2024-08-01T08:24:43,477966-05:00 input: Microsoft X-Box 360 pad as /devices/pci0000:00/0000:00:14.0/usb1/1-9/1-9.3/1-9.3.1/1-9.3.1:1.0/input/input406
Magic NS2 (+ GP2040-CE device):
2024-08-01T08:27:17,921045-05:00 usb 1-1: new full-speed USB device number 46 using xhci_hcd
2024-08-01T08:27:18,070350-05:00 usb 1-1: New USB device found, idVendor=045e, idProduct=028e, bcdDevice= 1.01
2024-08-01T08:27:18,070358-05:00 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
2024-08-01T08:27:18,070360-05:00 usb 1-1: Product: MAGIC-NS2
2024-08-01T08:27:18,070362-05:00 usb 1-1: Manufacturer: .
2024-08-01T08:27:18,070363-05:00 usb 1-1: SerialNumber: 0253C4960000C3ED
2024-08-01T08:27:18,072875-05:00 input: Microsoft X-Box 360 pad as /devices/pci0000:00/0000:00:14.0/usb1/1-1/1-1:1.0/input/input413
Those are just dmesg output, I'm not sure if I need more specific info from lsusb or something to be useful.
lsusb -v output for Magic NS2:
Bus 001 Device 046: ID 045e:028e Microsoft Corp. Xbox360 Controller
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 255 Vendor Specific Class
bDeviceSubClass 255 Vendor Specific Subclass
bDeviceProtocol 255 Vendor Specific Protocol
bMaxPacketSize0 64
idVendor 0x045e Microsoft Corp.
idProduct 0x028e Xbox360 Controller
bcdDevice 1.01
iManufacturer 1 .
iProduct 2 MAGIC-NS2
iSerial 3 0253C4960000C3ED
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0030
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 93 [unknown]
bInterfaceProtocol 1
iInterface 0
** UNRECOGNIZED: 10 21 10 01 01 24 81 14 03 00 03 13 02 00 03 00
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 4
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 8
*Surprisingly, my HayBox controller also does not even work with the Magic NS 2 adapter in the chain. My GP2040-CE controller, GuliKit controller, and an 8bitdo Pro 2 all work with the Magic NS 2 plugged in, including in the problematic Capcom games. I thought that at least with the Magic NS 2 I could use a HayBox device, so the problem is more severe than I expected.
I know the controller identifier already had to be changed once to fix DPad support on Linux, so maybe this is a big ask if it involves doing a similar thing again. I thought it was worth bringing up at least.
My Open-Frame1 is currently running the configurator branch, but I also ran into this same issue the other day before changing to that firmware.
I was looking through this firmware's SOCD resolution and making some modification and noticed that the twoIP function seems to output a neutral if both socd_state.was_dir1 and socd_state.was_dir2 are false and both of the SOCD inputs are true. Is this intended behavior?
I've been trying to make my own modes using the configurator branch, but I can't seem to find where to change the default modes when plugging into switch / pc (it used to be in config.cpp in setup () )... and I also can't find where to change the button inputs to change modes on the fly... There is no "mode_selection.hpp" in config... and the one in core (both src and include) doesn't seem to have this.. Any help would be appreciated!!
EDIT: Solution is to hold the A button while plugging in via a Gamecube Controller Adapter
I have a b0xx that I use for smash ultimate, and was told to give HayBox a try in order to fix the SOCD lockout issue.
None of the buttons seem to do anything, I can't leave the switch's home menu.
Any thoughts on debugging, or some step I may have missed?
NOTE: I tried this both on Linux and Windows 10 with the same results, using the most recent commit 9fb52af
* Executing task: platformio run --environment b0xx_r2
Processing b0xx_r2 (board: leonardo; platform: atmelavr; framework: arduino)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/leonardo.html
PLATFORM: Atmel AVR (4.0.0) > Arduino Leonardo
HARDWARE: ATMEGA32U4 16MHz, 2.50KB RAM, 28KB Flash
DEBUG: Current (simavr) On-board (simavr)
PACKAGES:
- framework-arduino-avr @ 5.1.0
- toolchain-atmelavr @ 1.70300.191015 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain+, Compatibility ~ soft
Found 10 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Nintendo @ 1.4.0
|-- Wire @ 1.0
|-- arduino-nunchuk @ 0.0.0+20220924193459
| |-- Wire @ 1.0
|-- Joystick @ 2.1.1
|-- Keyboard @ 1.0.4
| |-- HID @ 1.0
|-- HID @ 1.0
Building in release mode
Compiling .pio/build/b0xx_r2/src/config/b0xx_r2/config.cpp.o
Linking .pio/build/b0xx_r2/firmware.elf
Checking size .pio/build/b0xx_r2/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [=== ] 32.1% (used 823 bytes from 2560 bytes)
Flash: [======== ] 84.4% (used 24204 bytes from 28672 bytes)
Building .pio/build/b0xx_r2/firmware.hex
============================================================================== [SUCCESS] Took 1.07 seconds ==============================================================================
Environment Status Duration
------------- -------- ------------
b0xx_r2 SUCCESS 00:00:01.069
============================================================================== 1 succeeded in 00:00:01.069 ==============================================================================
* Terminal will be reused by tasks, press any key to close it.
* Executing task: platformio run --target upload --environment b0xx_r2
Processing b0xx_r2 (board: leonardo; platform: atmelavr; framework: arduino)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/leonardo.html
PLATFORM: Atmel AVR (4.0.0) > Arduino Leonardo
HARDWARE: ATMEGA32U4 16MHz, 2.50KB RAM, 28KB Flash
DEBUG: Current (simavr) On-board (simavr)
PACKAGES:
- framework-arduino-avr @ 5.1.0
- tool-avrdude @ 1.60300.200527 (6.3.0)
- toolchain-atmelavr @ 1.70300.191015 (7.3.0)
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain+, Compatibility ~ soft
Found 10 compatible libraries
Scanning dependencies...
Dependency Graph
|-- Nintendo @ 1.4.0
|-- Wire @ 1.0
|-- arduino-nunchuk @ 0.0.0+20220924193459
| |-- Wire @ 1.0
|-- Joystick @ 2.1.1
|-- Keyboard @ 1.0.4
| |-- HID @ 1.0
|-- HID @ 1.0
Building in release mode
Checking size .pio/build/b0xx_r2/firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [=== ] 32.1% (used 823 bytes from 2560 bytes)
Flash: [======== ] 84.4% (used 24204 bytes from 28672 bytes)
Configuring upload protocol...
AVAILABLE: avr109
CURRENT: upload_protocol = avr109
Looking for upload port...
Auto-detected: /dev/ttyACM0
Forcing reset using 1200bps open/close on port /dev/ttyACM0
Waiting for the new upload port...
Uploading .pio/build/b0xx_r2/firmware.hex
Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.
Programmer supports the following devices:
Device code: 0x44
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e9587 (probably m32u4)
avrdude: reading input file ".pio/build/b0xx_r2/firmware.hex"
avrdude: writing flash (24204 bytes):
Writing | ################################################## | 100% 1.83s
avrdude: 24204 bytes of flash written
avrdude: verifying flash memory against .pio/build/b0xx_r2/firmware.hex:
avrdude: load data flash data from input file .pio/build/b0xx_r2/firmware.hex:
avrdude: input file .pio/build/b0xx_r2/firmware.hex contains 24204 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.18s
avrdude: verifying ...
avrdude: 24204 bytes of flash verified
avrdude: safemode: Fuses OK (E:CB, H:D8, L:FF)
avrdude done. Thank you.
============================================================================== [SUCCESS] Took 4.93 seconds ==============================================================================
Environment Status Duration
------------- -------- ------------
b0xx_r2 SUCCESS 00:00:04.926
============================================================================== 1 succeeded in 00:00:04.926 ==============================================================================
* Terminal will be reused by tasks, press any key to close it.
Hello, Rumble Enjoyer Mr. Potatobread here.
One of my rumble-box users was experiencing some issues after switching to this FW from Arte's: Dpad-right seemed to always be held down on both PC and console.
After some investigation, I found that the "home" button results in a Dpad-right output, and the pin 'home' is mapped to (GPIO11) is the same as the rumble signal pin on Arte's FW.
This is obviously not a life-or-death issue, and my friend here is likely the only person to ever experience this very specific issue - but I figured I would post it here in case people in the future had this problem or if there were plans to add rumble to this FW.
For now I just changed 'home' to GPIO9 to solve the issue.
Cheers!
When inputting the button combination for a Keyboard mode on a Pico, the device will rapidly spam those same 3 keys for maybe a second. For example, when inputing the Default Keyboard mode, it will spit out A, F, and H repeatedly in a long sequence. The sequence is variable, and appears to be related to how long all 3 buttons where held down after the button combination was inputed.
Seems all stick inputs are shifted about 1 left, 1 up. This also affects the stick in neutral.
For example:
Not the biggest issue since I can round up, but the issue exists.
Example 2:
This can easily be worked around with modifiers, but the issue exists.
...
Also, because the stick cannot fully progress from Neutral to Up, scrolling up is not possible in certain Switch System Settings.
I'm playing Rivals of Aether and the tutorials requires you to hit a taunt button to repeat the instructions. Is that possible with HayBox? I mashed around a bit wondering if one of the modifier buttons would turn something into a d-pad, but I didn't figure anything out.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.